Il debug è uno strumento molto utile per ispezionare lo stato degli oggetti e delle variabili nel codice in fase di esecuzione.
Come precedentemente menzionato nelle risposte sopra, il debug è estremamente utile, ma ci sono alcuni casi in cui è limitato.
Nella mia esperienza, trovo che usare il debugger sia molto utile perché aiuta a rivelare 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 debug può aiutare a rivelare false ipotesi fatte da te o da un altro sviluppatore sullo stato del codice.
Forse ti aspetti che un parametro non sarà mai nullo quando passato a un metodo, quindi non controlli mai quel caso e prosegui nel metodo come se quel parametro non fosse mai nullo. La realtà è che il parametro finirà per essere nullo ad un certo punto anche se si imposta come pre-condizione il metodo che il parametro non dovrebbe mai essere nullo. Accadrà sempre.
Contrariamente all'utilità dei debugger negli esempi sopra citati, trovo difficile e in qualche modo non utile usare quando è coinvolto il multi-threading (ovvero concorrenza, elaborazione asincrona). Può essere d'aiuto, ma è facile perdere l'orientamento nella nebbia multi-thread quando i breakpoint del debugger vengono colpiti in un thread nel punto A e in un thread completamente separato nel punto B. Lo sviluppatore è costretto a spingere il nuovo breakpoint " processo di pensiero "in cima alla" pila "del suo cervello e orientarsi verso il codice nel punto del nuovo punto di interruzione. Dopo che la rilevanza del punto di interruzione B diminuisce, lo sviluppatore ritorna al primo punto di interruzione e deve ricordare ciò che stava cercando prima del trigger del punto di interruzione B. So che questa potrebbe essere una spiegazione confusa,
Anche l'imprevedibilità del codice concorrente può distrarre ulteriormente lo sviluppatore nel debug del codice concorrente.
In conclusione, a mio onesto parere:
- Debug quando viene utilizzata la concorrenza = maggiore tendenza a perdere la concentrazione del "modello di pensiero di debug"
e
- in qualsiasi altro momento = aumento della produttività del debug b / c la tua attenzione non viene interrotta da punti di interruzione imprevisti (imprevisti a causa delle condizioni di gara).