¿Cómo depurar proyectos de biblioteca de clases externas en Visual Studio?

137

Tengo un proyecto (A) que hace referencia a un ensamblaje de una biblioteca de clase de proyecto externo (B) que se encuentra en otra solución vs.

Todavía tengo que entender cómo puedo depurar eficientemente la biblioteca de clases desde B mientras ejecuto el programa desde el proyecto A. ¿Hay algo que deba habilitar en el proyecto B, como información de depuración, etc. para poder ingresar en el momento de depuración desde A?

Gracias por adelantado.

Konstantinos
fuente

Respuestas:

202

Intente deshabilitar Just My Code (JMC).

  • Herramientas -> Opciones -> Depurador
  • Desmarca "Habilitar solo mi código"

De forma predeterminada, el depurador intenta restringir la visión del mundo a un código que solo está contenido en su solución. Esto es muy útil a veces, pero cuando desea depurar el código que no está en su solución (como es su situación) necesita deshabilitar JMC para verlo. De lo contrario, el código será tratado como externo y en gran parte oculto a su vista.

EDITAR

Cuando no tenga su código intente lo siguiente.

  • Depuración -> Windows -> Módulos
  • Encuentre la DLL para el proyecto que le interesa
  • Haga clic derecho -> Cargar símbolos -> Seleccione la ruta al .PDB para su otro proyecto
JaredPar
fuente
2
la casilla de verificación específica ya no estaba marcada. Sin embargo, lo que noté es que entra en un método de la biblioteca externa, pero se detiene cuando intento llamar a un método que es parte de una interfaz.
Konstantinos
Es posible que deba ir a las propiedades de un archivo DLL y asegurarse de que Copy Local esté configurado en True. De lo contrario, los módulos no podrán encontrar el .pdb para su referencia.
Bryan Rayner
Just My Code no parece hacer ninguna diferencia (puedo saltar al código externo incluso con él habilitado), pero encontrar el módulo en el depurador ayuda.
TheOperator
3
No se encontró un archivo de símbolo coincidente en esta carpeta.
Christine
1
Si no tiene archivos PDB para un módulo al que se hace referencia, ReSharper se puede usar para descompilar archivos binarios usando la opción "Cargar símbolos con el descompilador ReSharper" en el menú del botón derecho en Depurar / Windows / Módulos. muy poderoso.
Emilast
12

Esto me ha molestado por algún tiempo. Lo que generalmente termino haciendo es reconstruir mi biblioteca externa usando el modo de depuración, luego copiar los archivos .dll y .pdb al contenedor de mi sitio web. Esto me permite entrar en el código de la biblioteca.

TheGateKeeper
fuente
10

Asume el camino de

Proyecto A

C:\Projects\ProjectA

Proyecto B

C:\Projects\ProjectB

y el dll de ProjectB está en

C:\Projects\ProjectB\bin\Debug\

Para depurar ProjectBdesde ProjectA, haga lo siguiente

  1. Copie Bdll con dll .PDBen el ProjectAdirectorio de compilación de.
  2. Ahora depurar ProjectA. Cuando el código llega a la parte en la que necesita llamar al método o los eventos de dll, etc. durante la depuración, presione F11para ingresar al código de dll.

NOTA: NO TE PIERDAS COPIAR EL ARCHIVO .PDB

Sarath Avanavu
fuente
5

Ejecuto dos instancias de Visual Studio: una para el dll externo y otra para la aplicación principal.
En las propiedades del proyecto de la dll externa, establezca lo siguiente:

Crear 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:

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

  • Directorio de trabajo C:\<path-to-main>\bin\debug

De esta manera, cada vez que construyo el dll externo, se actualiza en el directorio principal de la aplicación. Si presiono depurar desde el proyecto del dll externo, la aplicación principal se ejecuta, pero el depurador solo alcanza los puntos de interrupción en el dll externo. Si llego a depurar desde el proyecto principal, la aplicación principal se ejecuta con el dll externo construido más recientemente, pero ahora el depurador solo alcanza los puntos de interrupción en el proyecto principal.

Me doy cuenta de que un depurador hará el trabajo para ambos, pero me resulta más fácil mantener los dos en línea de esta manera.

MatrixManAtYrService
fuente
1

[según Martin Beckett, el tipo que me envió esta respuesta]

Puede depurar en una biblioteca externa.

En la pestaña de configuración del proyecto, busque 'directorios de estudio visual' en el campo 'código fuente' e incluya la ruta a las fuentes de openCV. Luego, asegúrese de que los archivos .pdb para cada dll de depuración estén en el mismo directorio que el dll.

Triples
fuente
0

Estaba teniendo un problema similar porque mis puntos de interrupción en el proyecto (B) no estaban siendo alcanzados. Mi solución fue reconstruir el proyecto (B) y luego depurar el proyecto (A) ya que los dlls debían actualizarse.

Visual Studio debería permitirle depurar en una biblioteca externa.

Stefan Mitic
fuente
0

Referencias NuGet

Suponga que las referencias -Project_A (produce project_a.dll) -Project_B (produce project_b.dll) y Project_B a Project_A mediante paquetes NuGet, simplemente copie project_a.dll, project_a.pdb a la carpeta Project_B / Packages. En efecto, eso debería copiarse en / bin.

Ahora depure Project_A. Cuando el código llega a la parte en la que necesita llamar al método o los eventos de dll, etc. durante la depuración, presione F11 para ingresar al código de dll.

jasmintmp
fuente