C ++ programma si chiude improvvisamente, come faccio il debug di questo con gdb?
-
26-09-2019 - |
Domanda
Sto scrivendo un programma che viene eseguito alcuni test di unità sul codice che che state scritte da miei colleghi. Sto usando il Google C ++ Testing Framework . Ho eseguito una funzione che genera 3 fili, e poi corre per 30 secondi. Dopo viene eseguito, il programma termina con lo stato 0. Questo non è il comportamento previsto, ovviamente. Lo so che non lo rende affatto più lontano, perché ho messo una dichiarazione cout nella riga successiva immediata.
La mia domanda è, qual è il modo migliore per andare su questo con il debug gdb? E 'difficile perché il programma non segfault o qualcosa di simile, esce solo. Esiste un modo per collegare una chiamata in uscita, e quindi ottenere una lunga backtrace?
Grazie per il vostro aiuto.
Modifica:
cSystemCfg* pSystemCfg = new cSystemCfg();
std::cout << "Before runThing" << std::endl;
pSomething->runThing(&acq, pHwIf, pSystemCfg, pIf);
//Exits here, never gets to the next line
std::cout << "After runThing" << std::endl;
Soluzione
Oltre break exit
, ci sono un paio di altri posti che potrebbe essere necessario impostare punti di interruzione. Date un'occhiata a questa domanda e le risposte .
Altri suggerimenti
Un semplice comando di break exit
in gdb dovrebbe interrompere il programma e consentono di esaminare lo stato in cui le chiamate di programma exit
da qualsiasi thread.
Questo è naturalmente assumendo che il programma sta terminando da exit
essere chiamato e non per qualche altra ragione, come abort
, un errore di asserzione, un'eccezione non gestita, o di ritorno da principale.