Domanda

A volte mi accumulare una grande massa di punti di rottura da diverse sessioni di debug in luoghi diversi nel mio codice. Come fa il debugger sa efficiente quando a fermarsi per un punto di interruzione? Esso non può assolutamente essere fermandosi a ogni singola riga per controllare il nome numero di riga e origine del file contro una potenzialmente lunga lista di punti di interruzione, può?

Questo è il debugger Java in Eclipse, ma presumo la questione si applica a qualsiasi debugger.

È stato utile?

Soluzione

La strategia utilizzata in molti debugger (non so su Eclipse) è quello di mettere una toppa nel codice in corrispondenza del punto del punto di rottura che è essenzialmente una chiamata di subroutine o chiamata di sistema. Il codice saltato ha le informazioni punto di interruzione, e fa tutto ciò che la stampa o l'accettazione di comandi dell'utente, e ha anche il codice che è stato sovrascritto con la patch, in modo che il codice può essere eseguito per rendere l'esecuzione corrisponde al codice originale, senza il punto di interruzione

Altri suggerimenti

Per aggiungere alla buona risposta del Nadreck:

C'è un articolo qui con maggiori dettagli, compresi alcune delle cose più esotico (specifica codici operativi su x86;. breakpoints hardware)

I debugger implementano punti di interruzione di hardware o software. Quest'ultimo richiede il salvataggio del istruzioni originali, inserendo speciale codice che genera un'eccezione e quando l'eccezione è sollevata, reinserire le istruzioni originali e lasciando all'utente di sapere che il punto di interruzione è stata colpita. Leggi il mio articolo per i dettagli scabrosi sul breakpoint software.

È possibile ottenere i dettagli completi la struttura interna di Eclipse Debugger e come scrivere uno al link qui sotto Come scrivere un Eclipse Debugger

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top