Che cosa fa il PDB ottenere me durante il debug e come faccio a sapere se funziona?

StackOverflow https://stackoverflow.com/questions/52600

  •  09-06-2019
  •  | 
  •  

Domanda

Devo utilizzare un componente di terze parti senza il codice sorgente.Ho la versione DLL e rilasciare il file PDB.Chiamiamolo 'CorporateComponent.dll'.Il mio codice crea oggetti da questa DLL e chiama i metodi di tali oggetti.

CorpObject o = new CorpObject();
Int32 result = o.DoSomethingLousy();

Durante il debug, il metodo 'DoSomethingLousy' genera un'eccezione.Che cosa fa il file PDB fare per me?Se si fa qualcosa di bello, come posso essere sicuro che sto facendo uso di esso?

È stato utile?

Soluzione

Per confermare se stai usando il PDB, CorporateComponent.pdb, durante il debug di Visual Studio IDE esaminare la finestra di output e individuare la riga che indica che il CorporateComponent.dll viene caricato e seguita dalla stringa Symbols loaded.

Per illustrare da un mio progetto:

The thread 0x6a0 has exited with code 0 (0x0).
The thread 0x1f78 has exited with code 0 (0x0).
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug  \AvayaConfigurationService.exe', Symbols loaded.
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded.

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

Questo indica che il PDB è stato trovato e caricato dal debugger IDE.

Come indicato da altri, Quando l'esame di stack frame all'interno della vostra applicazione, si dovrebbe essere in grado di vedere i simboli dall'CorporateComponent.pdb.Se non allora, forse, le terze parti non includono informazioni di simbolo nel rilascio PPB costruire.

Altri suggerimenti

Il progetto preliminare di bilancio contiene informazioni il debugger deve per leggere correttamente la pila.Il tuo stack tracce conterrà i numeri di riga e i nomi dei simboli dello stack frame all'interno dei moduli per i quali si dispone il ppb.

Ti do due usi esempi.Il primo è la risposta ovvia.La seconda spiega la fonte-indicizzato pdb.

1 ° esempio di utilizzo...

A seconda convenzione di chiamata e che le ottimizzazioni del compilatore utilizzato, potrebbe non essere possibile per il debugger manualmente svolgere la pila, attraverso un modulo per i quali non si dispone di un progetto preliminare di bilancio.Questo può accadere con alcune librerie di terze parti e anche per alcune parti del sistema operativo.

Si consideri uno scenario in cui si verifica una violazione di accesso all'interno del sistema operativo windows.L'analisi dello stack non rilassatevi nella vostra applicazione, perché componente del sistema operativo che si avvale di una speciale convenzione di chiamata che confonde il debugger.Se si configura il simbolo percorso per il download pubblico OS pdb, quindi c'è una buona probabilità che la traccia dello stack potranno rilassarsi nella vostra applicazione.Che consente di vedere esattamente quali sono gli argomenti che il proprio codice passata in OS chiamata di sistema.(e di esempi simili AV all'interno di un 3rd party libreria o anche all'interno del proprio codice)

2 ° esempio di utilizzo...

Pdb altro molto utile proprietà - sono in grado di integrare con alcuni sistemi di controllo di origine utilizzando una funzionalità che microsoft chiama "fonte di indicizzazione".Una fonte indicizzati ppb contiene la sorgente dei comandi di controllo che specifica come recuperare dal controllo del codice sorgente, l'esatta versioni dei file che sono stati utilizzati per creare il componente.Microsoft debugger capire come eseguire i comandi per recuperare automaticamente i file durante una sessione di debug.Questa è una potente funzione che salva il debug egineer da dover sincronizzare manualmente un albero sorgente per l'etichetta giusta per una determinata build.E ' particolarmente utile per il debug remoto delle sessioni e per l'analisi di crash dump post-mortem.

Il "debugging tools for windows" installazione (windbg) contiene un documento denominato srcsrv.doc che fornisce un esempio che illustra come utilizzare srctool.exe per determinare quali file di origine sono di origine indicizzati in un dato ppb.

Per rispondere alla tua domanda "come faccio a sapere", "moduli" in il debugger può dire che i moduli hanno un corrispondente ppb.In windbg utilizzare il "lml" di comando.In visual studio selezionare i moduli da qualche parte nella finestra di debug menu.(spiacenti, non ho una versione corrente di visual studio a portata di mano)

Il PPB è un file di database che associa le istruzioni per i loro numeri di riga nel codice originale così, quando si ha una traccia dello stack si otterrà il numero di riga per il codice.Se è una DLL non gestita quindi il file PDB vi darà anche i nomi delle funzioni, nella traccia dello stack, considerando che l'informazione è di solito disponibile solo per le Dll gestite senza Pdb.

Il principale mi da il pdb è i numeri di riga e veri nomi di metodo per l'analisi dello stack.

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