O que faz o PDB me durante a depuração e como eu sei que ele está trabalhando?

StackOverflow https://stackoverflow.com/questions/52600

  •  09-06-2019
  •  | 
  •  

Pergunta

Eu tenho que usar um componente de terceiros sem o código fonte.Eu tenho a versão DLL e lançamento de arquivo PDB.Vamos chamá-lo de "CorporateComponent.dll'.Meu próprio código cria objetos a partir desta DLL e chamadas de métodos desses objetos.

CorpObject o = new CorpObject();
Int32 result = o.DoSomethingLousy();

Durante a depuração, o método 'DoSomethingLousy' lança uma exceção.O que faz o ficheiro PDB fazer por mim?Se ele faz algo de bom, como posso ter certeza de que eu estou fazendo o uso dele?

Foi útil?

Solução

Para confirmar se você está utilizando o previsto PDB, CorporateComponent.pdb, durante a depuração no IDE do Visual Studio rever a janela de saída e localize a linha que indica que o CorporateComponent.dll é carregado e seguido pela seqüência de caracteres Symbols loaded.

Para ilustrar, a partir de um projeto de mina:

The thread 0x6a0 has exited with code 0 (0x0).
The thread 0x1f78 has exited with code 0 (0x0).
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug  \AvayaConfigurationService.exe', Symbols loaded.
'AvayaConfigurationService.vshost.exe' (Managed): Loaded 'C:\Development\Src\trunk\ntity\AvayaConfigurationService\AvayaConfigurationService\bin\Debug\IPOConfigService.dll', No symbols loaded.

Loaded 'C:\Development\src...\bin\Debug\AvayaConfigurationService.exe', Symbols loaded.

Isso indica que o PDB foi encontrado e carregado o depurador IDE.

Como indicado por outros, Ao examinar a pilha de frames dentro de seu aplicativo, você deve ser capaz de ver os símbolos dos CorporateComponent.pdb.Se não, então talvez a terceiros não incluem informações de símbolo na versão PDB construir.

Outras dicas

O pdb contém informações o depurador precisa para ler corretamente a pilha.Seu rastreamentos de pilha irá conter os números de linha e símbolo os nomes dos quadros de pilha dentro dos módulos para que você tenha o pdb.

Eu vou dar dois exemplos de usos.A primeira é a resposta óbvia.A segunda explica a origem indexadas do pdb.

1º exemplo de uso...

Dependendo da convenção de chamada e quais otimizações do compilador utilizado, pode não ser possível para o depurador manualmente relaxar a pilha através de um módulo para o qual você não tem um pdb.Isso pode acontecer com algumas bibliotecas de terceiros e até mesmo para algumas partes do sistema operacional.

Considere um cenário em que você encontrar uma violação de acesso dentro do sistema operacional windows.O rastreamento de pilha não relaxar na sua própria aplicação, uma vez que OS componente usa um especial de convenção de chamada que confunde o depurador.Se você configurar o seu caminho de símbolo para download público OS pdb, então há uma boa chance de que o rastreamento de pilha vai relaxar em seu aplicativo.Que permite que você veja exatamente o que argumentos o seu próprio código passado para o SO da chamada de sistema.(e exemplo semelhante para AV dentro de uma festa de 3 biblioteca ou até mesmo dentro de seu próprio código)

2º exemplo de uso...

Pdb tem outra propriedade útil - eles podem integrar alguns sistemas de controle de origem usando um recurso que a microsoft chama de "fonte de indexação".Uma fonte indexadas pdb contém comandos de controle de origem que especificam como a busca do controle de origem o arquivo exato versões que foram usados para criar o componente.Microsoft depuradores entender como executar os comandos para obter automaticamente os arquivos durante uma sessão de depuração.Esse é um recurso poderoso que salva a depuração egineer de ter que sincronizar manualmente uma árvore de código fonte para o nome correto para uma determinada construção.Ele é especialmente útil para depuração remota e sessões para analisar despejos de memória post-mortem.

As "ferramentas de depuração para windows" de instalação (windbg) contém um documento chamado srcsrv.doc que fornece um exemplo que demonstra como usar srctool.exe para determinar quais arquivos de origem são de origem indexados em um determinado pdb.

Para responder a sua pergunta "como faço para saber", o "módulos" recurso em que o depurador pode dizer que os módulos possuem um correspondente pdb.No windbg usar o "lml" de comando.No visual studio selecione módulos de algum lugar na depuração de menus.(desculpe, eu não tenho uma versão atual do visual studio útil)

O PDB é um arquivo de banco de dados que mapeia as instruções para os seus números de linha no código original assim, quando você obter um rastreamento de pilha que você vai obter os números de linha para o código.Se é uma DLL não gerida, em seguida, o ficheiro PDB também dar-lhe os nomes das funções no rastreamento de pilha, enquanto que a informação é, normalmente, apenas disponíveis para gestão de Dll sem PDBs.

O principal que eu conseguir o pdb é a linha de números reais e nomes de método para rastreamentos de pilha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top