2011-05-28 14 views
5

Tengo que escribir pruebas para un código C++ mal escrito. El problema es que el código provoca aserciones de STL/errores de depuración en muchas situaciones (normalmente causadas por errores tontos como el acceso más allá de los límites de una cadena/vector), que dan como resultado la finalización de las pruebas.¿Cómo hacer que STL arroje excepciones en lugar de aserciones?

¿Es posible hacer que el STL arroje excepciones (que se pueden atrapar) en lugar de simplemente estrellarse?

Tengo que mantener mis cambios en el código original al mínimo absoluto.

Gracias por la ayuda

+2

¿Qué implementación de biblioteca estándar está utilizando? –

+0

Actualmente estoy en VS 2010, pero se supone que el código es multiplataforma (al menos las últimas versiones importantes de GCC y VS). –

+6

No veo el problema aquí ... use un depurador, y le dirá exactamente en qué condiciones ocurre la afirmación, corríjala, pase a la siguiente. Muchos frameworks de prueba le permiten omitir o saltar a alguna prueba específica si desea ignorar algún problema durante un período corto, pero las afirmaciones son * maravillosas * para la depuración. –

Respuesta

3

Definitivamente depende de la STL está utilizando. Dicho esto, simplemente podría no ser posible.

El estándar define una cantidad de garantías (especialmente la de C++ 0x one) y si una función arroja o no forma parte de esas garantías. Por ejemplo std::vector<T>::operator[] no lanzará.

Dicho esto, podría haber una serie de trucos (indicadores de compilación específicos para la depuración, o cambiar la macro utilizada en el STL, si hay uno), pero será muy específico.

Otra solución podría ser intentar ejecutar el programa en un entorno virtualizado. Por ejemplo, en Linux, puede ejecutarlo en Valgrind. Informará los errores de acceso, pero no detendrá la ejecución del programa.

Cuestiones relacionadas