Pregunta

Ejecuté kd por error y obtuve algunos resultados que me interesaron, una referencia a una línea de código en mi módulo que no puedo ver en la pila de llamadas de ningún hilo. ¿Las líneas no fueron el comienzo del método, así que no creo que la referencia sea a un puntero de función, pero posiblemente el resultado de una excepción se almacena en la memoria? Por supuesto, eso es lo que estoy buscando ...

Actualización:

El seguimiento de la pila de la excepción es:

0:000> kb
   *** Stack trace for last set context - .thread/.cxr resets it
ChildEBP RetAddr  Args to Child              
0174f168 734ea84f 2cb9e950 00000000 2cb9e950 kernel32!LoadTimeZoneInformation+0x2b
0174f1c4 734ead92 00000022 00000001 000685d0 msvbvm60!    RUN_INSTMGR::ExecuteInitTerm+0x178
0174f1f8 734ea9ee 00000000 0000002f 2dbc2abc msvbvm60!    RUN_INSTMGR::CreateObjInstanceWithParts+0x1e4
0174f278 7350414e 2cb9e96c 00000000 0174f2f0 msvbvm60!    RUN_INSTMGR::CreateObjInstance+0x14d
0174f2e4 734fa071 00000000 2cb9e96c 0174f2fc msvbvm60!RcmConstructObjectInstance+0x75
0174f31c 00976ef1 2cb9e950 00591bc0 0174fddc msvbvm60!__vbaNew+0x21

y en nuestro código (crear una nueva clase derivada de Formulario)

la salida de dds:

0:000> dds esp-0x40 esp+0x100
0174f05c  00000000
0174f060  00000000
0174f064  00000000
0174f068  00000000
0174f06c  00000000
0174f070  00000000
0174f074  00000000
0174f078  00000000
0174f07c  00000000
0174f080  00000000
0174f084  00000000
0174f088  00000000
0174f08c  00000000
0174f090  00000000
0174f094  00000000
0174f098  00000000
0174f09c  007f4f9b ourDll!formDerivedClass::Form_Initialize+0x10b [C:\Buildbox\formDerivedClass.frm @ 1452]

etc.

que parece indicar que se está llamando a Initialize a pesar de que no está en el seguimiento de la pila ni de esta excepción ni de ninguno de los hilos. Como se sugirió, podría ser una falta de coincidencia entre pdbs y dlls, pero parece una coincidencia que terminemos en las clases y métodos correctos

¿Fue útil?

Solución

Kd significa "volcado de pila". De la documentación:

  

El comando kd muestra la pila sin procesar   datos. Cada valor DWORD se muestra en   Una línea separada. La información del símbolo es   mostrado para esas líneas juntas   con símbolos asociados Este formato   crea una lista más detallada que la   otros k * comandos. El comando kd es   equivalente a un dds (memoria de pantalla)   comando que usa la dirección de pila como   su parámetro.

Intente .hh para obtener la ayuda del depurador desde ntsd / windbg.

Consulte también & d; dds esp-0x40 esp + 0x80 "

Otros consejos

Disculpe, pero parece que realmente ejecutó el " kb " comando: con una "B", no una "D". Eso es lo que aparece en la sesión anterior, y los ejemplos en http://www.debuginfo.com/ artículos / easywindbg.html ciertamente parecen producir resultados similares ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top