Una volta utilizzavo molto codice di debug. Stavo quasi interamente prendendo di mira Windows, quindi c'era molto di questa funzione di output della stringa di debug che non ricordo più come si scrive, in modo da poter catturare la traccia con un particolare programma.
Rimaneva al suo posto un codice di debug, cose particolari che avevano lo scopo di fornire l'annidamento delle chiamate. Tuttavia, anche se la cosa della stringa di debug per lo più non sarebbe visibile su un sistema di produzione, era ancora tutto fatto sotto compilazione condizionale.
La realtà è, tuttavia, che tutto quel codice di debug è stato un grande sforzo per qualcosa che è idealmente gestito in un modo diverso - usando, ovviamente, un debugger. All'epoca, non ero così colpito dal debugger C ++ di Borland. Gli strumenti erano lì, ma troppo spesso davano risultati fuorvianti e l'uso del debugger non IDE (spesso necessario) significava memorizzare i tasti di scelta rapida, il che significava una distrazione dal lavoro da svolgere.
L'unica esperienza di debug che ho trovato che è peggio è GDB da riga di comando.
Essere un esperto con gli strumenti che usi ogni giorno è, ovviamente, importante - ma il debug non dovrebbe essere qualcosa che fai ogni giorno. Se usi il debugger così spesso stai bene con l'apprendimento di dozzine di comandi e / o scorciatoie da tastiera, mi sembra un po 'bandiera rossa.
Quando lavoravo in Visual Studio 7, tuttavia, era chiaro che il debug poteva essere molto pratico ed efficace. Se riesci a eseguire il debug in Visual Studio (incluse le versioni express), il debug è semplicissimo. Senza dubbio se riesci a trovare il front end GUI / IDE giusto, GDB è anche semplice ed efficace, anche se non ho ancora fatto quella ricerca.
C'è anche qualcosa da dire per i test unitari, con l'analisi della copertura usando gcov. Più sei sicuro del comportamento delle tue librerie, meno profondo deve essere il tuo debug - e meno spesso hai bisogno del debugger. E scrivere unit test è abbastanza ragionevole da fare quasi tutti i giorni.
Tool inaspettatamente importante = cmake, uno strumento di compilazione che mi consente di passare facilmente da un edificio all'altro per GCC e VC ++, tra le altre cose. Quindi posso fare i test delle mie unità e la copertura basata su gcov usando GCC, ma passare facilmente a VC ++ per usare il debugger.