C# DebugDiag未在.NET 4下显示.NET堆栈信息

C# DebugDiag未在.NET 4下显示.NET堆栈信息,c#,.net,debugdiag,C#,.net,Debugdiag,感觉可能有一个简单的答案,但我一直没能找到 所讨论的场景是一个C#.NET控制台应用程序 我通常使用DebugDiag 1.2来检查来自我们遇到的挂起(通常是线程锁定问题)的.dmp文件。它们是使用DebugDiag的“createfulluserdump”选项创建的 我最近开始编译针对.NET4的应用程序,为开始使用.NET4的一些功能做准备。但是,我注意到在使用DebugDiag分析这些.dmp文件时,所有.NET堆栈信息都丢失了 如果我将CLR目标更改回.NET 3.5,并从新的可执行文件

感觉可能有一个简单的答案,但我一直没能找到

所讨论的场景是一个C#.NET控制台应用程序

我通常使用DebugDiag 1.2来检查来自我们遇到的挂起(通常是线程锁定问题)的.dmp文件。它们是使用DebugDiag的“createfulluserdump”选项创建的

我最近开始编译针对.NET4的应用程序,为开始使用.NET4的一些功能做准备。但是,我注意到在使用DebugDiag分析这些.dmp文件时,所有.NET堆栈信息都丢失了

如果我将CLR目标更改回.NET 3.5,并从新的可执行文件中捕获.dmp,.NET调用堆栈信息就在那里

当我查看DebugDiag的输出时,我看到一个注释:

CLR信息

CLR版本=4.0.30319.17929 CLR调试器扩展名=C:\Program 文件\DebugDiag\Exts\psscor4.dll

.NET线程摘要

无法请求线程存储

我认为“请求线程存储失败”是问题的关键,因为.NET 3.5.DMP文件(使用psscor2.dll)在“线程摘要”标题下报告所有线程信息


问题在于.dmp缺少信息,或者DebugDiag由于某种原因无法检索到它?

假设您正在进行完全转储,这可能与它如何共同定位sos有关。在3.5下,它将使用mscorlib进行共定位,而在CLR 4下,它将使用CLR进行共定位。这将取决于编写debugdiag的人是否能够容忍CLR 4。

我面临同样的问题,对我来说,它帮助我从debugdiag的子目录“exts”中删除了psscor4.dll

在DebugDiag报告中,我的CLR运行时列表现在显示为:

CLR Information

CLR version = 4.0.30319.18052

CLR Debugger Extension = C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll

PS:请注意使用正确版本的DebugDiag(32位与64位)。

最终,这个问题自行解决了。我向微软提出了一个问题,他们说DebugDiag 1.1不支持.NET 4+。不久前,他们发布了v1.2,该版本再次发挥了魅力:


相似但不同的可能重复。另一个问题的解决方案是“minidump类型必须是MiniDumpWithFullMemory”。OP说这是一个完整的内存转储,在.NET3.5中运行正常。杰克:你找到解决方案了吗?我创建了这个线程,它可能与: