Como depurar projetos de bibliotecas de classes externas no visual studio?


137

Eu tenho um projeto (A) que faz referência a um assembly de uma biblioteca de classes de projeto externo (B) que está localizada em outra solução vs.

Ainda tenho que entender como eu posso depurar eficientemente a biblioteca de classes de B durante a execução do programa do projeto A. Existe algo que eu preciso habilitar no projeto B, como informações de depuração etc. para que eu possa entrar no momento da depuração de A?

Desde já, obrigado.

Respostas:


202

Tente desativar o Just My Code (JMC).

  • Ferramentas -> Opções -> Depurador
  • Desmarque a opção "Ativar apenas meu código"

Por padrão, o depurador tenta restringir a visão do mundo ao código que está contido apenas na sua solução. Às vezes, isso é realmente difícil, mas quando você deseja depurar código que não está na sua solução (como é a sua situação), precisa desativar o JMC para vê-lo. Caso contrário, o código será tratado como externo e em grande parte oculto da sua visualização.

EDITAR

Quando você quebrar seu código, tente o seguinte.

  • Depurar -> Windows -> Módulos
  • Encontre a DLL do projeto em que você está interessado
  • Clique com o botão direito do mouse -> Carregar símbolos -> selecione o caminho para o .PDB para seu outro projeto

2
a caixa de seleção específica já estava desmarcada. O que eu notei, porém, é que ele entra em um método da biblioteca externa, mas passa quando eu tento chamar um método que faz parte de uma interface.
21909 Konstantinos

Pode ser necessário acessar as propriedades de uma DLL e garantir que Copiar Local esteja definido como Verdadeiro. Caso contrário, os módulos não poderão encontrar o .pdb para sua referência.
Bryan Rayner

O Just My Code parece não fazer nenhuma diferença (eu posso pular para o código externo, mesmo com ele ativado), mas encontrar o módulo no depurador ajuda.
TheOperator 30/12/2015

3
Um arquivo de símbolo correspondente não foi encontrado nesta pasta.
Christine

1
Se você não possui arquivos PDB para um módulo referenciado, o ReSharper pode ser usado para descompilar binários usando a opção "Carregar símbolos com o ReSharper Deecompiler" no menu do botão direito do mouse em Debug / Windows / Modules. Muito poderoso.
Emilast

12

Isso me incomodou por algum tempo. O que costumo fazer é reconstruir minha biblioteca externa usando o modo de depuração e copiar os arquivos .dll e .pdb na lixeira do meu site. Isso me permite entrar no código da biblioteca.


10

Assuma o caminho de

Projeto A

C:\Projects\ProjectA

Projeto B

C:\Projects\ProjectB

e a dll do ProjectB está em

C:\Projects\ProjectB\bin\Debug\

Para depurar no ProjectBfrom ProjectA, faça o seguinte

  1. Copie Ba DLL com DLL .PDBpara o ProjectAdiretório de compilação.
  2. Agora depure ProjectA. Quando o código atingir a parte em que você precisa chamar o método ou os eventos da DLL, etc. durante a depuração, pressione F11para entrar no código da DLL.

NOTA: NÃO FAZER COPIAR O ARQUIVO .PDB


5

Eu corro duas instâncias do visual studio - uma para a dll externa e outra para o aplicativo principal.
Nas propriedades do projeto da dll externa, defina o seguinte:

Construir eventos:

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

Depurar:

  • Inicie o programa externo: C:\<path-to-main>\bin\debug\<AppName>.exe

  • Diretório de trabalho C:\<path-to-main>\bin\debug

Dessa forma, sempre que eu construo a dll externa, ela é atualizada no diretório do aplicativo principal. Se eu clicar em debug do projeto da dll externa - o aplicativo principal é executado, mas o depurador atinge apenas pontos de interrupção na dll externa. Se eu depurar o debug do projeto principal, o aplicativo principal será executado com a dll externa mais recente, mas agora o depurador atingirá apenas pontos de interrupção no projeto principal.

Percebo que um depurador fará o trabalho para ambos, mas acho mais fácil manter os dois corretos dessa maneira.


1

[de acordo com Martin Beckett, o cara que me enviou esta resposta]

Você pode depurar em uma biblioteca externa.

Na guia configurações do projeto, procure por 'diretórios do visual studio' no campo 'código-fonte' e inclua o caminho para as fontes openCV. Em seguida, verifique se os arquivos .pdb para cada uma das DLLs de depuração estão no mesmo diretório que a DLL.


0

Eu estava tendo um problema semelhante, pois meus pontos de interrupção no projeto (B) não estavam sendo atingidos. Minha solução foi reconstruir o projeto (B) e depois depurar o projeto (A), pois as DLLs precisavam ser atualizadas.

O Visual Studio deve permitir a depuração em uma biblioteca externa.


0

Referências NuGet

Suponha que as referências -Project_A (produz project_a.dll) -Project_B (produz project_b.dll) e Project_B ao Project_A pelos pacotes do NuGet, copiem apenas project_a.dll, project_a.pdb para a pasta Project_B / Packages. Com efeito, isso deve ser copiado para o / bin.

Agora depure o Project_A. Quando o código atingir a parte em que você precisa chamar o método ou os eventos da DLL, etc. durante a depuração, pressione F11 para entrar no código da DLL.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.