2

我们的 C# 应用程序在出现未处理的异常时调用 MinidumpWriteDump。

我从用户那里收到了一些故障转储,我似乎无法使用 SOS 打开故障转储并查看导致崩溃的异常。

我们采用的转储类型是MiniDumpWithPrivateReadWriteMemory

我将我的 _NT_SYMBOL_PATH 配置为使用 MS 公共符号服务器,并且在 WinDBG 中调试此故障转储时,它会自动下载所需的 DLL(因为此转储是在具有不同版本 .NET 2 的机器上进行的 - 即结束的那个0.3053)

运行时!线程我得到这个输出:

请求线程存储失败

我浏览了所有可能的站点,这些站点解释了处理不同版本的 CLR 的技术,而不是在转储机器中使用的技术,没有一个对我有用。

我该怎么做才能调试这些崩溃?

我们是否做错了什么(从 .NET 进程中获取错误类型的转储等)

编辑:

这是 ~* 的结果:

0:000> ~* 。0 Id:1338.258 暂停:0 Teb:7ffdf000 未冻结优先级:0 1 Id:1338.2a0 暂停:0 Teb:7ffde000 未冻结优先级:0 2 Id:1338.1fd4 暂停:0 Teb:7ffdd000 未冻结优先级:0 3 Id:1338 暂停。 : 0 Teb: 7ffda000 Unfrozen Priority: 0 4 Id: 1338.1148 Suspend: 0 Teb: 7ffd9000 Unfrozen Priority: 0 5 Id: 1338.b1c Suspend: 0 Teb: 7ffd7000 Unfrozen Priority: 0 6 Id: 1338.f94 Suspend: 0 Teb: 7ffd4000 解冻优先级:0 7 Id:1338.11b4 挂起:0 Teb:7ff4f000 解冻优先级:0 8 Id:1338.1814 挂起:0 Teb:7ff4e000 解冻优先级:0 9 Id:1338.1cc4 挂起:0 Teb:7ffdb1000 解冻优先级: ID:1338.1e48 暂停:0 Teb:7ffd5000 解冻优先级:0 11 Id:1338。

这是 !analyze -v 的结果:

分析

4

2 回答 2

2

WinDbg 可能加载了错误版本的 mscorwks DLL。尝试使用 .cordll -lp 明确告诉 WinDbg 它应该加载哪些 CLR 调试模块,另请参阅此博客文章:Issue Debugging Managed Code in WinDbg with SOS and PSSCOR2 (eg "Failed to request ThreadStore")

于 2011-08-10T14:27:13.717 回答
1

您需要更改传递给“MiniDumpWriteDump”的选项,确保它们包含此处提到的选项:What is minimum MINIDUMP_TYPE set to dump native C++ process that hosts .net component to be able to use !clrstack in windbg

于 2011-11-25T13:15:00.713 回答