2009-10-30 6 views
7

Sto provando a utilizzare il framework di test dell'unità check per la mia applicazione C. Ma non posso utilizzare il debugger (gdb) con esso a causa di due punti:Test dell'unità di debug in C mediante controllo

  • primo, controllare utilizzare alcune macro complesse (START_TEST e END_TEST) e il debugger ha problemi a mettere un punto di interruzione nel mio codice tra questi due macro (in realtà, posso mettere un breakpoint del software ma non è mai visto da gdb)

  • in secondo luogo, controllare definire una sorta di eccezioni ridefinendo il comportamento di interruzione. Quindi, quando provo a inserire un punto di interruzione hardware, il test non è riuscito ed esci perché considera il breakpoint hardware come un errore del mio test.

Qualcuno ha già incontrato questo problema e ha una soluzione?

risposta

11

sguardo al no-fork mode:

Controlla normalmente forche per creare uno spazio di indirizzi separato. Ciò consente che un segnale o un'uscita anticipata venga catturato e segnalato, piuttosto che abbattere l'intero programma di test, e di solito è molto utile. Tuttavia, quando si tenta di eseguire il debug perché si è verificato un errore di segmentazione o un altro errore del programma, la foratura rende difficile l'uso degli strumenti di debug.

0

Provare TAP (Test Anything Protocol) ... è molto più facile da implementare, spedire e eseguire il debug. È anche molto facile renderlo valgrind -aware e tende a giocare meglio con gdb.

+0

A partire dal 2016-09-23, il collegamento TAP a [http://ccan.ozlabs.org/info/tap.html](http://ccan.ozlabs.org/info/tap.html) è 404. Il sito Web principale, ozlabs.org, è ancora in esecuzione, ma non riesco a individuare le informazioni TAP. Wikipedia ha una voce per [Test Anything Protocol] (https://en.wikipedia.org/wiki/Test_Anything_Protocol); c'è un sito Web per [Test Anything Protocol] (https://testanything.org/) con implementazioni in C, C++, Java, JavaScript, Python, Perl, ecc. –

5

In realtà, è possibile utilizzare anche la modalità fork.

gdb ha due opzioni interessanti relativi al comportamento della forcella:
- detach-on-fork (Impostare questo a false)
- follow-on-fork (sia genitore o figlio, prendo sempre bambino)

questo renderà gdb seguire il bambino processi. Al termine del processo secondario, è necessario tornare manualmente al processo principale utilizzando il comando inferior.