感觉这可能有一个简单的答案,但我一直找不到。
有问题的场景是一个 C# .NET 控制台应用程序。
我通常使用 DebugDiag 1.2 来检查来自我们遇到的挂起的 .dmp 文件——通常是线程锁定问题。它们是使用 DebugDiag 的“创建完整用户转储”选项创建的。
我最近开始编译面向 .NET 4 的应用程序,为开始使用 .NET 4 的一些功能做准备。但是,我注意到在使用 DebugDiag 分析这些 .dmp 文件时,所有 .NET 堆栈信息都丢失了。
如果我将 CLR 目标更改回 .NET 3.5,并从新的可执行文件中捕获 .dmp,则 .NET 调用堆栈信息就在那里。
当我查看 DebugDiag 的输出时,我看到一条注释说:
CLR 信息
CLR 版本 = 4.0.30319.17929 CLR 调试器扩展 = C:\Program Files\DebugDiag\Exts\psscor4.dll
.NET 线程摘要
请求线程存储失败
我认为“请求线程存储失败”是问题的关键,因为 .NET 3.5 .DMP 文件(使用 psscor2.dll)报告了“线程摘要”标题下的所有线程信息。
.dmp 是否缺少信息,或者 DebugDiag 出于某种原因无法检索它?