Traccia indietro
La traccia posteriore sta individuando un punto finale a un evento associato alla funzione (vedi sotto). Una volta lì, viene inserito un punto di interruzione nel debugger. La funzione viene attivata e quando il debugger si interrompe. Lo stack delle chiamate viene riesaminato per risalire al percorso di chiamata. Mentre saliti lo stack delle chiamate puoi prendere appunti sugli stati variabili o posizionare nuovi punti di interruzione per ispezionare di nuovo l'evento.
La funzione è nuovamente attiva e il debugger si arresta nei nuovi punti di interruzione. Puoi quindi ripetere backtracing o eseguire forward traceing fino a quando l'obiettivo viene trovato.
Pro e amp; Contro
- È sempre più facile risalire allo stack delle chiamate e vedere come sei arrivato da qualche parte.
- Potrebbero esserci milioni di condizioni che devono essere vere prima di raggiungere un endpoint. Se conosci già l'endpoint hai risparmiato un sacco di lavoro.
- Se la funzione è interrotta. Potresti non raggiungere mai l'endpoint e il tempo può essere sprecato cercando di capire perché.
Individuazione degli endpoint
Per eseguire il debug di una funzione devi sapere dove si trova l'obiettivo finale nel codice sorgente. Solo da questo punto puoi backtrace per vedere come è arrivato il codice. Un esempio; Per capire come viene eseguito l'annullamento. Sai dove si trovano le cose nel codice, ma non sai come vanno le cose . Questo sarebbe un candidato per backtracing per capire come funziona la funzione.
Traccia in avanti
La traccia in avanti sta localizzando un punto iniziale per un evento associato a una funzione (vedi sotto). Una volta lì, i messaggi di registrazione vengono inseriti nel codice sorgente o vengono impostati i punti di interruzione. Questo processo viene ripetuto mentre ti allontani dal punto iniziale finché non trovi l'obiettivo per la funzione.
Pro e amp; Contro
- È il punto di partenza più semplice per trovare una funzione.
- La complessità del codice riduce l'efficacia della traccia in avanti. Più condizioni ci sono nel codice, maggiori sono le possibilità che tu vada nella direzione sbagliata.
- La traccia continua spesso ha come risultato l'impostazione dei punti di interruzione che verranno attivati da eventi non correlati. Interrompere il processo di debug e interferire con la tua ricerca.
Rilevamento punto iniziale
È possibile utilizzare parole chiave, identificativi dell'interfaccia utente (ID pulsante, nomi finestra) o semplici listener di eventi associati alla funzione. Ad esempio, potresti iniziare con il pulsante utilizzato per attivare una funzione annulla .
Processo di eliminazione
Puoi pensare a questo come punto centrale rispetto alle posizioni punto iniziale e punto finale . Esegui un processo di eliminazione quando sai già che un pezzo di codice è usato in una funzione, ma non è né l'inizio né la fine della funzione.
La direzione che prendi dal punto centrale dipende dal numero di voci e uscite. Se il chunk di codice viene utilizzato in molti posti, allora backtracing da questa posizione potrebbe essere molto dispendioso in termini di tempo in quanto devono essere tutti ispezionati. Quindi impieghi un processo di eliminazione per ridurre questa lista. In alternativa, puoi eseguire una traccia in avanti da questo punto, ma ancora una volta se il blocco del codice si dirama in più punti questo può anche essere un problema.
Devi ridurre le direzioni di posizione non seguendo percorsi che chiaramente non sarebbero stati eseguiti per la funzione. Superare questo codice e posizionare i punti di interruzione solo laddove è probabile che si riferiscano alla funzione.
Il debug
Punto centrale spesso richiede più funzionalità IDE avanzate. La possibilità di vedere la gerarchia del codice e le dipendenze. Senza questi strumenti è difficile da fare.
Pro e amp; Contro
-
I punti centrali sono spesso il primo pezzetto di codice che ti viene in mente quando pensi alla funzione. Dici a te stesso "Ah, questo deve usare XXXX per funzionare."
-
Punti centrali possono rivelare punti iniziali i più facili.
-
Punti centrali può essere un modo semplice per raccogliere la traccia di una funzionalità quando viene persa tramite la sincronizzazione o le modifiche di threading.
-
Punti centrali ti possono portare a codice che non conosci. Ti costa tempo per imparare cosa sta succedendo.