C'era una volta che usavo un sacco di codice di debug. Stavo quasi interamente indirizzando Windows, quindi c'era una grande quantità di questa funzione di debug delle stringhe che non ricordo più come si scrive, quindi potrei catturare la traccia con un particolare programma.
Alcuni codici di debug sono rimasti sul posto, roba particolare intesa a fornire l'annidamento delle chiamate. Tuttavia, anche se la stringa di debug per la maggior parte non sarebbe visibile su un sistema di produzione, era ancora tutto fatto con la 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 molto colpito dal debugger di Borland C ++. Gli strumenti erano presenti, 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 in corso.
L'unica esperienza di debug che ho trovato è peggio di GDB da riga di comando.
Essere un esperto con gli strumenti che usi ogni giorno è, ovviamente, importante - ma il debugging in realtà non dovrebbe essere qualcosa che fai ogni giorno. Se usi spesso il debugger, stai bene imparando dozzine di comandi e / o scorciatoie da tastiera, a me sembra un po 'di bandiera rossa.
Quando lavoravo in Visual Studio 7, tuttavia, era chiaro che il debugging poteva essere molto pratico ed efficace. Se è possibile eseguire il debug in Visual Studio (incluse le versioni Express), il debug è un gioco da ragazzi. Non c'è dubbio che se riesci a trovare il giusto front-end GUI / IDE, GDB è anche facile 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 sarà il tuo debugging, e meno spesso hai bisogno del debugger in primo luogo. E scrivere test di unità è una cosa abbastanza ragionevole che dovresti 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 per VC ++, tra le altre cose. Quindi posso fare il mio test unitario e la copertura basata su gcov usando GCC, ma facilmente passare a VC ++ per usare il debugger.