2010-11-05 17 views
6

A volte, mentre eseguo il debug passo dopo passo, appena prima di un evento FormCreate o appena dopo il FromDestroy il debugger inizia ad aprire le unità DevExpress (cxContainer.pas, ...) e così prima che FormCreate il mio "F8" mi porta a cxContainer invece di andare nella riga successiva del mio codice.Delphi: come escludere le unità dal debugger?

(questo è solo un esempio, può accadere, naturalmente, con qualsiasi libreria 3rd party)

Come faccio a dire il debugger "debug solo le mie unità" (solo i file pas elencati nel file di dpr?)

Ovviamente a volte è utile eseguire il debug delle librerie, ma nella maggior parte dei casi non lo è.

+1

Vedere anche [Come saltare sezioni di codice durante il debug?] (Http://stackoverflow.com/questions/449159/in-delphi-how-to-skip-sections-of-code-while-debugging) –

risposta

25

Faresti meglio a seguire VCL convenzione per i componenti di terze parti:

  • Change DCU percorso di uscita in tutti i pacchetti di terze parti in una cartella diversa dalla cartella di memorizzare i file PAS.
  • Compilare ciascun pacchetto una volta in modalità Debug e salvare i file DCU generati in una cartella (ad esempio Debug DCU).
  • Compilare nuovamente ogni pacchetto, ma questa volta in modalità di rilascio e salvare i file DCU generati in una cartella (ad esempio, rilasciare DCU).
  • Passare alle opzioni Delphi e aggiungere il percorso delle DCU di rilascio a "Percorso libreria".
  • Nelle opzioni di Delphi, aggiungere il percorso dei file di origine a "Percorso di navigazione".
  • Nelle opzioni di Delphi, aggiungere il percorso delle DCU di debug a "Percorso di debug DCU".

In questo modo, Delphi vedrà solo le DCU di rilascio di quel componente di terze parti durante la compilazione del progetto, quindi il debugger non può accedere al codice sorgente. D'altra parte, poiché il percorso di origine è incluso in "Percorso di navigazione", è comunque possibile navigare al codice sorgente all'interno di IDE premendo Ctrl + Fare clic sul nome dell'unità o su qualsiasi cosa definita in tali unità.

Se si desidera eseguire il debug del componente, è possibile andare a "Progetto | Opzioni | Compilatore Delphi | Compilazione" e abilitare "Usa debug .dcus". Questo costringerà il compilatore a usare "Debug DCU path" invece di "Library path".

VCL funziona allo stesso modo, generalmente non si entra nel codice sorgente VCL quando si esegue il debug del progetto, ma se si abilita "Usa debug .dcus" è possibile eseguire il debug del codice sorgente VCL.

JVCL organizza anche i pacchetti e il codice sorgente allo stesso modo.

EDIT: Se si prende questo approccio, e vogliono avere la navigazione codice (Ctrl + click) di lavoro; si prega di notare che quando si compila la versione di rilascio dei pacchetti, è necessario impostare le Informazioni di riferimento dei simboli in "Progetto | Opzioni | Compilatore Delphi | Compilare" su "Informazioni di riferimento"; altrimenti, Ctrl + clic non funzionerà per quelle unità. Per impostazione predefinita, la configurazione della build di rilascio imposta le informazioni di riferimento sui simboli su Nessuna.

+0

+1 Risposta molto completa. E ho imparato un trucco noto. Aveva visto il percorso di debug in dcu, ma non aveva "cliccato" su come metterlo a frutto. Grazie per quello. Unico inconveniente che vedo: "usa debug dcu's" significa che ora utilizzerai debug dcu per tutte le tue librerie quando ne hai solo uno che vuoi eseguire il debug. In questo caso è spesso più semplice cambiare semplicemente il percorso della libreria in modo che punti alla cartella debug dcu solo per quella libreria ... –

+0

Ci si potrebbe aspettare che uno sviluppatore utilizzi Delphi per gli ultimi 10 anni per sapere questo, ma io perché uno no.

1

Disattiva le informazioni di debug nelle unità in cui non vuoi che entri il debugger.

+0

Aggiunto per salvare altri utenti dal cercare ciò che ho appena fatto: questo può essere fatto con la direttiva del compilatore {$ D-} nelle unità che non si desidera eseguire il debug. – RobertFrank

2

C'è solo un modo per dire al compilatore di non eseguire il debug di una unità: compila senza informazioni di debug.

Se si dispone dell'origine delle librerie, è possibile ricostruire il pacchetto dopo aver disattivato l'opzione di compilazione "include informazioni di debug" per ogni pacchetto nella libreria. Se sei fortunato, le tue librerie includeranno un file .inc che specifica le opzioni del compilatore di cui hanno bisogno e che includono in ciascuna unità. In tal caso, tutto ciò che devi fare è modificare questo file inc e ricostruire tutti i pacchetti.

Se non si dispone della sorgente delle librerie, i produttori di librerie potrebbero aver fornito due set di dcu: uno compilato con, l'altro senza informazioni di debug. In tal caso, punta semplicemente il percorso della tua libreria a quello che ti serve.

2

Una soluzione rapida e semplice sta disabilitando l'interruttore DEBUG ({$ D-}) per tutte le librerie che si stanno utilizzando. Molte librerie (incluso DevExpress) usano un file di inclusione globale, di solito nella parte superiore di ogni file sorgente, o proprio sopra o sotto l'istruzione "unità" (ad esempio unità cxContainer; {$ I cxVer.inc} interfaccia). Apri quel file include (fai clic su di esso e premi CTRL-Invio) e aggiungi {$ D-} in alto e commenta qualsiasi {$ D +} esistente.

Problemi correlati