Condividi tramite


Simboli

I simboli sono utili per il debug e altri strumenti di diagnostica. Il contenuto dei file di simboli varia tra linguaggi, compilatori e piattaforme. A livello generale, i simboli sono un mapping tra il codice sorgente e il file binario prodotto dal compilatore. Questi mapping vengono usati da strumenti come Visual Studio e Visual Studio Code per risolvere le informazioni sul numero di riga di origine o i nomi delle variabili locali.

La documentazione di Windows sui simboli contiene informazioni più dettagliate sui simboli per Windows, anche se molti dei concetti si applicano anche ad altre piattaforme.

Informazioni sul formato PDB (Program Database) portabile di .NET

.NET Core ha introdotto un nuovo formato di file di simboli (PDB), ovvero il PDB portabile. A differenza dei PDB tradizionali, che sono solo Windows, i PDB portabili possono essere creati e letti su tutte le piattaforme.

Che cos'è un PDB?

Un file PDB è un file ausiliario prodotto da un compilatore per fornire altri strumenti, in particolare i debugger, informazioni su ciò che si trova nel file eseguibile principale e su come è stato prodotto. Ad esempio, un debugger legge un PDB per eseguire il mapping foo.cs riga 12 al percorso eseguibile corretto in modo che possa impostare un punto di interruzione. Il formato PDB di Windows esiste da molto tempo e si è evoluto da altri formati di simboli di debug nativi che erano ancora più vecchi. Ha iniziato la sua vita come formato per i programmi nativi (C/C++). Per la prima versione di .NET Framework, il formato PDB di Windows è stato esteso per supportare .NET.

Il formato PDB portabile è stato introdotto in .NET Core ed è usato per impostazione predefinita quando è destinato a .NET. Quando la destinazione è .NET Framework, è possibile abilitare i simboli PDB portabili specificando <DebugType>portable</DebugType> nel file di progetto. Il formato PDB portabile è basato sul formato di metadati ECMA-335. Per altre informazioni, vedere Portable PDB v1.0: Specifiche di formato. Gli strumenti di diagnostica possono usare la libreria System.Reflection.Metadata per leggere i file PDB portabili( ad esempio, vedere System.Reflection.Metadata.Document).

Usare il formato PDB corretto per lo scenario

Né i PDB portabili né i PDB Windows sono supportati ovunque. Per decidere quale formato usare, prendere in considerazione la posizione in cui verrà usato ed eseguito il debug del progetto. Se si dispone di un progetto che si vuole poter usare e di cui si vuole eseguire il debug in entrambi i formati, è possibile usare configurazioni di compilazione diverse e compilare il progetto due volte per supportare entrambi i tipi di consumer.

Supporto per file PDB portatili

Un PDB portabile può essere letto in qualsiasi sistema operativo ed è il formato di simboli consigliato per il codice gestito. Tuttavia, esistono diversi strumenti e applicazioni legacy in cui non sono supportati:

  • Applicazioni destinate a .NET Framework 4.7.1 o versioni precedenti: stampa di tracce dello stack con mapping ai numeri di riga (ad esempio in una pagina di errore ASP.NET). Il nome dei metodi non è influenzato, solo i nomi dei file di origine e i numeri di riga non sono supportati.

  • Quando si usano decompilatori .NET, ad esempio ildasm o reflector .NET, non verranno visualizzati mapping di righe di origine o nomi di parametri locali.

  • Le versioni più recenti di DIA (Debug Interface Access) e gli strumenti che usano DIA per la lettura dei simboli, ad esempio WinDBG, supportano i PDB portabili ma non le versioni precedenti.

  • Potrebbero essere presenti versioni precedenti dei profiler che non supportano PDB portabili.

Per usare i PDB portabili in strumenti che non li supportano, è possibile usare Pdb2Pdb, che esegue la conversione tra PDB portabili e PDB di Windows.

Supporto per i PDB di Windows

I PDB di Windows possono essere scritti o letti solo in Windows. L'uso di PDB di Windows per il codice gestito è obsoleto ed è necessario solo per gli strumenti legacy. È consigliabile usare PDB portabili invece dei PDB di Windows, perché alcune funzionalità del compilatore più recenti vengono implementate solo per i PDB portabili.

Vedi anche