Por que o Visual Studio 2010 não consegue localizar / abrir arquivos PDB?

83

Estou tentando usar o OpenCV no VS 2010. Sou um amador e estou aprendendo os primeiros passos na wiki do OpenCV. No entanto, ao tentar depurar meu projeto, recebo os seguintes erros:

'C: \ Windows \ SysWOW64 \ ntdll.dll', Não é possível localizar ou abrir o arquivo PDB 'C: \ Windows \ SysWOW64 \ kernel32.dll', Não é possível localizar ou abrir o arquivo PDB 'C: \ Windows \ SysWOW64 \ kernellbase. dll ', Não é possível encontrar ou abrir o arquivo PDB

Tenho esses arquivos no diretório certo, então por que não consigo abri-los? O que devo fazer para resolver o problema?

HamidRezaHamidiEsfahani
fonte
O que você quer dizer com "no diretório certo"? O PDB está na mesma pasta que a DLL?
Harper
1
@harper: Considerando que as bibliotecas em questão são arquivos de sistema do Windows, os PDBs provavelmente não deveriam estar na mesma pasta que a DLL. As DLLs estão no diretório C: \ Windows \ SysWOW64, mas os símbolos PDB provavelmente estarão no diretório de cache de símbolo projetado. Aquele que você especifica nas opções de depuração do Visual Studio.
Cody Gray
@Cody Gray: Você pode copiar os PDBs para o diretório (manualmente) ou é necessário utilizar os servidores de símbolos da Microsoft (fonte)?
Harper
@harper: Não tenho ideia se vai funcionar assim. Não tenho certeza se o Visual Studio encontrará os símbolos PDB lá (embora eu imagine que sim ). Mas, no que diz respeito ao licenciamento, tenho quase certeza de que você deve usar os servidores de símbolos da MS. De que outra forma você obterá os arquivos PDB? Também não sei por que você quer boicotar isso. O Visual Studio tem toda essa funcionalidade incorporada, então por que não aproveitá-la? Ele foi projetado para armazenar os símbolos localmente, para que você não precise baixá-los novamente a cada vez. Eu nem percebo mais isso acontecendo.
Cody Gray
@Cody Gray: Não quero boicotar nada. Eu nem tenho esses PDBs. Mas estou curioso para saber como funciona.
Harper

Respostas:

124

Primeiro altere os seguintes parâmetros:

Ferramentas -> Opções -> Depuração -> Símbolos -> Servidor -> Sim

Em seguida, pressione Ctrl+ F5e você verá coisas incríveis.

Seanlitow
fonte
2
Uau! Isso foi incrível! Obrigado por esta resposta. +1 para você!
Matthew Crews
Só para ficar claro, isso só fará o download dos símbolos uma vez, certo? Isso não vai me impedir de trabalhar offline?
Seanny123
1
Você conhece um link direto para fazer o download? Estou trabalhando em uma rede fechada sem acesso à internet.
levkaster,
2
Euhm ... Controle F5 não anexa o depurador AFAIK. Portanto, esta resposta está perdendo o ponto.
Buckley
1
Eu fiz o mesmo que você disse. mas agora mostra que alguns símbolos foram carregados enquanto o restante do arquivo PDB não foi adicionado
Hemant Parihar
20

Tenho certeza de que são avisos , não erros. Seu projeto ainda deve funcionar bem.

No entanto, como você deve sempre tentar corrigir os avisos do compilador, vamos ver o que podemos descobrir. Não estou familiarizado com o OpenCV, e você não tem um link para o tutorial wiki que está seguindo. Mas me parece que o problema é que você está executando uma versão de 64 bits do Windows (como evidenciado pela pasta "SysWOW64" no caminho para os arquivos DLL), mas o material do OpenCV que você está tentando é criado para uma plataforma de 32 bits. Portanto, pode ser necessário reconstruir o projeto usando CMake, conforme explicado aqui .

Mais especificamente, os arquivos listados são arquivos de sistema do Windows. Os arquivos PDB contêm informações de depuração que o Visual Studio usa para permitir que você entre e depure o código compilado. Na verdade, você não precisa dos arquivos PDB para que as bibliotecas do sistema possam depurar seu próprio código. Mas, se quiser, você também pode baixar os símbolos para as bibliotecas do sistema. Vá para o menu "Debug", clique em "Opções e configurações" e role para baixo na caixa de listagem à direita até ver "Ativar suporte ao servidor de origem". Certifique-se de que essa opção esteja marcada. Em seguida, na visualização em árvore à esquerda, clique em "Símbolos" e certifique-se de que a opção "Servidores de símbolos da Microsoft" esteja selecionada. Clique em OK para fechar a caixa de diálogo e tente reconstruir.

Cody Gray
fonte
7
Não tenho certeza do que devo dizer em resposta a isso. Você está procurando mais ajuda? Ou você está apenas deixando um comentário? Porque se você está procurando por mais ajuda, você terá que explicar o que exatamente deu errado quando você "tentou fazer isso" e o que você quis dizer com "não funcionou". Somos todos programadores, você sabe que não é assim que um relatório de bug útil é preenchido.
Cody Gray
Desculpe, por algum motivo, minha mensagem inteira não foi colada. Mas, desde então, eu corrigi usando o seguinte método. stackoverflow.com/questions/1468726/…
daveomcd
10

Visual Studio Community Edition 2015

Tive esse erro o dia todo. Eu finalmente consertei indo para Ferramentas> Importar e exportar configurações> Redefinir todas as opções> Redefinir configurações gerais.

