【发布时间】:2015-01-29 23:02:53
【问题描述】:
我有一个托管在 64 位机器上的 32 位应用程序(针对 .NET 3.5)。我想分析这个 32 位应用程序的内存转储。我使用 32 位 adplus 和 cdb 捕获了内存转储。我正在将内存转储加载到 32 位 windbg 中。当我将 .net 2.0 sos.dll 和 .net 2.0 mscorwks.dll 加载到 windbg 并执行 !clrstack 时,我收到以下错误:“找不到运行时 DLL (mscorwks.dll),0x80004005 扩展命令需要 mscorwks.dll 才能有事可做。”我做错了什么?
cmets 中要求的信息
ADPlus 命令行:
adplus -hang -quiet -p 2440 -o C:\temp
WinDbg 命令:
0:000> .load <fullpathto>\sos.dll
0:000> lmvm mscorwks
start end module name
0:000> .exr -1
ExceptionAddress: 00000000
ExceptionCode: 80000007 (Wake debugger)
ExceptionFlags: 00000000
NumberParameters: 0
【问题讨论】:
-
这意味着在 target(转储)中找不到 mscorwks.dll。您不会将 mscorwks.dll 加载到调试器中。 “lmvm mscorwks”的输出是什么?您可能处于 .NET 3.5(仍使用 2.0 运行时)尚未在目标进程中初始化的情况。
-
我还应该问另一个问题。 “lmvm clr”的输出是什么?
-
您不需要将 mscorwks.dll 加载到 WinDbg 中。它在那里什么都不做。它应该加载到您的进程中(可能不是),而不是在调试器中。您使用哪个命令加载 SOS?您使用哪个命令来启动 AdPlus?您可能是初始断点的受害者。
.exr -1的输出显示了什么?请将该信息添加到问题中。 -
@Steve: lmvm 的输出 mscorwks: start end modulename
-
@thomas:>>您使用哪个命令加载 SOS?.load 后跟 sos dll 的位置。 >>您使用哪个命令来启动 AdPlus? adplus -hang -quiet -p 2440 -o C:\temp. > .exr -1 的输出显示什么? ExceptionAddress:00000000 ExceptionCode:80000007(唤醒调试器)ExceptionFlags:00000000 NumberParameters:0
标签: windbg asp.net-3.5 sos