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

时间:2016-08-18 16:35:34

标签: debugging mono windbg

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

我知道我可以使用函数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中使用即时窗口

,实际上相同的功能
(char*)mono.dll!mono_pmip((void*)0x63a0630)
0x15ebf258 " Login.Login:OnClickLoginButton () + 0x4b (21FF75F8 21FF765C) [06E26E70 - Unity Root Domain]"

我还需要让它在Windbg中运行:(

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

1 个答案:

答案 0 :(得分:0)

我意识到我从未回答过这个问题。 (char *)mono.dll!mono_pmip((void *)address)仅在主线程上可用,所以我必须先从线程列表中选择主线程。