2009-04-20 17 views
21

Se si dispone di una DLL (che è stata creata in modalità di rilascio) e del file PDB corrispondente, è possibile eseguire il debug (step-in) delle classi/metodi contenuti in quella DLL?Debug di una versione di rilascio di una DLL (con file PDB)

In tal caso, quali sono i passaggi/la configurazione richiesti (ad esempio, dove inserire il file PDB)?

Edit:

Se avere il file PDB nello stesso luogo come il DLL (nella directory bin/debug di una semplice applicazione di test di console). Posso vedere che i simboli per la DLL sono caricati (nella finestra Output e anche nella finestra Modules), ma non riesco ancora ad entrare nei metodi di quella DLL.

Potrebbe essere il risultato di ottimizzazioni del compilatore (come descritto da Michael nella sua risposta)?

risposta

5

ho finalmente trovato ciò che causa i problemi di debug di una DLL che è stato costruito in configurazione di rilascio:

Prima di tutto, funziona praticamente come previsto. Il che significa che se ho una DLL incorporata nella configurazione di rilascio più il file PDB corrispondente, posso eseguire il debug delle classi/metodi contenuti in quella DLL.

Quando ho provato per la prima volta, ho sfortunatamente cercato di entrare nei metodi di una classe che ha il DebuggerStepThroughAttribute, e.g:

[System.Diagnostics.DebuggerStepThrough] 
public class MyClass { 
    public void Test() { ... } 
} 

In tal caso, non è ovviamente possibile entrare nel metodo dal debugger (come previsto/previsto).

Quindi tutto funziona come previsto. Grazie mille per le tue risposte.

14

Il pdb è in genere (almeno per me) rilevato se si trova accanto alla DLL (come nei file xml intellisense).

In alternativa; hai bisogno di un punto di interruzione dopo che il modulo è stato caricato ...

Al punto di interruzione, fai apparire la finestra "Moduli" (Ctrl + D, M - o Debug-> Windows-> Moduli). Fare clic con il tasto destro del mouse sulla DLL "Carica simboli da", "Percorso simboli", ecc.

+2

Il PDB si trova accanto alla DLL, i simboli sono caricati, ma non riesco ancora ad accedere ai metodi. Qualche idea? – M4N

5

Sì, è possibile eseguire il debug del codice di rilascio con un PDB. Ci sono tuttavia alcuni problemi con il debug del codice ottimizzato, maggiori informazioni here e here.

Il PDB deve solo trovarsi in una posizione che il debugger può trovarlo, per eseguire il debugging locale della stessa directory di solito la DLL è più semplice. Altrimenti, mettilo in un posto che il debugger può trovarlo e punta il debugger in quel punto con il percorso del simbolo.

2

Il debug di una versione di rilascio è in genere molto più difficile del debug di una versione di debug. In generale, avrai bisogno di capire l'assemblatore x86 e probabilmente passerai un po 'di tempo a guardare la finestra del disassemblaggio. Questo tende ad essere l'unico modo per capire quale linea di codice si sta realmente facendo da quando in una build di release con ottimizzazioni sul compilatore si possono fare significativi allineamenti e riordino delle istruzioni. Inoltre trovo che il debugger non riesca spesso a riportare correttamente i valori delle variabili. Se è necessario conoscere il valore di una variabile e non si è sicuri che il debugger sia corretto, andare nella finestra di disassemblaggio e trovare la posizione di memoria o registrarlo.

I file pdb possono essere memorizzati in un Symbol Server. Dai un'occhiata a Setting up a Symbol Server per un buon tutorial. Ogni prodotto che costruiamo su una macchina di costruzione pubblica i simboli sul nostro server dei simboli, quindi possiamo sempre eseguire il debug di tutti i crash dump che riceviamo da WinQual.

Problemi correlati