当引发异常时,我为带有参数的 .NET 应用程序创建了一个小型转储
MiniDumpNormal | MiniDumpWithProcessThreadData | MiniDumpWithThreadInfo | MiniDumpWithUnloadedModules
这是提取托管调用堆栈所必需的(从What is minimum MINIDUMP_TYPE set to dump native C++ process that hosts .net component to be able to use !clrstack in windbg)。迷你转储生成在异常过滤器中执行,如此处所述
在 WinDBG 中的故障转储上执行!dumpstack
时,可以看到类似
ChildEBP RetAddr Caller,Callee
...
001dccc0 09b301a3 (MethodDesc 0x274268c +0x133 MyNameSpace.ErrorObject.FaultyMethod(Int32))
...
如果我没记错的话,这意味着错误是在方法 FaultyMethod 中的偏移量 0x133 处生成的,其中 0x133 是 JIT 编译的机器代码中的偏移量。
如何将此偏移量转换回源代码或 IL 行号以识别导致异常的指令?