Quando si esegue il debug di un'applicazione Boost.Test C++ all'interno di VS2010 (VS2008), come arrestare il debugger su Boost.Test punti di errore di asserzione?Boost.Test debug dell'applicazione
risposta
Non l'ho provato da solo, ma in teoria si vorrebbe impostare un punto di interruzione da qualche parte nel check_impl function (nella fonte boost_unit_test_library), probabilmente nei casi non PASS della sua dichiarazione caso finale.
In pratica mi ritrovo sempre solo a eseguire nuovamente i test (o il test del problema specifico, selezionato con --run_test = ...) con un punto di interruzione sul controllo offendente.
Si noti che un difetto BOOST_REQUIRE
risultati in un tiro, quindi se si attiva VS' break-on-C++ - eccezioni nelle opzioni di debug che ti rompono su quelli ben (ma non BOOST_CHECK
s, che ha appena tornare e portare avanti).
Inserisco i breakpoint in check_impl()
, come suggerito da @timday.
Ecco un estratto da Boost 1.57.0, file di boost/test/impl/test_tool.ipp
, le linee 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
}
Questo non sembra funzionare nella spinta 1.63. La segnalazione di errori in test_tool.ipp sembra avvenire in un thread separato o in qualche modo alla fine, quando tutti i test erano già stati verificati. Vorrei fermarmi quando invece si verifica l'affermazione. – CygnusX1
assertion.hpp
modello di classe 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. boost.test vs. CppUnit
- 2. Per iniziare a utilizzare Boost.Test
- 3. Come elaborare l'output Boost.Test con Eclipse
- 4. Dove trovare l'output Boost.Test analizzato in Eclipse
- 5. Boost.Test test su una libreria statica
- 6. Boost.Test su Windows a 64 bit
- 7. Come confrontare i vettori con Boost.Test?
- 8. Come confrontare i file con Boost.Test?
- 9. In Boost.Test, come ottenere il nome del test corrente?
- 10. #ifdef DEBUG versus #if DEBUG
- 11. #if DEBUG vs. condizionale ("DEBUG")
- 12. Come dire a Boost.Test di fermarsi al primo caso di test fallito?
- 13. Boost.Test: ricerca di una suite di test non banale di lavoro Esempio/Tutorial
- 14. Come eseguire il debug del debug?
- 15. Debug Wordpress
- 16. Haskell Debug
- 17. Debug outofmemoryexception
- 18. Debug QtWebEngine
- 19. Debug monit
- 20. Debug NetLogo
- 21. Debug .xccrashpoint
- 22. XCode debug vs release build durante il debug
- 23. Debug Web Socket Web di Web Inspector Debug
- 24. L'app Delphi ha "Nessuna informazione di debug" durante il debug
- 25. Installazione di DLL di debug MS per il debug remoto
- 26. Errore di debug/equivalente debug STL per GCC?
- 27. PyCharm debug remoto - connessioni, ma non può avviare il debug
- 28. git - ramo "debug", unione "fix" ramo senza "debug"
- 29. dump di debug del nucleo remoto di debug
- 30. bin \ debug contro obj \ debug: qual è la differenza?
Grazie. Ho anche trovato utile seguire la procedura descritta nel capitolo "Utenti specifici di Microsoft Visual Studio. NET" della documentazione di Boost.Test. Consente di impostare manualmente un punto di interruzione nel punto in cui una verifica non riesce. –