1

我用 C# (.NET 4.0) 编写了一个程序,并用 C# Express 的发布助手分发它。

它适用于我的大多数用户,但只有一个用户。在安装时,他收到我的应用程序已停止工作的错误。所以他给我发了这个错误的 mdmp 文件,这样我就可以评估它以获得错误。

问题是,我不知道该怎么做。我查看了一些 WINDBG 的教程并尝试使用它们,但它们没有帮助。

我也试过这个话题。但我无法访问把手。

有什么办法可以评估这个文件,以便找出那个错误?

4

2 回答 2

1

您可能需要执行完整(用户模式)转储,以便捕获句柄表的状态,因此您可以使用 WinDBG 等进行事后分析。

这里的区别说明:

如果您安装了 WinDBG 并且发生了崩溃,您可以使用 WinDBG 命令创建包含更多信息的转储文件,例如使用“h”选项在小型转储中包含“处理”信息。

或者,您可以使用对客户更友好的 DebugDiagnostics 1.2 工具……您可以创建完整的用户转储。


如果您想查看 .NET 堆栈帧并查看转储中捕获的​​其他 NET 运行时状态,则需要加载 SOS.DLL(Son of Strike)以访问转储中的信息...。它是 WinDBG 扩展当安装在机器上时,它与 .NET 框架一起分发。

正如所指出的,您需要加载与最初调试的机器上相同版本的 mscordacwks.dll(NET2)/cor.dll (NET4) 和 sos.dll……这可能会很痛苦。

有一个解决方案...如果您将 WinDBG 设置为指向 Microsoft 符号服务器,即:

那么理论上,与目标机器上使用的 NET 版本匹配的 mscordacwks.dll/cor.dll,如果它在你的机器上还没有,将从符号服务器下载。

或者,您可以通过使用 PSSCOR 来避免所有这些恶作剧……它与特定的 mscordacwks/cor.dll 版本没有紧密绑定。

加载 PSSCOR2 (NET 2) 或 PSSCOR4 (NET 4) 扩展...取决于您的应用程序运行的 NET 框架版本.....PSSCOR 是 SOS 的超集。在您的情况下,您想要加载 PSSCOR4(忘记常规的 SOS)。

于 2014-02-12T11:56:22.283 回答
0

您可以从配置为创建本地转储的 Windows 错误报告 (WER)中受益。正如其他人已经说过的,您需要一个完整的 .NET 转储。

请注意,这可能是数百 MB,而不是 .MDMP 文件的 1 MB。您需要说明如何将其发送给您。

如果您有转储,则不一定需要 WinDbg。您还可以在 Visual Studio 中打开转储(但不确定是否适用于 Express 版本)。如果您可以在 Visual Studio 中打开它,那可能对您来说更方便。

请注意,对于 WinDbg,您还需要来自目标计算机的文件mscordacwks.dllSOS.dll除非它与您拥有的版本完全相同。由于 SXS 功能,它们可以在不同的地方。也许最好把它们都搞定。只是为了你,我已经初步发布了Mscordacwks 收集器。

作为 WinDbg 的起点,以下命令应该会有所帮助:

*** configure symbols to be downloaded from Microsoft
.symfix c:\symbols
*** Reload anything which has been loaded so far
.reload
*** Load the .NET extension, because WinDbg itself is native only
.loadby sos clr
*** Or, if the version is different to your system
.load c:\filesfromcustomer\sos.dll
*** Print exception information
!pe
*** Get the callstack
!clrstack
于 2014-02-12T13:27:15.143 回答