在VS2010(VS2008)中调试C++ Boost.Test应用程序时,如何使调试器在Boost.Test断言失败点停止?Boost.Test应用程序调试
6
A
回答
2
我还没有尝试过这个,但理论上你想在check_impl function(在boost_unit_test_library源文件中)某处设置一个断点,可能在其最后一个case语句的非PASS情况下。
在实践中,我总是发现自己只是再次运行测试(或特定的问题测试,用--run_test = ...选择)并在违规检查上带有断点。
需要注意的是一个失败BOOST_REQUIRE
导致抛出,因此,如果您启用VS”突破上-C++ - 例外的是会很好(但不是BOOST_CHECK
S于那些打破调试选项,这只是返回并进行)。
1
我按照@timday的建议在check_impl()
中加入了断点。
下面是升压1.57.0,文件boost/test/impl/test_tool.ipp
,线355至373的摘录:
switch(tl) {
case PASS:
framework::assertion_result(true);
return true;
case WARN:
return false; // ADD BREAKPOINT HERE
case CHECK:
framework::assertion_result(false);
return false; // ADD BREAKPOINT HERE
case REQUIRE:
framework::assertion_result(false);
framework::test_unit_aborted(framework::current_test_case());
throw execution_aborted(); // ADD BREAKPOINT HERE
}
+0
这似乎并没有在提升1.63。 test_tool.ipp中的错误报告似乎发生在一个单独的线程中,或者在最后,当所有测试已经被检查时发生。我想停止何时发生断言。 – CygnusX1 2017-07-14 08:12:40
0
assertion.hpp
模板类binary_expr:
assertion_result evaluate(bool no_message = false) const
{
assertion_result const expr_res(value());
if(no_message || expr_res)
return expr_res; <<<<<<<< SUCCESS
BRK wrap_stringstream buff;
report(buff.stream());
return tt_detail::format_assertion_result(buff.stream().str(), expr_res.message());
}
相关问题
- 1. 调试Winforms应用程序
- 2. 调试Android应用程序
- 3. 调试Elixir应用程序
- 4. 调试Angular应用程序
- 5. 调试C#应用程序
- 6. 调试CQRS应用程序
- 7. 调试Haskell应用程序
- 8. 调试iphone应用程序
- 9. 调试Grails应用程序
- 10. PowerBuilder应用程序 - 调试
- 11. Red5应用程序调试
- 12. XAML应用程序调试
- 13. 调试c#应用程序
- 14. 调试Silverlight应用程序
- 15. 调试fastcgi应用程序
- 16. 调试Swing应用程序
- 17. 调试hadoop应用程序
- 18. Odoo调试应用程序
- 19. 调试EAR应用程序?
- 20. 记录Boost.Test测试用例
- 21. 远程调试Java应用程序
- 22. 远程调试iOS应用程序
- 23. eclipse调试远程web应用程序
- 24. 调试多线程应用程序
- 25. 远程调试ASP.NET应用程序
- 26. 远程调试ASP.Net应用程序
- 27. 远程调试Web应用程序
- 28. 远程调试ASP.NET Web应用程序
- 29. 远程调试托管应用程序
- 30. 远程调试 - Web应用程序Azure
谢谢。我还发现按照Boost.Test文档的“Microsoft Visual Studio .NET用户特定”一章中所述的过程很有用。它允许在验证失败的地方手动设置断点。 – 2010-08-18 11:01:09