2012-07-07 9 views
10

Mi sto insegnando a utilizzare gdb e sto eseguendo alcuni test casuali. Vale la pena ricordare che sto usando un'installazione portatile di MinGW su Windows 7 x64. Ho creato un programma che conosco risultato in uno stack overflow, e mentre lo percorro in gdb in primo luogo ottengo due segnali SIGSEGV (nessuna sorpresa), e poi esce (ancora nessuna sorpresa) con il codice 030000000375.gdb: Programma terminato con il codice 030000000375

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

Curiosità che ottiene il meglio da me ... che diamine è quel codice? L'ho cercato su Google e ho trovato molto poco.

Grazie!

UPDATE: Per riferimento ho provato lo stesso programma su Ubuntu, ed i risultati sono leggermente diversa:

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

Hai sempre lo stesso codice? Se sì, hai provato a cambiare i dati del tuo programma e vedere se ottieni ancora lo stesso codice? – Shahbaz

risposta

10

gdb stampa il codice di uscita in formato ottale. Non ovvio, ma indicato dal leader 0.

Quindi 030000000375 è 0xC00000FD in esadecimale, il che rende il codice molto più comune a un programmatore di Windows.

0xC00000FD è STATUS_STACK_OVERFLOW e deve essere definito in ntstatus.h.

+0

Questa è una cattura molto buona! – ArjunShankar

+1

Buona scoperta, grazie! E molto interessante che Windows ti dica quando ottieni uno stack overflow, ma Linux no. – The111

+0

Siete i benvenuti! Btw: Forse dovresti modificare l'argomento di questa domanda in "* gdb: ** Programma ** terminato con il codice 030000000375 *" poiché non è 'gdb' in uscita con questo codice. @ The111 – alk