Share via


Symbolen

Symbolen zijn handig voor foutopsporing en andere diagnostische hulpprogramma's. De inhoud van symboolbestanden verschilt per taal, compilers en platformen. Op hoog niveau zijn symbolen een toewijzing tussen de broncode en het binaire bestand dat door de compiler wordt geproduceerd. Deze toewijzingen worden gebruikt door hulpprogramma's zoals Visual Studio en Visual Studio Code om bronnummergegevens of namen van lokale variabelen op te lossen.

De Windows-documentatie over symbolen bevat gedetailleerdere informatie over symbolen voor Windows, hoewel veel van de concepten ook van toepassing zijn op andere platforms.

Meer informatie over . De draagbare PDB-indeling van NET

.NET Core heeft een nieuwe PDB-indeling (symbol file) geïntroduceerd: de draagbare PDB. In tegenstelling tot traditionele PDBs, die alleen windows zijn, kunnen draagbare PDBs worden gemaakt en gelezen op alle platforms.

Wat is een PDB?

Een PDB-bestand is een hulpbestand dat door een compiler wordt geproduceerd om andere hulpprogramma's te bieden, met name foutopsporingsprogramma's, informatie over wat zich in het belangrijkste uitvoerbare bestand bevindt en hoe het is geproduceerd. Een foutopsporingsprogramma leest bijvoorbeeld een PDB om foo.cs regel 12 toe te wijzen aan de juiste uitvoerbare locatie, zodat het een onderbrekingspunt kan instellen. De Windows PDB-indeling is al een lange tijd en is ontwikkeld van andere systeemeigen indelingen voor foutopsporingssymbolen die nog ouder waren. Het begon zijn leven als een indeling voor systeemeigen programma's (C/C++). Voor de eerste release van .NET Framework is de Windows PDB-indeling uitgebreid ter ondersteuning van .NET.

De Portable PDB-indeling is geïntroduceerd in .NET Core en wordt standaard gebruikt bij het instellen van .NET. Wanneer u zich richt op .NET Framework, kunt u draagbare PDB-symbolen inschakelen door in uw projectbestand op te <DebugType>portable</DebugType> geven. De draagbare PDB-indeling is gebaseerd op ecma-335-metagegevensindeling. Zie Portable PDB v1.0: Format Specification voor meer informatie. Diagnostische hulpprogramma's kunnen de System.Reflection.Metadata bibliotheek gebruiken om draagbare PDB-bestanden te lezen (zie bijvoorbeeld System.Reflection.Metadata.Document).

De juiste PDB-indeling gebruiken voor uw scenario

Draagbare PDBs of Windows-PDBs worden overal ondersteund. Als u wilt bepalen welke indeling u wilt gebruiken, moet u overwegen waar uw project wordt gebruikt en fouten wordt opgespoord. Als u een project hebt dat u in beide indelingen wilt kunnen gebruiken en fouten wilt opsporen, kunt u verschillende buildconfiguraties gebruiken en het project twee keer bouwen om beide soorten consumenten te ondersteunen.

Ondersteuning voor draagbare PDBs

Een draagbare PDB kan worden gelezen op elk besturingssysteem en is de aanbevolen symboolindeling voor beheerde code. Er zijn echter een aantal verouderde hulpprogramma's en toepassingen waar ze niet worden ondersteund:

  • Toepassingen die gericht zijn op .NET Framework 4.7.1 of eerder: stacktraceringen afdrukken met toewijzingen terug naar regelnummers (zoals op een ASP.NET foutpagina). De naam van methoden wordt niet beïnvloed, alleen de bronbestandsnamen en regelnummers worden niet ondersteund.

  • Wanneer u .NET-decompilers zoals ildasm of .NET reflector gebruikt, ziet u geen bronlijntoewijzingen of lokale parameternamen.

  • De nieuwste versies van DIA en hulpprogramma's die DIA gebruiken voor het lezen van symbolen, zoals WinDBG, ondersteunen draagbare PDBs, maar oudere versies niet.

  • Er zijn mogelijk oudere versies van profilers die geen ondersteuning bieden voor draagbare PDBs.

Als u draagbare PDBs wilt gebruiken voor hulpprogramma's die deze niet ondersteunen, kunt u Pdb2Pdb gebruiken, die wordt geconverteerd tussen draagbare PDBs en Windows-PDBs.

Ondersteuning voor Windows-PDBs

Windows-PDF's kunnen alleen worden geschreven of gelezen in Windows. Het gebruik van Windows-PDBs voor beheerde code is verouderd en is alleen nodig voor verouderde hulpprogramma's. Het wordt aanbevolen om draagbare PDBs te gebruiken in plaats van Windows-PDBs, omdat sommige nieuwere compilerfuncties alleen worden geïmplementeerd voor draagbare PDBs.

Zie ook