2010-08-15 108 views

回答

2

我還沒有嘗試過這個,但理論上你想在check_impl function(在boost_unit_test_library源文件中)某處設置一個斷點,可能在其最後一個case語句的非PASS情況下。

在實踐中,我總是發現自己只是再次運行測試(或特定的問題測試,用--run_test = ...選擇)並在違規檢查上帶有斷點。

需要注意的是一個失敗BOOST_REQUIRE導致拋出,因此,如果您啓用VS」突破上-C++ - 例外的是會很好(但不是BOOST_CHECK S於那些打破調試選項,這只是返回並進行)。

+0

謝謝。我還發現按照Boost.Test文檔的「Microsoft Visual Studio .NET用戶特定」一章中所述的過程很有用。它允許在驗證失敗的地方手動設置斷點。 – 2010-08-18 11:01:09

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()); 
    }