unit test speed google c++ visual-c++ tdd googletest

c++ - test - Excepción SEH con el código 0xc0000005 arrojado en el cuerpo de prueba



google test (6)

Estoy teniendo un problema similar y está relacionado con las variables no inicializadas y ejecutando la prueba en la versión de lanzamiento. Tuve un char * no inicializado después de lo cual inicializado a NULL parece haber solucionado el problema.

Estoy escribiendo una prueba usando GoogleTest para la siguiente clase y obtengo el error anterior.

class Base { // Other Functions; CSig objSig[50]; }

La clase CSig es la siguiente:

class CSig { //... constructor, destructor(empty) and some functions CMod *objMod; CDemod *objDemod; } CSig :: CSig { bIsInitialised = false; for (int i=0; i<MAX_NUM; i++) { PStrokePrev[i] = 0.0; } }

Sin embargo, cuando descarto CSig objSig[50] , las pruebas funcionan bien.

¿Qué puedo hacer para resolver este problema? Además, necesito tener CSig objSig[50] en la clase Base.


La forma en que acabo de encontrar el problema fue que en Visual Studio fui a Debug-> Exceptions y verifiqué todo en la primera columna. Luego, ejecute / depure sus pruebas unitarias, y lanzará una excepción en la línea en la que se encuentra el problema. Ahí es donde necesitas depurar / arreglarlo.


Me encontré con este problema usando GoogleTest con Visual Studio 2010. Nuestra configuración incluye la creación de una biblioteca para GoogleTest Frameworks, que luego se vincula con nuestras pruebas unitarias individuales. Recientemente actualicé el soporte de Frameworks y lo volví a compilar desde cero. Después de hacer esto, me encontré con la excepción descrita anteriormente.

Después de un poco de excavación, descubrí que la configuración de "Alineación de miembros de Struct" era la culpable:

Propiedades del proyecto> Propiedades de configuración> C / C ++> Generación de código> Alineación de miembros de Struct

Mientras que el proyecto Frameworks tenía la configuración establecida en ''predeterminado'', el proyecto de prueba de unidad correspondiente lo tenía configurado en "1 byte / Zp1". Una vez que los cambié para tener la misma alineación, el problema desapareció.


Para mí, parecía ser un error de referencia nulo. Se invocó algún método en un nullptr y por razones que no están claras para mí, no falló inmediatamente, sino que simplemente comenzó a ejecutarse. El error SEH presumiblemente ocurrió tan pronto como se accedió a la memoria no asignada. Así que compruebe si hay punteros nulos!


Si está utilizando Visual Studio 2013, marque la casilla Lanzar para ver las excepciones de Win32 (específicamente la infracción de acceso) en Debug> Exceptions. Esto le permitirá depurar qué línea tiene el problema. Esto podría ser útil ya que el depurador no se romperá si su programa normalmente genera otras excepciones.


Una excepción SEH (control estructurado de excepciones) no es una excepción de C ++ que se pueda manejar con las construcciones en lenguaje c ++ (try-catch), pero se genera desde las ventanas en sí y apunta a una falla fundamental. Las excepciones de SEH son muy molestas porque no causan el desenrollamiento normal de la pila, lo que puede llevar a archivos no cerrados o mutex no desbloqueados que normalmente deberían ser eliminados por los destructores del objeto propietario. He encontrado excepciones SEH al acceder a la memoria que no pertenece al proceso actual, así que recomiendo consultar las instrucciones relacionadas con la memoria en el constructor y el destructor de CSig. Puedes leer sobre SEH, por ejemplo, here