Che cos'è un file PDB?


252

Che cos'è un file PDB e come posso escluderlo dalla cartella di rilascio quando ricostruisco la mia soluzione?


17
pdb è un file di database del programma che viene creato durante la compilazione. Questo file contiene informazioni sullo stato del progetto e del debug che consentono il collegamento incrementale di una configurazione di debug del programma.
pavanred il

@pavanred sei sicuro che anche il compilatore C # esegua un collegamento incrementale? Ne ho sentito parlare solo nel mondo C ++. In un progetto C ++ si abilita / disabilita il collegamento incrementale dalle proprietà del progetto. C'è un'opzione anche nel progetto C #?
RBT,

Risposte:


236

Un file PDB contiene informazioni per il debugger con cui lavorare. Ci sono comunque meno informazioni in una build di Release che in una build di Debug. Ma se non vuoi che venga generato, vai alle proprietà Build del tuo progetto, seleziona la configurazione di rilascio, fai clic su "Avanzate ..." e sotto "Informazioni di debug" seleziona "Nessuno".


2
@Jon Aiuta a fornire ulteriori informazioni all'utente in caso di crash dell'applicazione in uso? (vale a dire, aiuta con la finestra JIT, piuttosto che "Questo programma deve terminare, invia un rapporto errori di Windows")
Jared Harley

19
Tieni presente che probabilmente dovresti tenerli inclusi nelle tue versioni di debug, poiché consente di tracciare le eccezioni su una riga specifica nel tuo codice. Senza i simboli nel file pdb, sarà difficile individuare problemi specifici per risolverli. Non è nemmeno necessario escluderli dalle build di rilascio, poiché a volte le informazioni extra in un report di grandi dimensioni possono essere molto utili.
Darbio,

4
@Jared: Sì, include una traccia dello stack dell'eccezione, che individuerà una funzione e una riga di codice specifiche.
Darbio,

1
@Jared: Cosa intendi con "la finestra JIT"? È improbabile che fornisca molte più informazioni all'utente, ma potrebbe essere necessario collegare un debugger a una build di rilascio, se necessario. In genere, tuttavia, non lo includeresti per le applicazioni degli utenti finali. Certo, solo perché è copiato nella cartella Release non significa che devi spedirlo nell'installer ...
Jon Skeet,

3
@Ata: PDB, non PDF. Si prega di separare i due nella tua mente - sono formati di file completamente diversi, per scopi diversi. Includere un PPB non introdurrebbe un problema in particolare; si può fare il lavoro di un hacker un po ' più facile, ma è che una particolare preoccupazione per voi? In generale, .NET può essere decompilato in modo relativamente semplice nella maggior parte dei casi - se sei preoccupato, semplicemente non spedire il PDB non è una buona soluzione.
Jon Skeet,

130

Inizialmente mi ero posto la domanda " Ho bisogno di un file PDB distribuito sulla macchina del mio cliente? ", E dopo aver letto questo post, ho deciso di escludere il file.

Tutto ha funzionato bene, fino ad oggi, quando stavo cercando di capire perché una finestra di messaggio contenente un Exception.StackTracemancava il file e le informazioni sul numero di riga, necessarie per risolvere l'eccezione. Ho riletto questo post e ho trovato il nugget chiave delle informazioni: che sebbene il PDB non sia necessario per l'esecuzione dell'app, è necessario che i numeri di file e di riga siano presenti nella StackTracestringa. Ho incluso il file PDB nella cartella eseguibile e ora va tutto bene.


2
Questa è una parte molto importante da tenere a mente che accepted answerqui non menziona.
Monku,

85

PDB è un'abbreviazione per P rogram D ata B ase. Come suggerisce il nome, è un repository (archiviazione persistente come i database) per conservare le informazioni necessarie per eseguire il programma in modalità debug. Contiene molte importanti informazioni importanti richieste durante il debug del codice (in Visual Studio), ad esempio in quali punti sono stati inseriti i punti di interruzione in cui si prevede che il debugger si interrompa in Visual Studio.

Questo è il motivo per cui molte volte Visual Studio non riesce a raggiungere i punti di interruzione se si rimuovono i *.pdbfile dalle cartelle di debug. Il debugger di Visual Studio è anche in grado di dirti il ​​numero di riga preciso del file di codice in cui si è verificata un'eccezione in una traccia dello stack con l'aiuto dei *.pdbfile. Quindi i file pdb in modo efficace sono davvero un vantaggio per gli sviluppatori durante il debug di un programma.

Generalmente non è consigliabile escludere la generazione di *.pdbfile. Dal punto di vista della versione di produzione, ciò che dovresti fare è creare i file pdb ma non spedirli al sito del cliente nel programma di installazione del prodotto. Conservare tutti i file PDB generati su un server di simboli da dove può essere utilizzato / referenziato in futuro, se necessario. Soprattutto per i casi in cui si esegue il debug di problemi come l'arresto anomalo del processo. Quando si avvia l'analisi dei file di dump di arresto anomalo e se i *.pdbfile originali creati durante il processo di compilazione non vengono conservati, Visual Studio non sarà in grado di individuare la riga esatta di codice che causa l'arresto anomalo .

Se desideri comunque disabilitare del *.pdbtutto la generazione di file per qualsiasi versione, vai alle proprietà del progetto -> Scheda Crea -> Fai clic sul Advancedpulsante -> Scegli nonedalla casella a discesa "Informazioni debug" -> premi OKcome mostrato nell'istantanea di seguito .

Nessuno Impostazione delle informazioni di debug per un progetto C #

Nota : questa impostazione dovrà essere eseguita separatamente per le configurazioni di build "Debug" e "Release".


13

Un file PDB contiene informazioni utilizzate dal debugger. Non è necessario per eseguire l'applicazione e non deve essere incluso nella versione rilasciata.

È possibile disabilitare la creazione di file pdb in Visual Studio. Se stai compilando dalla riga di comando o da uno script, ometti l' /Debugopzione.


2
La modalità di rilascio crea ancora PDB per impostazione predefinita, credo. Tuttavia, è possibile modificare le proprietà del progetto per disabilitarlo.
Jon Skeet,

Sì; viene ancora fornito con rilascio con un progetto predefinito.
Andrew Barber,

Ho appena controllato e ottengo anche uno per impostazione predefinita se utilizzo Visual Studio.
Mark Byers,

4

Il file di database di debug del programma (pdb) è un formato di file di Microsoft per l'archiviazione delle informazioni di debug.

Quando si crea un progetto utilizzando Visual Studio o il prompt dei comandi, il compilatore crea questi file di simboli.

Controlla Microsoft Docs

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.