2012-07-07 16 views
10

Me enseño a usar gdb y estoy ejecutando algunas pruebas al azar. Vale la pena mencionar que estoy usando una instalación portátil de MinGW en Windows 7 x64. He creado un programa que conozco resultados en un desbordamiento de pila, y cuando lo ejecuto en gdb primero obtengo dos señales SIGSEGV (no es sorpresa), y luego sale (nuevamente no es sorpresa) con el código 030000000375.gdb: Programa salido con el código 030000000375

Program received signal SIGSEGV, Segmentation fault. 
Program received signal SIGSEGV, Segmentation fault. 
Program exited with code 030000000375. 

Curiosidad obteniendo lo mejor de mí ... ¿qué diablos es ese código? Busqué en Google y encontré muy poco.

Gracias!

ACTUALIZACIÓN: Como referencia probé el mismo programa en Ubuntu, y los resultados son ligeramente diferentes:

Program received signal SIGSEGV, Segmentation fault. 
Program terminated with signal SIGSEGV, Segmentation fault. 
The program no longer exists. 
+0

¿Siempre obtiene el mismo código? Si es así, ¿ha intentado cambiar los datos de su programa y ver si todavía obtiene el mismo código? – Shahbaz

Respuesta

10

gdb imprime el código de salida en formato octal. No es obvio, pero lo indica el líder 0.

Así que 030000000375 es 0xC00000FD en hexadecimal, lo que hace que el código parezca mucho más común para un programador de Windows.

0xC00000FD es STATUS_STACK_OVERFLOW y se debe definir en ntstatus.h.

+0

¡Esta es una muy buena captura! – ArjunShankar

+1

¡Buen descubrimiento, gracias! Y muy interesante que Windows realmente te dice cuando obtienes un desbordamiento de pila, pero Linux no lo hace. – The111

+0

¡De nada! Por cierto: tal vez debería modificar el tema de esta pregunta a "* gdb: ** Program ** salió con el código 030000000375 *" ya que no sale 'gdb' con este código. @ The111 – alk

Cuestiones relacionadas