2010-01-28 9 views
6

Estoy usando Visual Studio 2008 para rastrear un error en un proceso de ejecución. Me he unido al proceso e identificado el módulo de interés. (Sucede que los símbolos de depuración de este módulo se han cargado desde un archivo pdb). Deseo mostrar el código desmontado en la ventana Desarmado para poder decidir dónde establecer un punto de interrupción.Visual Studio 2008: Cómo ver el código desensamblado de una DLL que no se está ejecutando en este momento

Cuando rompo el proceso, el módulo que se está ejecutando se muestra en la ventana Desarmado. Lamentablemente, este no es el módulo de interés. No puedo encontrar la forma de mostrar el código del módulo de interés mientras no se está ejecutando.

Respuesta

5

Suponiendo que se está depurando un proceso no administrado ...

Cuando "Depuración/pausa del Juego", siga estos pasos:

Elija "Depuración/Windows/Módulos" para obtener una lista de todos cargados módulos. Debajo de la columna "Dirección" en la ventana de Módulos está el rango de memoria para ese módulo. En el cuadro "Dirección:" en la ventana de desmontaje, escriba la dirección de inicio del módulo (asegúrese de agregar 0x antes del número)

Ahora debe estar al principio del módulo con el que desea jugar . Si conoce la dirección de una función, puede saltar a esa dirección.

He aquí un ejemplo:

Run sol.exe asociar al proceso, y romper todo. Mira los módulos y encuentra "cards.dll", verás que se carga a 6fc10000 (en mi máquina, de todos modos).

Escriba esa dirección (0x6fc10000) en la ventana de desmontaje y lo llevará al inicio del módulo.

Ahora digo que realmente quiero saltar a una función. Abra la DLL en Dependency Walker (depends.exe) para obtener las compensaciones de las funciones. En mi ejemplo, quiero establecer un punto de interrupción en la función "cdInit". En Dependecny Walker, muestra que el desplazamiento a la función exportada cdInit es 0x000013e6. Para llegar a esa función, agregaría la dirección de inicio del módulo (0x6fc10000) al desplazamiento (0x000013e6) para obtener 0x6fc113e6.

Escribir esta dirección en el cuadro de desmontaje me lleva directamente al inicio de esa función.

0

¿Has probado a utilizar el reflector .Net? Puede obtener todo el código de su archivo DLL y posiblemente incluso recompilarlo con los mensajes de depuración. Es gratis:

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

Saludos

+0

ese trabajo con el DLL de código nativo? –

+0

Desafortunadamente no, el reflector solo funciona con código administrado (.Net). Ya no es gratuito tampoco :) –

1

Haciendo cosas como esta es ahora más fácil en WinDbg

uf cards!cdInit 
+0

Pero él está preguntando cómo hacerlo en Visual Studio 2008 ... – GalacticJello

+0

Estoy diciendo que está usando la herramienta incorrecta para el trabajo. Y no es que tenga que pagar extra por WinDbg, es gratis, cada desarrollador debe tenerlo instalado –

Cuestiones relacionadas