在VS2010(VS2008)中调试C ++ Boost.Test应用程序时,如何使调试器停止在Boost.Test断言失败点?
答案 0 :(得分:2)
我自己没有尝试过,但从理论上讲,你想在check_impl function(在boost_unit_test_library源代码中)的某个地方设置一个断点,可能是在最终case语句的非PASS情况下。
在实践中,我总是发现自己只是在违规检查中使用断点再次运行测试(或使用--run_test = ...选择的特定问题测试)。
请注意,失败的BOOST_REQUIRE
会导致抛出,因此如果启用VS'break-on-C ++ - 调试选项中的异常将会很好地破坏(但不是BOOST_CHECK
s ,它只是返回并继续)。
答案 1 :(得分:1)
我在check_impl()
中设置了断点,正如@timday所建议的那样。
以下是Boost 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
}
答案 2 :(得分: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() );
}