2016-07-11 64 views
6

Recentemente mi sono imbattuto in this project. Il codice è scritto in gran parte in C e l'API è costituito da poche funzioni C. Sfortunatamente il progetto sembra contenere alcuni bug, in particolare continuo a ricevere errori "double free or corruption". Sto cercando di usare valgrind e gdb per scoprire cosa c'è che non va. Il problema sembra essere nell'allocatore di memoria. Sfortunatamente il primo errore di valgrind si verifica in una macro di preprocessore lungo circa 400 righe definita in un'intestazione. Sfortunatamente gdb non può infrangere il codice generato. Anche la traccia dello stack non è molto utile. C'è qualche tecnica che può essere utilizzata per affrontare questo tipo di errori?Come eseguire il debug di una macro del preprocessore

+3

Se fossi stato io? Converti la macro in una funzione inline. Se il progetto li utilizza davvero in modo estensivo (e questo non mi ha spaventato dall'usare il codice), potrei provare a eseguire la pre-elaborazione in un file, e quindi compilare e debuggare quel file. –

+6

400 + linee macro Oo! Prova a generare la sorgente c dopo il passaggio al preprocessore (opzione gcc -E) e imposta i breakpoint in questo file. – Picodev

+0

Bene, essi definiscono una coda di priorità generica "il modo C" :( – hfhc2

risposta

1

Il compilatore online Wandbox.org ha una modalità "CPP" che è molto utile per sperimentare con il preprocessore C.

vedere un esempio qui: https://wandbox.org/permlink/tFUsKMIXaQj8hhte

È possibile fare la stessa cosa in linea, con gcc -P o cl.exe /E