如何使用 Windbg 从堆栈中获取 Mono 函数的名称

How to get the name of a Mono function from a stack using Windbg

我正在尝试使用 WinDbg 调试单声道应用程序。应用程序挂在 WinDbg 无法在内部解码的 C# 代码中的无限循环中。

我知道我可以使用函数 mono_pmip() 将堆栈地址转换为函数名称

我正在使用 .call mono!mono_pmip(0x63a0630)(使用 x *!*pmip* 验证可用),但我仍然无法获得函数的输出,而是出现访问冲突。

这是堆栈:

34 018feee8 071824eb 0x71824eb
35 018fef08 07181f4c 0x71824eb
36 018fef28 0717fd8a 0x7181f4c
37 018fef68 071708ae 0x717fd8a
38 018fefc8 07170328 0x71708ae
39 018ff078 0716efa5 0x7170328
3a 018ff0e8 0716ed4c 0x716efa5
3b 018ff108 18de8f88 0x716ed4c
3c 018ff1b8 18de75ff 0x18de8f88
3d 018ff208 18de6f6f 0x18de75ff
3e 018ff238 18de660c 0x18de6f6f
3f 018ff2f8 18de60ce 0x18de660c
40 018ff328 18de6033 0x18de60ce
41 018ff348 18ddf586 0x18de6033
42 018ff3e8 18ddebc6 0x18ddf586
43 018ff408 18dde13e 0x18ddebc6
44 018ff418 063a0630 0x18dde13e
45 018ff450 100f1328 0x63a0630
46 018ff480 1005d984 mono!mono_jit_runtime_invoke+0x214 [c:\buildslave\mono\build\mono\mini\mini.c @ 4936]
47 018ff4a4 0035e9ce mono!mono_runtime_invoke+0x51 [c:\buildslave\mono\build\mono\metadata\object.c @ 2623]

如果我在 Visual Studio

中使用立即数 windows,同样的功能实际上有效
(char*)mono.dll!mono_pmip((void*)0x63a0630)
0x15ebf258 " Login.Login:OnClickLoginButton () + 0x4b (21FF75F8 21FF765C) [06E26E70 - Unity Root Domain]"

我仍然需要在 Windbg 中实现 运行:(

我想知道我是否必须在我要调试的调用堆栈的同一线程上执行调用。

我发现我从来没有回答过这个问题。 (char*)mono.dll!mono_pmip((void*)address) 仅在主线程上可用,因此我必须首先从线程列表中 select 主线程。