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 portatile di .NET

.NET Core ha introdotto un nuovo formato di file di simboli (PDB), ovvero il PDB portatile. A differenza dei PDB tradizionali, che sono solo Windows, i PDF portatili 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 mappare la riga 12 di foo.cs al percorso eseguibile corretto, in modo da poter impostare un punto di interruzione. Il formato PDB di Windows è presente 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 è destinata 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: Format Specification. Gli strumenti di diagnostica possono usare la System.Reflection.Metadata libreria per leggere i file PDB portabili (ad esempio, vedere System.Reflection.Metadata.Document).

Usare il formato PDB corretto per lo scenario

Né i PDB portatili né i PDB windows sono supportati ovunque. Per decidere quale formato usare, prendere in considerazione il contesto in cui il progetto verrà utilizzato e sottoposto a debug. Se si dispone di un progetto che si vuole poter usare ed 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 i PDB portatili

Un PDB portatile può essere letto in qualsiasi sistema operativo ed è il formato di simbolo consigliato per il codice gestito. Esistono tuttavia diversi strumenti e applicazioni legacy in cui non sono supportati:

  • Applicazioni indirizzate a .NET Framework 4.7.1 o versioni precedenti: stampa delle tracce dello stack con mapping ai numeri di riga (come in una pagina di errore ASP.NET, ad esempio). Il nome dei metodi non è interessato; sono solo i nomi dei file di origine e i numeri di riga a non essere 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 e strumenti che usano DIA per la lettura di simboli, ad esempio WinDBG, supportano PDB portatili, ma non le versioni precedenti.

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

Per utilizzare i PDB portatili su strumenti che non li supportano, è possibile usare Pdb2Pdb, che esegue la conversione tra PDB portatili 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 portatili.

Vedere anche