Especificar arquivos de símbolo (.pdb) e de origem no Depurador do Visual Studio
Localize e especifique arquivos de símbolo e arquivos de origem; especifique o comportamento de carregamento de símbolo, use servidores de símbolo e de origem; carregue símbolos automaticamente ou sob demanda.
Conteúdo
Localizar símbolo (arquivos. PDB)
Localizar arquivos de símbolo (.pdb)
Dica
Nas versões do Visual Studio anteriores ao VS 2012, a depuração de código gerenciado em um dispositivo remoto exigia que os arquivos de símbolo também estivessem localizados no computador remoto.Esse não é mais o caso.Todos os arquivos de símbolo devem estar localizados no computador local ou em um local especificado na página Depuração / Símbolos da caixa de diálogo Opções do Visual Studio.Consulte .NET Remote Symbol Loading Changes in Visual Studio 2012 and 2013 (Alterações de carregamento de símbolos remotos do .NET no Visual Studio 2012 e 2013) no blog Ciclo de vida de aplicativos da Microsoft.
- Onde o depurador procura por arquivos .pdb | Por que os arquivos de símbolo precisam coincidir exatamente com os arquivos executáveis? | Especificar o comportamento de carregamento e os locais de símbolos | Usar servidores de símbolo para localizar arquivos de símbolo que não estão no computador local | Localizar e carregar símbolos durante a depuração | Definir opções de compilador para arquivos de símbolo
Um arquivo de banco de dados do programa (.pdb), também chamado de arquivo de símbolo, mapeia os identificadores que você cria em arquivos de origem para classes, métodos e outro código para os identificadores que são usados em executáveis compilados do seu projeto. O arquivo .pdb também mapeia as instruções no código-fonte para instruções de execução nos arquivos executáveis. O depurador usa essas informações para determinar duas informações principais: o arquivo de origem e o número da linhas que são exibidos no IDE do Visual Studio e o local no executável onde deve ocorrer a interrupção quando você definir um ponto de interrupção. Um arquivo de símbolo também contém o local original dos arquivos de origem e, opcionalmente, o local de um servidor de origem de onde os arquivos de origem podem ser recuperados.
Quando você depura um projeto no IDE do Visual Studio, o depurador sabe exatamente onde localizar o .pdb e os arquivos de origem para seu código. Se desejar depurar o código fora do código-fonte do projeto, como o código do Windows ou de terceiros chamado por seu projeto, você terá que especificar o local do .pdb (e, opcionalmente, os arquivos de origem do código externo) e esses arquivos precisam corresponder exatamente à compilação dos executáveis.
Onde o depurador procura por arquivos .pdb
No local especificado dentro da DLL ou do arquivo executável.
(Por padrão, se você compilou uma DLL ou um arquivo executável no seu computador, o vinculador coloca o caminho completo e o nome do arquivo associado .pdb dentro da DLL ou do arquivo executável. O depurador verifica primeiro se o arquivo de símbolo existe no local especificado dentro da DLL ou do arquivo executável. Isso é útil porque você sempre tem os símbolos disponíveis para o código que compilou no seu computador.)
Em arquivos .pdb que podem estar presentes na mesma pasta que a DLL ou o arquivo executável.
Em algumas pastas de cache de símbolo locais.
Em servidores de símbolo local, na rede ou Internet e nos locais em que são especificados, como o servidor de símbolo Microsoft, se habilitado.
Localizar arquivos de símbolo (.pdb)
Conteúdo
Por que os arquivos de símbolo precisam coincidir exatamente com os arquivos executáveis?
O depurador carregará apenas um arquivo .pdb para um arquivo executável que corresponde exatamente ao arquivo .pdb criado quando o executável foi compilado (isto é, o .pdb deve ser o original ou uma cópia do arquivo .pdb original). Como o compilador é otimizado para a velocidade de compilação, além de sua tarefa principal de criar um código correto e eficiente, o layout real de um executável pode ser alterado mesmo se o código em si não tiver sido alterado. Para obter mais informações, consulte a postagem no blog do MSDN Por que o Visual Studio exige arquivos de símbolo de depurador para correspondência *exata* com os arquivos binários com que eles foram criados?
Localizar arquivos de símbolo (.pdb)
Conteúdo
Especificar o comportamento de carregamento e os locais de símbolos
Quando você depura um projeto no IDE do VS, o depurador carrega automaticamente os arquivos de símbolo localizados no diretório do projeto. Você pode especificar caminhos de pesquisa alternativos e servidores de símbolo para componentes Microsoft, Windows ou de terceiros na página Depuração/Símbolos da caixa de diálogo Opções do VS. Na página Símbolos, também é possível apontar os módulos específicos para os quais deseja que o depurador carregue os símbolos automaticamente. E você pode alterar essas configurações manualmente quando estiver depurando ativamente.
Para abrir a página Depuração/Símbolos
No menu Depurar, escolha Opções.
No opções caixa de diálogo caixa, escolha símbolos sob o depuração nó.
Especifique um local de servidor ou de pesquisa do símbolo
Escolha a pasta ícone. O texto editável aparece na caixa Locais do arquivo de símbolo (.pdb).
Digite o caminho do diretório ou a URL do servidor de símbolos ou local do símbolo. O preenchimento de instruções ajuda você a localizar o formato correto.
Para melhorar o símbolo de desempenho do carregamento digite o caminho de um diretório local onde os símbolos podem ser copiados por servidores de símbolo no armazenar símbolos neste diretório caixa um diretório local símbolos podem ser copiados para.
Dica
Não coloque o cache de símbolo em uma pasta protegida (como a pasta C:\Windows ou uma de suas subpastas).Use uma pasta de leitura/gravação.
Especificar o comportamento de carregamento de símbolos
Você pode especificar os arquivos que deseja que sejam carregados automaticamente dos locais da caixa Locais do arquivo de símbolo (.pdb) quando iniciar a depuração. Os arquivos de símbolo no diretório do projeto são sempre carregados.
Escolha Todos os módulos, a menos que excluídos para carregar todos os símbolos de todos os módulos, exceto aqueles especificados quando você escolhe o link Especificar módulos excluídos.
Escolha a opção Somente os módulos especificados e escolha Especificar módulos para listar os módulos dos arquivos de símbolo que deseja carregar automaticamente. Os arquivos de símbolo para outros módulos são ignorados.
Especificar opções adicionais de símbolo
Você também pode configurar a seguinte opção na página Depuração/Geral da caixa de diálogo Opções do VS:
Avisar se não houver símbolos na inicialização (somente nativo)
Quando selecionada, exibe uma caixa de diálogo de aviso quando você tenta depurar um programa para o qual o depurador não tem nenhuma informação simbólica.
Carregar exportações de DLL
Quando selecionada, carrega as tabelas de exportação de DLL. Informações simbólicas das tabelas de exportação de DLL podem ser úteis se você estiver trabalhando com mensagens do Windows, procedimentos do Windows (WindowProcs), objetos COM, ou marshaling, ou qualquer DLL para a qual você não tem símbolos. A leitura das informações de exportação de DLL gera certa sobrecarga. Desse modo, esse recurso é desativado por padrão.
Para ver quais símbolos estão disponíveis na tabela de exportação de uma DLL, use dumpbin /exports. Os símbolos estão disponíveis para qualquer DLL de 32 bits do sistema. Ao ler a saída dumpbin /exports, você pode ver o nome exato da função, incluindo caracteres não alfanuméricos. Isso é útil para definir um ponto de interrupção em uma função. Os nomes de função de tabelas de exportação de DLL podem aparecer truncados em qualquer outro lugar no depurador. As chamadas são listadas na ordem de chamada, com a função atual (a mais profundamente aninhada) na parte superior. Para obter mais informações, consulte dumpbin /exports.
Conteúdo | Localizar arquivos de símbolo (.pdb)
Usar servidores de símbolo para localizar arquivos de símbolo que não estão no computador local
O Visual Studio pode baixar arquivos de símbolo de depuração dos servidores de símbolo que implementam o protocolo symsrv. O Visual Studio Team Foundation Server e as Ferramentas de Depuração para Windows são duas ferramentas que podem implementar servidores de símbolo. Você especifica os servidores de símbolo a serem usados na caixa de diálogo Opções do VS.
Os servidores de símbolo que você pode usar incluem:
Servidores de símbolo públicos da Microsoft
Para depurar uma pane que ocorre durante uma chamada a uma DLL do sistema ou a uma biblioteca de terceiros, você normalmente precisará dos arquivos de sistema .pdb, que contêm símbolos de DLLs, EXEs e drivers de dispositivo do Windows. Você pode obter esses símbolos de servidores de símbolo públicos da Microsoft. Os servidores de símbolo públicos da Microsoft fornecem símbolos para sistemas operacionais Windows, além do MDAC, IIS, ISA e .NET Framework.
Para usar os servidores de símbolo Microsoft, escolha Opções e Configurações no menu Depurar e escolha Símbolos. Selecione Servidores de Símbolo Microsoft.
Servidores de símbolo em uma rede interna ou no computador local
Sua equipe ou empresa pode criar servidores de símbolo para seus próprios produtos e como um cache para símbolos de fontes externas. Você pode ter um servidor de símbolo no seu próprio computador. É possível inserir o local dos servidores de símbolo como uma URL ou como um caminho na página Depuração/Símbolos da caixa de diálogo Opções do VS.
Servidores de símbolo de terceiros
Provedores de terceiros de aplicativos e bibliotecas do Windows podem fornecer acesso ao servidor de símbolo na Internet. Você também digita a URL desses servidores de símbolo na página Depuração/Símbolos.
Dica
Ao usar um servidor de símbolo que não seja um dos servidores de símbolo públicos da Microsoft, verifique se o servidor de símbolo e seu caminho são confiáveis.Como os arquivos de símbolo podem conter códigos executáveis arbitrários, você pode ser exposto às ameaças de segurança.
Conteúdo | Localizar arquivos de símbolo (.pdb)
Localizar e carregar símbolos durante a depuração
Sempre que o depurador estiver no modo de interrupção, você poderá carregar símbolos para um módulo que foi excluído anteriormente pelas opções de depurador ou que o compilador não pôde localizar. É possível carregar símbolos usando os menus de atalho das janelas Pilha de Chamadas, Módulos, Locais, Autos e de todas as janelas de Inspeção. Se o depurador for interrompido no código que não tenha arquivos de símbolo ou de origem disponíveis, será exibida uma janela de documento. Aqui você pode localizar informações sobre os arquivos ausentes e executar ações para encontrá-los e carregá-los.
Localizar símbolos com as páginas de documento Nenhum Símbolo Carregado
Há várias formas para que o depurador entrar no código que não tem símbolos disponíveis:
Entrando no código.
Sendo interrompido no código a partir de um ponto de interrupção ou exceção.
Alternando para outro thread.
Alterar o quadro de pilhas clicando duas vezes em um quadro na janela pilha de chamadas.
Quando um desses eventos ocorre, o depurador exibe a página Nenhum Símbolo Carregado para ajudar você a localizar e carregar os símbolos necessários.
Para alterar os caminhos de pesquisa, escolha um caminho não selecionado ou escolha Novo e digite um novo caminho. Escolha Carregar para procurar novamente os caminhos e carregar o arquivo de símbolo, caso ele seja encontrado.
Escolha Procurar e localizar executable-name ... para substituir as opções de qualquer símbolo e repita os caminhos de pesquisa. O arquivo do símbolo será carregado, se for encontrado, ou um Explorador de Arquivos será exibido para que você selecione manualmente o arquivo de símbolo.
Escolha Alterar Configurações de Símbolo... para exibir a página Depuração / Símbolos da caixa de diálogo Opções do VS.
Escolha ver desmontagem para mostrar a desmontagem em uma nova janela uma vez.
Para sempre mostrar a desmontagem quando os arquivos de origem ou de símbolo não forem localizados, escolha o caixa de diálogo Opções link e selecione Habilitar depuração no nível do endereço e Mostrar desmontagem se a fonte não está disponível.
Alterar opções de símbolo no menu de atalho
No modo de interrupção, você pode localizar e carregar símbolos para itens que são exibidos nas janelas Pilha de Chamadas, Módulos, Locais, Autos e todas as janelas de Inspeção. Selecione um item na janela, abra o menu de atalho e escolha uma das seguintes opções:
Opção |
Descrição |
---|---|
Carregar Símbolos |
Tenta carregar símbolos de locais especificados na página Depuração / Símbolos da caixa de diálogo Opções. Se o arquivo de símbolo não puder ser encontrado, o Explorador de Arquivos será iniciado para que você possa especificar um novo local de pesquisa. |
Informações de Carregamento de Símbolos |
Apresenta informações que mostram o local de um arquivo de símbolo carregado ou os locais que foram pesquisados se o depurador não puder localizar o arquivo. |
Configurações de Símbolo... |
Abre a página Depuração / Símbolos da caixa de diálogo Opções do VS. |
Sempre Carregar Automaticamente |
Adiciona o arquivo de símbolo à lista de arquivos que são carregados automaticamente pelo depurador. |
Conteúdo | Localizar arquivos de símbolo (.pdb)
Definir opções de compilador para arquivos de símbolo
Quando você compila seu projeto no IDE do VS e usa a configuração de compilação padrão Depurar, o C++ e os compiladores gerenciados criam os arquivos de símbolos apropriados para o seu código. Também é possível definir opções de compilador na linha de comando para criar arquivos de símbolo.
Opções do C++
Um arquivo de banco de dados do programa (.pdb) contém informações de depuração e estado do projeto que permite a vinculação incremental de uma configuração de depuração do seu programa. Um arquivo .pdb é criado quando você compila com /ZI ou /Zi (para C/C++).
No Visual C++, a opção /Fd nomeia o arquivo.pdb criado pelo compilador. Quando você cria um projeto no Visual Studio usando assistentes, a opção /Fd é definida para criar um arquivo .pdb chamado project.pdb.
Se você criar seu aplicativo C/C++ usando um makefile e especificar /ZI ou /Zi sem /Fd, você acabará com dois arquivos. PDB:
VCx.pdb, em que x representa a versão do Visual C++, por exemplo, VC11.pdb. Esse arquivo armazena todas as informações de depuração para arquivos OBJ individuais e reside no mesmo diretório que o makefile do projeto.
project.pdb Esse arquivo armazena todas as informações de depuração para o arquivo .exe. No C/C++, ele reside no subdiretório \debug.
Sempre que um arquivo OBJ é criado, o compilador C/C++ mescla informações de depuração em VCx.pdb. As informações inseridas incluem informações de tipo, mas não incluem informações de símbolo como definições de função. Assim, mesmo que todos os arquivos de origem incluam arquivos de cabeçalhos comuns, como <windows.h>, os typedefs desses cabeçalhos serão armazenados somente uma vez, em vez de estarem em todos os arquivos OBJ.
O vinculador cria project.pdb, que contém informações de depuração para o arquivo EXE do projeto. O arquivo project.pdb contém todas as informações de depuração, incluindo protótipos de função, não apenas as informações de tipo encontradas no VCx.pdb. Ambos os arquivos .pdb permitem atualizações incrementais. O vinculador também insere o caminho no arquivo .pdb do arquivo .exe ou .dll que ele cria.
O depurador do Visual Studio usa o caminho para o arquivo .pdb no arquivo EXE ou DLL para localizar o arquivo project.pdb. Se o depurador não puder localizar o arquivo .pdb nesse local ou se o caminho for inválido (por exemplo, se o projeto tiver sido movido para outro computador), o depurador pesquisará o caminho com o EXE, os caminhos de símbolo especificados na caixa de diálogo Opções (pasta Depuração, nó Símbolos). O depurador não carregará um arquivo .pdb que não corresponde ao executável que está sendo depurado. Se o depurador não puder localizar um arquivo .pdb, será exibida uma caixa de diálogo Localizar Símbolos, que permite que você procure por símbolos ou adicione locais ao caminho de pesquisa.
Opções do .NET Framework
Um arquivo de banco de dados do programa (.pdb) contém informações de depuração e estado do projeto que permite a vinculação incremental de uma configuração de depuração do seu programa. Um arquivo .pdb é criado quando você compila com /debug. Você pode compilar aplicativos com /debug:full ou /debug:pdbonly. A compilação com /debug:full gera código depurável. Compilar com /debug:pdbonly gera arquivos .pdb, mas não gera o DebuggableAttribute que informa o compilador JIT que as informações de depuração estão disponíveis. Use /debug:pdbonly se desejar gerar arquivos .pdb para uma compilação de versão que você não deseja que seja depurável. Para obter mais informações, consulte /debug (opções do compilador C#) ou /debug (Visual Basic).
O depurador do Visual Studio usa o caminho para o arquivo .pdb no arquivo EXE ou DLL para localizar o arquivo project.pdb. Se o depurador não puder localizar o arquivo .pdb nesse local ou se o caminho for inválido, o depurador pesquisará o caminho com o EXE e os caminhos de símbolo especificados na caixa de diálogo Opções. Esse caminho geralmente é a pasta Depuração no nó Símbolos. O depurador não carregará um arquivo .pdb que não corresponde ao arquivo executável que está sendo depurado. Se o depurador não puder localizar um arquivo .pdb, será exibida uma caixa de diálogo Localizar Símbolos, que permite que você procure por símbolos ou adicione locais ao caminho de pesquisa.
Aplicativos Web
O arquivo de configuração do aplicativo (Web.config) deve ser definido para o modo de depuração. O modo de depuração faz com que o ASP.NET gere símbolos para arquivos gerados dinamicamente e permite que o depurador se anexe ao aplicativo ASP.NET. O VS define isso automaticamente quando você inicia a depuração, caso você tenha criado o projeto do modelo Projetos Web.
Conteúdo | Localizar arquivos de símbolo (.pdb)
Localizar arquivos de origem
- Onde o depurador procura por arquivos de origem | Localizar e carregar arquivos de origem com as páginas Nenhuma Origem/Nenhum Símbolo Carregado | Adicionar caminhos de pesquisa do arquivo de origem a uma solução | Usar servidores de origem
Onde o depurador procura por arquivos de origem
O depurador procura arquivos de origem nos seguintes locais:
Arquivos que estão abertos no IDE da instância do Visual Studio que iniciou o depurador.
Em arquivos na solução aberta na instância do VS.
Diretórios especificados no Propriedades comuns / depurar arquivos fonte página nas propriedades da solução.
Nas informações de origem do .pdb do módulo. Esse pode ser o local do arquivo de origem quando o módulo foi compilado ou pode ser um comando para um servidor de origem.
Conteúdo | Localizar arquivos de origem
Localizar e carregar arquivos de origem com as páginas Nenhuma Origem/Nenhum Símbolo Carregado
Quando o depurador interrompe a execução em um local onde o arquivo de origem não está disponível, ele exibirá as páginas Nenhuma Origem Carregada ou Nenhum Símbolo Carregado, que podem ajudar você a encontrar o arquivo de origem. A página Nenhum Símbolo Carregado aparece quando o depurador não pode localizar um arquivo de símbolo (.pdb) para o arquivo executável concluir sua pesquisa. A página Nenhum Símbolo fornece opções para procurar o arquivo. Se o .pdb for encontrado depois que você executar uma das opções e se o depurador puder recuperar o arquivo de origem usando as informações no arquivo de símbolos, a origem será exibida. Caso contrário, a página Nenhuma Origem Carregada aparecerá descrevendo o problema. A página exibe links de opções que podem executar ações que podem resolver o problema.
Conteúdo | Localizar arquivos de origem
Adicionar caminhos de pesquisa do arquivo de origem a uma solução
Você pode especificar uma rede ou diretórios locais para procurar arquivos de origem.
Selecione a solução no Gerenciador de Soluções e, em seguida, escolha Propriedades no menu de atalho.
No nó Propriedades Comuns, escolha Depurar Arquivos Fonte.
Clique na pasta ícone. O texto editável aparece na lista Diretórios que contêm o código-fonte.
Adicione o caminho que deseja pesquisar.
Observe que somente o diretório especificado será pesquisado. Você deve adicionar entradas para todos os subdiretórios que deseja pesquisar.
Conteúdo | Localizar arquivos de origem
Usar servidores de origem
Quando não há nenhum código-fonte no computador local ou o arquivo .pdb não corresponde ao código-fonte, você pode usar o servidor de origem para ajudar na depuração de um aplicativo. O Servidor de Origem recebe solicitações de arquivos e retorna os arquivos reais. O Servidor de Origem é executado por meio de um arquivo DLL chamado srcsrv.dll. O Servidor de Origem lê o arquivo .pdb do aplicativo, que contém ponteiros para o repositório do código-fonte, bem como os comandos usados para recuperar o código-fonte do repositório. Você pode limitar quais comandos terão permissão para execução do arquivo .pdb, listando os comandos permitidos dentro de um arquivo denominado srcsrv.ini, que deve ser colocado no mesmo diretório que srcsrv.dll e devenv.exe.
Observação de segurança |
---|
Os comandos arbitrários podem ser inseridos no arquivo .pdb do aplicativo, portanto, certifique-se de colocar somente aqueles que você deseja executar no arquivo srcsrv.ini.Qualquer tentativa de executar um comando que não esteja no arquivo srcsvr.ini fará com que uma caixa de diálogo de confirmação seja exibida.Para obter mais informações, consulte Aviso de segurança: o depurador deve executar o comando não confiável.Nenhuma validação é feita em parâmetros do comando. Portanto, tenha cuidado com comandos confiáveis.Por exemplo, se você confiar no cmd.exe, um usuário mal-intencionado pode especificar parâmetros que tornariam o comando perigoso. |
Para permitir o uso de um Servidor de Origem
Você deve cumprir as medidas de segurança descritas na seção anterior.
Sobre o ferramentas menu, escolha opções.
A caixa de diálogo Opções é exibida.
No nó Depuração, escolha Geral.
Marque a caixa de seleção Habilitar suporte a servidor de código-fonte.
(Opcional) Escolha o filho opções que você deseja.
Observe que Permitir servidor de código-fonte para assemblies de confiança parcial (Somente gerenciados) e Sempre executar comandos não confiáveis do servidor de código-fonte sem perguntar podem aumentar os riscos de segurança discutidos acima.
Conteúdo | Localizar arquivos de origem