我错误地运行了kd并获得了一些对我感兴趣的输出,这是对我的模块中的一行代码的引用,我在任何线程的调用堆栈上都看不到。这些行不是方法的开头,所以我不认为引用是一个函数指针,但可能是异常的结果存储在内存中???当然,这恰好是我正在寻找的......
更新
异常的堆栈跟踪是:
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
并进入我们的代码(创建一个新的Form派生类)
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]
等
这似乎表明正在调用Initialize,即使它不在此异常或任何线程的堆栈跟踪上。正如所建议的那样,它可能都是pdbs和dll之间的不匹配,但似乎巧合的是我们最终选择了正确的类和方法
答案 0 :(得分:1)
Kd代表“堆栈转储”。来自文档:
kd命令显示原始堆栈 数据。每个DWORD值都显示在上面 一条单独的线。符号信息是 显示这些行在一起 与相关的符号。这种格式 创建比列表更详细的列表 其他k *命令。 kd命令是 相当于dds(显示内存) 使用堆栈地址的命令 它的参数。
尝试.hh从ntsd / windbg内部获取调试器帮助。
另见“dds esp-0x40 esp + 0x80”
答案 1 :(得分:0)
对不起,但看起来有点像你实际上运行了“kb”命令 - 用“B”而不是“D”。这就是上面的会话中出现的内容,http://www.debuginfo.com/articles/easywindbg.html上的示例肯定会产生类似的输出......