2013-03-24 11 views
6

La mia domanda suona in modo specifico, ma dubito che possa ancora essere un problema di debug in C++.Counter exit code 139 quando è in esecuzione, ma gdb riesce a passare

Sto usando omnet ++ che serve a simulare la rete wireless. omnet ++ stesso è un programma C++.

Ho incontrato un fenomeno queer quando eseguo il mio programma (modificato inet framework con omnet ++ 4.2.2 in Ubuntu 12.04): il programma esce con codice di uscita 139 (la gente dice che questo significa frammentazione della memoria) quando si tocca una certa parte del codici, quando provo a eseguire il debug, gdb non riporta nulla di sbagliato con i codici 'problematici' in cui la simulazione termina in precedenza, in realtà, il debug attraversa questa parte di codici e produce risultati attesi.

gdb versione Info: GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7,4-2012,04

Qualcuno potrebbe dirmi il motivo per cui la corsa non riesce, ma il debug non lo fa?

Grazie mille!

+2

Sembra un comportamento non definito. Non possiamo aiutare senza vedere il codice problematico. –

risposta

17

codice di uscita 139 (persone dicono che questo significa la frammentazione di memoria)

No, significa che il vostro programma è morto con il segnale 11 (SIGSEGV su Linux e la maggior parte degli altri UNIX), noto anche come segmentation fault.

Qualcuno potrebbe dirmi perché la corsa non riesce ma il debug no?

vostre mostre programma undefined comportamento, e può fare qualsiasi cosa (che include che sembra funzionare correttamente a volte).

Il tuo primo passo dovrebbe eseguire questo programma in Valgrind e correggere tutti gli errori segnalati.

Se dopo aver eseguito quanto sopra, il programma si blocca ancora, quindi è necessario lasciarlo eseguire il core (ulimit -c unlimited; ./a.out) e quindi analizzare il core dump con GDB: gdb ./a.out core; quindi utilizzare il comando where.

+0

grazie per la tua rapida risposta, sto cercando come eseguire il programma nel prompt dei comandi, ora sono bloccato dal simulatore. Riferirò dopo aver analizzato con valgrind. – ulyssis2

+0

Ora posso eseguire ed eseguire il debug del programma tramite prompt dei comandi, eseguo e debug passo sui "codici problematici", quindi uso di nuovo IDE eclipse, trovo che in modalità debug, si ferma nello stesso punto con il prompt dei comandi, quando eseguo il programma passo dopo passo, si esegue anche attraverso i "codici problematici", ma quando lo eseguo, il programma crolla da qualche parte intorno ai "codici problematici". Immagino che ciò sia dovuto all'IDE, poiché anche la GUI stessa è un programma e non può funzionare bene in modalità di esecuzione normale. Non ho idea del perché. – ulyssis2

+0

@ ulyssis2 Che cosa dice Valgrind? Il programma potrebbe sembrare funzionare al di fuori dell'IDE, ma Valgrind dovrebbe comunque parlarti del tuo bug. –