2009-01-22 21 views
11

Estoy trabajando con un framework de terceros, y el código es bastante malo, y estoy recibiendo excepciones que no puedo descifrar. Pude decompilar usando .NET Reflector, y ahora estoy tratando de depurar usando Deblector, pero ni siquiera puedo averiguar cómo obtener un conjunto de punto de interrupción. ¿Por qué no hay documentación para esta herramienta?Cómo usar Deblector?

No hay nada disponible sobre cómo usarlo. La ayuda incorporada simplemente da una lista de comandos, que entiendo muy bien, ya que son los comandos de depuración estándar ... pero no puedo encontrar la manera de hacerlo funcionar para poder pasar el código y necesito examinar variables también

He estado buscando en Google durante mucho tiempo y todo lo que puedo encontrar es blogs que dicen lo maravillosa que es esta herramienta. Bueno, estoy seguro de que sería genial si pudiera hacerlo funcionar. ¿Dónde está la documentación o cómo configuro un punto de interrupción?

Puedo hacer que se adjunte a mi proceso, pero no puedo pausar ni nada, y no se rompe cuando ocurre la excepción, aunque he activado esa opción.

En serio ... deberíamos hacer algo de documentación: los publicaré en algún lugar que Google pueda alcanzar.

Respuesta

8

Tal vez esto le ayudará a:

En primer lugar, estoy usando el DeblectorAddin-1,01-alfa a partir de (no sé si funciona así en versiones anteriores también) de http://www.codeplex.com/deblector.

Con esta versión, es bastante simple con el siguiente procedimiento:

  • asociar a un proceso

    • Con la un [ttach] comando en la línea de comandos: una <pid>.
    • Usando el botón de adjuntar en la barra de herramientas (ventana con un engranaje en ella).
  • Si la conexión fue un éxito (esto se ve en la consola, se activó con Herramientas-> Deblector) se deben cargar todos los ensamblados a los que se hace referencia.

  • Configuración de un punto de ruptura (que debe de haber detenido el programa para establecer un punto de ruptura):

    • Usando los b] [Reak comando: por ejemplo, b <Namespace.Class.Function> - hay más opciones disponibles use help b para eso.
    • Mucho más simple: utilice el botón Salir (o F9) y seleccione una fila en la vista Deblector IL.

notas de uso adicionales:

Deblector Commandline:
La línea de comandos no responderá si actualmente está conectado a un proceso en marcha, debe detenerse primero o no responderá correctamente.

Para plataformas de 64 bits:
La aplicación debe ser configurado para ejecutarse como aplicación de 32 bits o no puede estar unido a.

En Visual Studio: Proyecto -> Propiedades -> Construir objetivo Plataforma: x86

Con la herramientacorflags: Esto debe ser instalado con Visual Studio (utilizar el símbolo de Visual Studio).

To set 32-bit mode: corflags <ProgramName> /32BIT+ 
To unset it:  corflags <ProgramName> /32BIT- 

Para encontrar el ID del proceso y comprobar si un programa se ejecuta en modo de 32 o 64 bits:
Process Explorer es muy útil para eso.

+0

suficientemente bueno ... Yo finalmente a averiguarlo, pero me olvidé de esta pregunta. Tal vez sea útil para otros en el futuro. ¡Gracias! – Jasmine

+0

¿qué quiere decir con "debe haber detenido el programa para establecer un punto de ruptura"? ¿Cómo puedo detener un programa sin establecer un punto de interrupción? Es como decir "para establecer un punto de interrupción primero debe establecer un punto de interrupción"! –

+0

Puede detener un programa en la posición actual, el punto donde el programa "se rompe" está dondequiera que haya estado el puntero de instrucción en este momento. – Fionn

0

Ahora hay Reflector Pro, que hace precisamente eso. Descompila los ensamblados administrados a C# o VB.NET, y crea los PDB necesarios. Luego puede establecer puntos de interrupción e ingresar en cualquier ensamblaje administrado que desee.

http://www.red-gate.com/products/reflector/walkthrough.htm

+0

Sí, gracias Jason! Hemos estado usando eso, pero no encontramos que valga la pena pagarlo. Resulta que, ahora que hemos puesto en marcha nuestro sistema, los problemas realmente complicados se resuelven en su mayoría y no necesitamos depurar el código del proveedor con demasiada frecuencia. Pero es bueno saber que podemos – Jasmine