O que é um arquivo PDB?

252

O que é um arquivo PDB e como posso excluí-lo da pasta de liberação quando reconstruo minha solução?

Ata
fonte
17
O pdb é um arquivo de banco de dados do programa e é criado na compilação. Esse arquivo contém informações de depuração e estado do projeto que permitem a vinculação incremental de uma configuração de depuração do seu programa.
Pavanred 10/10/10
@pavanred você tem certeza que o compilador C # também faz links incrementais? Eu só ouvi falar disso no mundo C ++. Em um projeto C ++, você ativa / desativa a vinculação incremental das propriedades do projeto. Existe uma opção no projeto C # também?
RBT

Respostas:

236

Um arquivo PDB contém informações para o depurador trabalhar. Há menos informações em uma versão do que em uma versão de depuração. Mas se você não deseja que ele seja gerado, acesse as propriedades de compilação do seu projeto, selecione a configuração Release, clique em "Advanced ..." e, em "Debug Info", escolha "None".

Jon Skeet
fonte
2
@Jon Ajuda a fornecer informações extras ao usuário se o aplicativo falhar em uso? (ou seja, ele ajuda com a janela do JIT, em vez de "Este programa precisa acabar, envie um erro do Windows Report")
Jared Harley
19
Lembre-se de que você provavelmente deve mantê-los incluídos em suas versões de depuração, pois permite que as exceções sejam rastreadas para uma linha específica no seu código. Sem os símbolos no arquivo pdb, será difícil identificar problemas específicos para resolvê-los. Você também não precisa necessariamente excluí-los das compilações de versão, pois às vezes as informações extras em um grande relatório podem ser muito úteis.
Darbio 10/10
4
@ Jared: Sim, inclui um rastreamento de pilha da exceção, que apontará para uma função e linha de código específicas.
Darbio 10/10/10
1
@ Jared: O que você quer dizer com "janela JIT"? É improvável que você forneça muito mais informações ao usuário, mas pode permitir que você anexe um depurador a uma versão, se necessário. Normalmente, você não o incluiria para aplicativos do usuário final. Claro, só porque ele é copiado para a pasta de lançamento não significa que você tem que enviá-lo no instalador ...
Jon Skeet
3
@ Ata: PDB, não PDF. Separe os dois em sua mente - eles são formatos de arquivo completamente diferentes, para diferentes propósitos. Incluir um APO não introduziria um problema particularmente; isso pode facilitar um pouco o trabalho de um hacker , mas isso é uma preocupação específica para você? Em geral, o .NET pode ser descompilado com relativa facilidade na maioria dos casos - se você estiver preocupado com isso, simplesmente não enviar o PDB não é uma boa solução.
Jon Skeet
130

Originalmente, eu me fiz a pergunta " Preciso de um arquivo PDB implantado na máquina do meu cliente? " E, depois de ler esta postagem, decidi excluir o arquivo.

Tudo funcionou bem, até hoje, quando eu estava tentando descobrir por que uma caixa de mensagem contendo um Exception.StackTraceestava faltando as informações de número de arquivo e linha - necessárias para solucionar a exceção. Reli este post e encontrei o principal número de informações: embora o PDB não seja necessário para a execução do aplicativo, é necessário que os números de arquivo e linha estejam presentes na StackTracestring. Incluí o arquivo PDB na pasta executável e agora está tudo bem.

BCA
fonte
2
Esta é uma parte muito importante a ser lembrada, que o accepted answeraqui não menciona.
Monku 29/11/19
85

APO é uma abreviatura para P rogram D ATA B ase. Como o nome sugere, é um repositório (armazenamento persistente, como bancos de dados) para manter as informações necessárias para executar seu programa no modo de depuração. Ele contém muitas informações relevantes importantes necessárias durante a depuração do código (no Visual Studio), por exemplo, em quais pontos você inseriu pontos de interrupção nos quais espera que o depurador seja interrompido no Visual Studio.

Esse é o motivo pelo qual muitas vezes o Visual Studio falha nos pontos de interrupção se você remover os *.pdbarquivos das pastas de depuração. O depurador do Visual Studio também pode informar o número exato da linha do arquivo de código no qual ocorreu uma exceção no rastreamento da pilha com a ajuda dos *.pdbarquivos. Portanto, os arquivos pdb efetivamente são um benefício para os desenvolvedores durante a depuração de um programa.

Geralmente, não é recomendável excluir a geração de *.pdbarquivos. Do ponto de vista do release de produção, o que você deve fazer é criar os arquivos pdb, mas não os envie para o site do cliente no instalador do produto. Preserve todos os arquivos PDB gerados em um servidor de símbolos de onde possa ser usado / referenciado no futuro, se necessário. Especialmente nos casos em que você depura problemas como falha no processo. Quando você começa a analisar os arquivos de despejo de memória e se os *.pdbarquivos originais criados durante o processo de compilação não forem preservados, o Visual Studio não poderá distinguir a linha exata de código que está causando a falha .

Se você ainda deseja desativar *.pdbcompletamente a geração de arquivos para qualquer release, vá para as propriedades do projeto -> Guia Build -> Clique no Advancedbotão -> Escolha nonena caixa suspensa "Informações de depuração" -> pressione OKconforme mostrado na captura de tela abaixo .

Nenhuma configuração de Informações de Depuração para um Projeto C #

Nota : Essa configuração deverá ser feita separadamente para as configurações de compilação "Debug" e "Release".

RBT
fonte
13

Um arquivo PDB contém informações usadas pelo depurador. Não é necessário executar seu aplicativo e não precisa ser incluído na sua versão lançada.

Você pode desativar a criação de arquivos pdb no Visual Studio. Se você estiver construindo a partir da linha de comando ou de um script, omita a /Debugopção.

Mark Byers
fonte
2
O modo Release ainda cria PDBs por padrão, acredito. Você pode alterar as propriedades do projeto para desativá-lo.
Jon Skeet 10/10
Sim; ele ainda vem com o lançamento com um projeto padrão.
Andrew Barber
Acabei de verificar e também recebo um por padrão se estiver usando o Visual Studio.
Mark Byers
4

O arquivo de banco de dados de depuração do programa (pdb) é um formato de arquivo da Microsoft para armazenar informações de depuração.

Quando você cria um projeto usando o Visual Studio ou o prompt de comando, o compilador cria esses arquivos de símbolo.

Verifique o Microsoft Docs

Nipuna
fonte