Depois de redefinir, vá para Ferramentas> Opções> Depuração> Símbolos> - Em seguida, marque a caixa ao lado de Microsoft Symbol Servers.

Execute seu aplicativo no modo de depuração e ele abrirá janelas informando que está baixando símbolos para vários arquivos .dll diferentes. Deixe terminar de fazer isso.

Depois de concluído, ele deve funcionar novamente.

Ninguém
fonte
3

Eu tive o mesmo problema. Acontece que, compilando um projeto que recebi de outra pessoa, não defini o projeto de inicialização correto (clique com o botão direito no projeto de inicialização desejado no gerenciador de soluções e selecione "definir como projeto de inicialização"). Talvez isso ajude, saúde.

Jurek Stefanowicz
fonte
1

Referindo-se ao primeiro tópico / outra possibilidade do VS não conseguir abrir ou encontrar o arquivo pdb do processo é quando você tem seu executável rodando em segundo plano. Eu estava trabalhando com o mpiexec e tive esse problema. Sempre verifique seu gerenciador de tarefas e elimine qualquer processo executivo que você vai construir em seu projeto. Depois de fazer isso, ele depurou ou construiu bem.

Além disso, se você tentar continuar com o aviso, os pontos de interrupção não serão atingidos e não terá o executável atual

Mpi
fonte
1

Para usuários do VS2013 que se encontram aqui como eu:

Tools -> Options -> Debugging -> Symbols

Você verá que o Cache symbols in this directory:campo está vazio; você pode navegar / inserir o caminho sozinho ou simplesmente clicar no Load all symbolsbotão. Uma janela de alerta aparecerá dizendo "Como você não selecionou um diretório de cache de símbolos, o padrão será usado". Agora você verá C:\Users\XXXX\AppData\Local\Temp\SymbolCacheno campo de caminho anteriormente vazio. Clique Load all symbolsuma segunda vez e pronto. Clique em ok, e apenas por uma questão de diligência, limpe e reconstrua sua solução.

um corredor
fonte
0

Descobri que esses erros às vezes são causados ​​pela falta de permissões ao compilar um projeto - então, corro como administrador para fazer com que ele funcione corretamente.

Sinistro Arco Íris
fonte
0

Estou tendo os mesmos avisos. Não tenho certeza se é uma questão de 32 x 64 bits. Acabei de carregar os novos símbolos e alguns problemas foram resolvidos, mas os relativos ao OpenCV ainda persistem. Este é um extrato da saída com o problema resolvido vs. não resolvido:

'OpenCV_helloworld.exe': Carregado 'C: \ OpenCV2.2 \ bin \ opencv_imgproc220d.dll', Não é possível encontrar ou abrir o arquivo PDB

'OpenCV_helloworld.exe': Carregado 'C: \ WINDOWS \ system32 \ imm32.dll', Símbolos carregados (informações da fonte removidas).

O código está saindo de 0 caso alguém pergunte.

O programa '[4424] OpenCV_helloworld.exe: Native' foi encerrado com o código 0 (0x0).

sparaflAsh
fonte
0

Eu tive o mesmo problema. A depuração não funciona com o material que vem com o executável OpenCV. você tem que construir seus próprios binários.
Em seguida, habilite os servidores de símbolo da Microsoft em Depurar-> opções e configurações-> depurar-> símbolos

john ktejik
fonte
0

Eu tive o mesmo problema. Quando executei meu Teste de Unidade no código C ++, recebi um erro que dizia "Não é possível encontrar ou abrir o arquivo PDB".

Histórico

Quando olhei para o log de saída no Visual Studio, vi que ele estava procurando na pasta errada. Eu havia renomeado a pasta WinUnit, mas algo no código WinUnit estava procurando o arquivo PDB usando o nome da pasta antiga. Eu acho que eles codificaram.

Encontrou o problema

Quando fiz o download e descompactei os arquivos WinUnit pela primeira vez, a pasta principal se chamava "WinUnit-1.2.0909.1". Depois de descompactar o arquivo, renomeei a pasta para "WinUnit", pois é mais fácil digitar durante a configuração do projeto do Visual Studio. Mas, aparentemente, isso quebrou a capacidade de encontrar o arquivo PDB, embora eu configurei tudo de acordo com a documentação do WinUnit.

Minha Correção

Mudei o nome da pasta de volta para o original e funciona.

Esquisito.

user2384458
fonte
0

Tive o mesmo problema aqui, mas uma solução diferente funcionou.

Primeiro, tentei o seguinte, nenhum dos quais funcionou:

  1. Carregar símbolos conforme sugerido por seanlitow

  2. Remover / adicionar referência a PresentationFramework e PresentationCore

  3. Reiniciar sistema

A solução foi desfazer as últimas alterações que fiz em meu código. Eu tinha acabado de adicionar alguns botões de opção e manipuladores de eventos para eventos marcados e não marcados. Depois de remover minhas alterações recentes, tudo compilado. Em seguida, adicionei minhas alterações exatas de volta e tudo compilado corretamente. Não entendo por que isso funcionou - a única coisa que consigo pensar é um problema com minha solução VS. De qualquer forma, se nenhuma das outras sugestões funcionar, você pode tentar reverter suas alterações mais recentes. OBSERVAÇÃO: se você fechar e abrir novamente o Visual Studio, seu histórico de desfazer será perdido ... então você pode tentar isso antes de fechar o VS.

Thomas Bailey
fonte