Il debugging è uno strumento molto utile per controllare lo stato degli oggetti e delle variabili nel codice in fase di esecuzione.
Come accennato in precedenza nelle risposte sopra, il debugging è estremamente utile, ma ci sono alcuni casi in cui è limitato.
Secondo la mia esperienza, trovo che usare il debugger sia molto utile perché aiuta a rivelare le false ipotesi che stavo facendo sullo stato del mio codice. Alcune persone non sono così astute nel leggere il codice per trovare un bug, quindi il debugging può aiutare a svelare false ipotesi che tu o un altro sviluppatore avete fatto sullo stato del codice.
Forse ti aspetti che un parametro non sarà mai nullo se passato a un metodo, quindi non controllerai mai quel caso e prosegui nel metodo come se quel parametro non fosse mai nullo. La realtà è che il parametro sarà finito per essere nullo ad un certo punto, anche se si imposta come pre-condizione al metodo che il parametro non dovrebbe mai essere nullo. Accadrà sempre.
A differenza dell'utilità dei debugger negli esempi sopra citati, trovo che sia difficile e in qualche modo non utile da usare quando è coinvolto il multi-threading (cioè, concorrenza, elaborazione asincrona). Può essere d'aiuto, ma è facile perdere l'orientamento nella nebbia multi-thread quando i punti di interruzione del debugger vengono colpiti in un thread nel punto A e in un thread completamente separato nel punto B. Lo sviluppatore è costretto a premere il nuovo punto di interruzione " processo di pensiero "in cima allo" stack "del suo cervello e orientarsi al codice nel punto del nuovo breakpoint. Dopo che la rilevanza del punto di interruzione B diminuisce, lo sviluppatore torna al primo punto di interruzione e deve ricordare a cosa stava guardando prima del trigger del breakpoint B. So che questa potrebbe essere una spiegazione confusa, ma il mio punto in questo paragrafo è che il debugging in cui viene utilizzata la concorrenza può essere molto ADD (Disturbo da deficit di attenzione), quindi potrebbe essere più difficile rimanere produttivi nel tuo schema di pensiero di debug.
Inoltre, l'imprevedibilità del codice concorrente può ulteriormente distrarre lo sviluppatore nel debug del codice concorrente.
In conclusione, secondo la mia onesta opinione:
- Debug quando viene usata la concorrenza = accresciuta la tendenza a perdere il focus del "debugging pattern di pensiero"
e
- in qualsiasi momento = maggiore produttività di debug b / c la tua attenzione non viene interrotta da interruzioni impreviste (impreviste dovute alle condizioni della gara).