visual studio proyecto para modo este depurar depuracion debug configuracion compilar compilacion cambie c# visual-studio-2008 debugging pdb-files

c# - studio - Depuración de una versión de lanzamiento de una DLL(con archivo PDB)



release mode visual studio (4)

El pdb generalmente se detecta (al menos para mí) si está al lado del dll (como con los archivos xml de intellisense).

Alternativamente; necesitarás un punto de quiebre después de que el módulo se haya cargado ...

En el punto de interrupción, abra la ventana "Módulos" (Ctrl + D, M - o Depuración-> Windows-> Módulos). Haga clic derecho en su dll "Load symbols from", "Symbol path", etc.

Si tengo una DLL (que se creó en modo de lanzamiento) y el archivo PDB correspondiente, ¿es posible depurar (entrar) en las clases / métodos contenidos en esa DLL?

Si es así, ¿cuáles son los pasos / configuración requeridos (por ejemplo, dónde colocar el archivo PDB)?

Editar:

Si tiene el archivo PDB en el mismo lugar que el archivo DLL (en el directorio bin / debug de una aplicación de prueba de consola simple). Puedo ver que los símbolos de la DLL están cargados (en la ventana de Salida y también en la ventana de Módulos), pero aún no puedo entrar en los métodos de esa DLL.

¿Podría ser este el resultado de las optimizaciones del compilador (como lo describe Michael en su respuesta)?


La depuración de una versión de lanzamiento suele ser mucho más difícil que la depuración de una versión de depuración. En general, necesitará cierta comprensión del ensamblador x86 y probablemente pasará algún tiempo mirando la ventana de desensamblaje. Esto tiende a ser la única forma de descubrir en qué línea de código está realmente puesto, ya que en una compilación de lanzamiento con optimizaciones en el compilador puede hacer una importante reordenación y reordenamiento de instrucciones. Además, encuentro que el depurador con frecuencia no informa correctamente los valores de las variables. Si necesita conocer el valor de una variable y no está seguro de que el depurador sea correcto, vaya a la ventana de desensamblaje y busque la ubicación de la memoria o regístrela en la que se encuentra.

Los archivos pdb se pueden almacenar en un servidor de símbolos. Consulte Configuración de un servidor de símbolos para obtener un buen tutorial. Cada producto que creamos en una máquina de compilación publica los símbolos en nuestro servidor de símbolos, por lo que siempre podemos depurar los volcados de emergencia que recibimos de WinQual.


Finalmente encontré la causa de los problemas de depuración de una DLL que se creó en la configuración de lanzamiento:

En primer lugar, básicamente funciona como se esperaba. Lo que significa que si tengo una DLL integrada en la configuración de lanzamiento más el correspondiente archivo PDB, entonces puedo depurar las clases / métodos contenidos en esa DLL.

Cuando probé esto por primera vez, desafortunadamente intenté entrar en los métodos de una clase que tiene DebuggerStepThroughAttribute , por ejemplo:

[System.Diagnostics.DebuggerStepThrough] public class MyClass { public void Test() { ... } }

En ese caso, por supuesto no es posible ingresar al método desde el depurador (como se esperaba / pretendía).

Entonces todo funciona según lo previsto. Muchas gracias por sus respuestas.


Sí, puede depurar código de lanzamiento con un PDB. Sin embargo, hay algunos inconvenientes con la depuración del código optimizado, más información aquí y aquí .

Su PDB solo necesita estar en un lugar que el depurador pueda encontrar, para la depuración local del mismo directorio, ya que el dll generalmente es más fácil. De lo contrario, colóquelo en un lugar donde el depurador pueda encontrarlo y dirija el depurador a ese lugar con la ruta del símbolo.