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;
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top