Esiste un buon metodo generale per il debug delle macro C ++?
Domanda
In generale, ogni tanto ho una catena di macro nidificate con alcuni elementi condizionali del preprocessore nelle loro definizioni. Può essere doloroso eseguire il debug poiché è difficile vedere direttamente il codice in esecuzione.
Qualche tempo fa ricordo vagamente di aver trovato un flag di compilatore (gcc) per espanderli, ma ho avuto problemi a farlo funzionare in pratica.
Soluzione
gcc -E genererà la sorgente preelaborata su stdout.
Altri suggerimenti
Per gli utenti di MSVC, è possibile fare clic con il pulsante destro del mouse sul file / progetto, visualizzare le impostazioni e modificare le proprietà del file in output sorgente preelaborata (che in genere nella directory obj).
Questo potrebbe non essere applicabile nella tua situazione, ma le macro ostacolano davvero il debug e spesso sono abusate ed evitabili.
Puoi sostituirli con funzioni incorporate o altrimenti eliminarli tutti insieme?
Probabilmente dovresti iniziare ad allontanarti dalle macro e iniziare a usare inline e template.
Le macro sono un vecchio strumento, lo strumento giusto a volte. Come ultima risorsa, ricorda che printf è tuo amico (e in realtà printf non è poi un cattivo amico quando fai cose multithread)
Esegui il debug dello smontaggio con i simboli caricati.
gcc -save-temps scriverà un file .i (o .ii per C ++) che è l'output del preprocessore C, prima che venga consegnato al compilatore. Questo può essere spesso illuminante.
GCC e compilatori compatibili usano l'opzione -E per generare la sorgente preelaborata su standard out.
gcc -E foo.cpp
Sun Studio supporta anche questo flag:
CC -E foo.cpp
Ma ancora meglio è -xdumpmacros. Puoi trovare ulteriori informazioni nei documenti di Suns.