Compartilhar via


Símbolos

Símbolos são úteis para depuração e outras ferramentas de diagnóstico. O conteúdo dos arquivos de símbolo varia entre idiomas, compiladores e plataformas. Em um nível mais alto, os símbolos são um mapeamento entre o código-fonte e o binário produzido pelo compilador. Esses mapeamentos são usados por ferramentas como o Visual Studio e o Visual Studio Code para resolver informações de número de linha de origem ou nomes de variáveis locais.

A documentação do Windows sobre símbolos contém informações mais detalhadas sobre símbolos para Windows, embora muitos dos conceitos também se apliquem a outras plataformas.

Saiba mais sobre o formato PDB portátil do .NET

O .NET Core introduziu um novo formato de arquivo de símbolo (PDB): o PDB portátil. Diferentemente dos PDBs tradicionais, que são exclusivos do Windows, os PDBs portáteis podem ser criados e lidos em todas as plataformas.

O que é um PDB?

Um arquivo PDB é um arquivo auxiliar produzido por um compilador para fornecer outras ferramentas, especialmente depuradores, informações sobre o que está no arquivo executável principal e como ele foi produzido. Por exemplo, um depurador lê um PDB para mapear a linha 12 do foo.cs para o local executável correto para que ele possa definir um ponto de interrupção. O formato PDB do Windows existe há muito tempo e evoluiu de outros formatos de símbolo de depuração nativa que eram ainda mais antigos. Ele iniciou sua vida como um formato para programas nativos (C/C++). Para a primeira versão do .NET Framework, o formato PDB do Windows foi estendido para dar suporte ao .NET.

O formato Portable PDB foi introduzido no .NET Core e é usado por padrão ao direcionar o .NET. Ao usar o .NET Framework, você pode habilitar símbolos de PDB portáteis especificando <DebugType>portable</DebugType> em seu arquivo de projeto. O formato PDB portátil é baseado no formato de metadados ECMA-335. Para obter mais informações, confira PDB portátil v1.0: especificação de formato. As ferramentas de diagnóstico podem usar a biblioteca System.Reflection.Metadata para fazer a leitura de arquivos PDB portáteis (para obter um exemplo, consulte System.Reflection.Metadata.Document).

Usar o formato PDB correto para seu cenário

Não há suporte para PDBs portáteis nem para PDBs do Windows em todos os lugares. Para decidir qual formato usar, considere o local em que seu projeto será usado e depurado. Se você tiver um projeto que deseja poder usar e depurar em ambos os formatos, poderá usar diferentes configurações de build e criar o projeto duas vezes para dar suporte a ambos os tipos de consumidor.

Suporte para PDBs portátil

Um PDB portátil pode ser lido em qualquer SO e é o formato de símbolo recomendado para o código gerenciado. No entanto, há várias ferramentas e aplicativos herdados para os quais não há suporte:

  • Aplicativos direcionados do NET Framework 4.7.1 ou anterior: imprimir rastreamentos de pilha com mapeamentos de volta para números de linha (como em uma página de erro ASP.NET). O nome dos métodos não é afetado, apenas os nomes de arquivo de origem e os números de linha não têm suporte.

  • Ao usar descompiladores .NET, como o ildasm ou o .NET reflector, você não verá mapeamentos de linha de origem ou nomes de parâmetros locais.

  • As versões mais recentes do DIA e as ferramentas que usam o DIA para fazer a leitura de símbolos, como o WinDBG, dão suporte a PDBs portáteis, mas as versões mais antigas não.

  • Pode haver versões mais antigas de criadores de perfil que não dão suporte a PDBs portáteis.

Para usar PDBs portáteis em ferramentas sem suporte, você pode usar Pdb2Pdb, que converte entre PDBs portáteis e PDBs do Windows.

Suporte para PDBs do Windows

Os PDBs do Windows só podem ser gravados ou lidos no Windows. O uso dos PDBs do Windows para código gerenciado é obsoleto e só é necessário para ferramentas herdadas. Recomenda-se que você use PDBs portáteis em vez de PDBs do Windows, pois alguns recursos mais recentes do compilador são implementados somente para PDBs portáteis.

Confira também