2008-12-08 16 views
13

Estoy usando una DLL de terceros. Para algunos casos particulares, una función en el DLL lanza una excepción. ¿Es posible depurar la DLL en Visual Studio?Depuración de una DLL de terceros en Visual Studio?

Después de the answer from Andrew Rollings, puedo ver el código, pero ¿hay alguna manera fácil de depurar el código en Visual Studio?

+1

Sí, extraiga el código en archivos, agréguelos a un proyecto dll y vuelva a compilar el dll. Agregue este proyecto a su solución y cambie las referencias para apuntar a ese proyecto. Entonces debería poder depurarlo. –

+0

Tengo un problema similar. Todas las fuentes me pertenecen, pero no puedo agregarlas al proyecto de referencia. Hay más de 20 proyectos involucrados ... Y ninguna de las soluciones a continuación realmente ayuda – TimothyP

Respuesta

15

Si el archivo DLL está en un idioma .NET, puede descompilarlo usando una herramienta como .NET Reflector y luego depurar el código fuente.

O podría preguntar al proveedor si el código fuente está disponible. Esa es probablemente la forma más fácil.

+0

Es .Net dll y tengo un reflector, déjame intentar hacer esto. Gracias. – Biswanath

+2

NET Reflector 6 incluye un Complemento de Visual Studio que le permite usar la depuración paso a paso de Visual Studio en ensamblajes para los que no tiene el código fuente. –

5

Basándose en la respuesta de Andrew, usted solo trata el código fuente descompilado como una nueva biblioteca dentro de su proyecto y establece los puntos de corte en la fuente. Elimine todas las referencias a la DLL de terceros para que se ejecute el código decompilado.

Otras cosas:

  • Puede estar infringiendo la ley por la descompilación del código, o violar un acuerdo de licencia con el proveedor de tercera parte. Asegúrate de revisar esto con alguien.
  • Querrá asegurarse de eliminar las referencias a su versión descompilada si está enviando a otros desarrolladores, o consultar un árbol fuente más grande. ¡Fácil de olvidar esto!
+3

+1 para aumentar la conciencia sobre la posibilidad de infringir las leyes o incumplir los acuerdos de licencia – JeffH

0

Pensé que .NET Reflector tenía algunos plugins de depuración. Esa sería una idea mucho mejor porque el código de descompilación y recompilación generalmente falla, y necesita hacer muchos cambios en el código para solucionarlo.

Prueba el depurador .NET Reflector. Puede ser que te ayude mucho.

3

Hay dos métodos que he encontrado:

1) Acceso al proyecto DLL desde el uso de proyecto. Esto implica construir la DLL en una instancia separada de Visual Studio y luego acceder a la DLL a través de un proyecto diferente en Visual Studio (esto supone que tiene el código fuente). Hay varias maneras de lograr esto:

  • Puede añadir Trace.WriteLine declaraciones en la DLL que mostrará en la ventana 'Salida' en Visual Studio.
  • Puede agregar declaraciones System.Diagnostics.Debugger.Break() al código DLL. Cuando ejecuta el proyecto de llamada en Visual Studio, la ejecución del programa se detendrá allí. Desde aquí se puede agregar un acceso a la pila llamada (incluyendo todas las funciones llamadas en sí DLL) y el descanso entre sets puntos (aunque el icono de el punto de interrupción aparecerá deshabilitado y el texto vuelo estacionario para el punto de ruptura leerá " El punto de interrupción no se activará. No se han cargado los símbolos para este documento ").
  • Si el archivo DLL es lanzar una excepción (que se puede ver en la ventana 'Salida' si la excepción se detecta y gestiona por la DLL) puede indicar a Visual Studio para romper siempre cuando ese tipo de excepción es arrojado. Hit Ctrl +Alt +E, encontrar el tipo de excepción ser lanzado, y haga clic en la columna 'Throw' para que excepción. Desde aquí es exactamente como si hubiera usado System.Diagnostics.Debugger.Break() (vea arriba).

2) Adjuntar un proceso de uso al proyecto DLL. Esto implicó conectar el depurador de Visual Studio a un proceso en ejecución.

  • Abra el proyecto DLL en Visual Studio.
  • Ejecutar una aplicación que utiliza el archivo DLL ( esta aplicación no se puede ejecutar desde otra instancia de Visual Studio ya que el proceso ya tendrá un depurador unido a él).
  • Desde aquí puede agregar puntos de interrupción y recorrer el código DLL cargado en Visual Studio (aunque el punto de interrupción aparecerá deshabilitado igual que en el método 1).
+0

Gracias por la edición @Peter, mucho mejor ahora. –

3

algo que ha funcionado para mí con la depuración de un par de librerías de terceros, así como .NET sí es WinDbg. Es un asombroso depurador de Microsoft que he utilizado para solucionar algunos problemas persistentes que se estaban produciendo en el marco.

Necesita utilizar las extensiones Son of Strike (SOS) si se trata de una DLL administrada. Puede depurar nativo también. Necesitará saber un poco acerca de las instrucciones de montaje/CIL assemblystations para ser bueno en su uso. Debería poder determinar la excepción y lo que la está causando. Hemos utilizado WinDbg/SOS para encontrar, por ejemplo, que en HttpWebResponse, si está utilizando compresión Gzip para descargar una página y el servidor devuelve un encabezado Gzip incorrecto, .NET ejecuta la descompresión en el grupo de hilos y un bloqueo eliminará su proceso. Feliz depuración.

+0

Creo que esta solución podría ser excesiva para la pregunta de OP, pero es realmente beneficiosa para errores graves como pérdidas de memoria, bloqueos aleatorios en IIS, etc. buena respuesta, de todos modos, solo unos pocos de nosotros usamos esto en estos días lol – sotn

0

.NET Reflector 6 viene con un complemento de Visual Studio que le permite usar la eliminación de fallas paso a paso de Visual Studio en ensamblajes para los que no tiene el código fuente.

Tener un vistazo a esta entrada del blog:

http://www.simple-talk.com/community/blogs/alex/archive/2009/09/22/74919.aspx para más detalles.

Todavía es una compilación muy temprana. Así que no hay garantía de que funcione, y podría romper la configuración de tu estudio visual o la configuración del proyecto. Asegúrese de tener copias de seguridad (o control de fuente) para cualquier proyecto en el que use esto.

Descargar aquí: http://www.red-gate.com/MessageBoard/viewforum.php?f=109

Cuestiones relacionadas