Al depurar una aplicación C++ Boost.Test dentro de VS2010 (VS2008), cómo hacer que el depurador se detenga en Boost.Test puntos de falla de aserción?Depuración de la aplicación Boost.Test
Respuesta
No he intentado esto por mí mismo, pero en teoría querría establecer un punto de interrupción en el check_impl function (en la fuente boost_unit_test_library), probablemente en los casos que no son PASS de su declaración de caso final.
En la práctica, siempre acabo de volver a ejecutar las pruebas (o la prueba de problema específico, seleccionada con --run_test = ...) con un punto de interrupción en la comprobación ofensiva.
Tenga en cuenta que un defecto BOOST_REQUIRE
resultados en un tiro, por lo que si se habilita VS' break-en-C++ - excepciones en las opciones de depuración que va a romper en los que muy bien (pero no BOOST_CHECK
s, que acaba de regresar y continuar)
Puse puntos de corte en check_impl()
, según lo sugerido por @timday.
Aquí es un extracto de Boost 1.57.0, archivo boost/test/impl/test_tool.ipp
, las líneas 355 a 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
}
Esto no parece funcionar en boost 1.63. El informe de errores en test_tool.ipp parece ocurrir en un hilo separado, o de alguna manera al final, cuando todas las pruebas ya fueron verificadas. Me gustaría detenerme cuando la afirmación ocurra en su lugar. – CygnusX1
assertion.hpp
plantilla de clase 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. Depuración implementó la aplicación azul
- 3. Cómo procesar la salida Boost.Test con Eclipse
- 4. ¿Cómo comparar vectores con Boost.Test?
- 5. Boost.Test en Windows de 64 bits
- 6. Depuración de una aplicación pyQT4?
- 7. Depuración de la temida 'Error de inicialización de la aplicación'
- 8. Pruebas de Boost.Test en una biblioteca estática
- 9. En Boost.Test, ¿cómo obtener el nombre de la prueba actual?
- 10. Depuración Aplicación FuseESB en Eclipse
- 11. Ayuda para empezar a utilizar Boost.Test
- 12. Depuración aplicación de iPhone desde la línea de comandos
- 13. Error de la aplicación .NET sin información de depuración
- 14. Depuración de problemas Código de C++ desde la aplicación .NET
- 15. Depuración de la aplicación web en el simulador de iPad
- 16. Desinstalar la aplicación de Android antes de cada depuración
- 17. Depuración de una aplicación de subprocesos múltiples
- 18. Depuración remota de una aplicación Java
- 19. Depuración de una aplicación Delphi en Wine
- 20. Ejecutar la aplicación node.js en la depuración con el supervisor
- 21. Depuración de la aplicación iOS en el primer lanzamiento
- 22. UISlider con velocidades variables de depuración (como la aplicación iPod)
- 23. Depuración remota de Visual Studio al iniciar la aplicación
- 24. Niveles de depuración al escribir una aplicación
- 25. Instalar DLL de depuración de MS para la depuración remota
- 26. Técnicas de depuración sin herramientas de depuración
- 27. Depuración aplicación HLSL para Windows 8
- 28. Implicaciones de implementar una compilación de depuración de una aplicación?
- 29. ¿Cómo puedo usar Boost.Test en un proyecto basado en CMake?
- 30. Depuración de depuración o lanzamiento del informe?
Gracias. También me pareció útil seguir el procedimiento descrito en el capítulo "Específicos de los usuarios de Microsoft Visual Studio .NET" de la documentación de Boost.Test. Permite establecer un punto de interrupción de forma manual en el lugar donde falla la verificación. –