3

我支持一个相当广泛部署的 .NET 2.0 Winforms 应用程序。在极少数情况下,我们会收到客户的支持电话,其中应用程序在您尝试启动应用程序时立即返回 .NET 运行时异常。

过去,我们帮助客户重新安装了 .net 框架,并且经常可以正常工作……但有时不会。

在这种情况下,可以使用Windows 调试工具来确定问题的原因。如果是这样,您是否必须将调试符号下载到目标计算机(要避免,因为下载到目标可能需要数百 MB 的东西。)

这对于 .net 应用程序来说是不是有点矫枉过正?任何替代方案。你将如何调试这个。非特定的一步一步将不胜感激。当然,这个应用程序在目标机器上编译为 RELEASE 配置。客户很可能没有安装开发工具或调试工具。我们通常可以远程控制计算机。重新迭代。一旦客户尝试运行该应用程序并且它立即失败,就会发生这种情况。

为客户解决此问题的最快途径是什么?

以下是事件日志中最近发生的错误示例。
事件类型 clr20r3。.exe P2 2010.1.0.0, p3 4B857AFD P4 BLAH BLAH system.invalidoperation, P10 NIL。

来源:.NET 运行时 2.0 错误。事件ID:5000

提前致谢。

赛斯

4

4 回答 4

6

为什么不使用它?

对于客户的机器,您将无法进行远程调试。因此,建议捕获用于崩溃的崩溃转储和用于挂起问题的挂起转储,WinDbg 或 ADPlus.exe 在这里非常有用。

让您的最终用户在 WinDbg 中启动您的应用程序,然后执行

.dump /f path

保存崩溃转储,然后您可以请求转储文件并分析崩溃。

在目标机器上,不需要符号。当您在自己的机器上分析故障转储时,符号很有用,而这正是 SOS 之类的东西很有用的地方。

当然还有其他方法可以获得故障转储,

http://blogs.msdn.com/lexli/archive/2009/08/23/when-the-application-program-crashes-on-windows.aspx

于 2010-03-06T09:45:34.080 回答
2

编辑:刚刚看到“启动时立即发生”。确实 WinDBG 可以提供帮助

虽然 Windows 调试工具确实主要用于本地应用程序,但它们对于托管应用程序也很有用。不仅托管应用程序在执行时最终是“本地的”,而且还有特别是 WinDBG 或 CDB 的SOS 扩展(如果您更喜欢命令行)。

使用 SOS 扩展可以很好地分析崩溃应用程序的(小型)转储。如果您的应用程序是在发布或调试模式下编译的,这并不重要,只要您在分析转储时手头有匹配的符号文件 (.PDB)。

那里有很多信息,在这个答案中可以谈论很多,但最好的选择是搜索“windbg sos”。

关于你给出的例子

事件类型 clr20r3。.exe P2 2010.1.0.0, p3 4B857AFD P4 BLAH BLAH system.invalidoperation, P10 NIL。

它可能是别的东西,但对我来说,它看起来像是 .NET 应用程序中未捕获的异常——在本例中为 System.InvalidOperationException。

如果您可以获得崩溃应用程序的小型转储(查看ADPlus工具,它是调试工具的一部分,以“按需”或“按事件”获取转储),那么您可以将其加载到 WinDBG 并使用 SOS 扩展(命令 !clrstack、!dumpstack、!threads 等)来确定未捕获的异常来自何处。

于 2010-03-06T09:38:18.230 回答
0

我认为您不需要“Windows 调试工具”。调试符号适用于操作系统,而不是 .NET Framework。(提醒,您的 Windows.Forms 应用程序位于 .NET Framework 中,而不是操作系统中。)

http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx上的“远程调试”有帮助吗?

我通常包含一个“StopSwitch”,但这不是启用 JIT 的要求。(请参阅http://missico.spaces.live.com/blog/cns!7178D2C79BA0A7E3!309.entry上的“StopSwitch 停止执行即时调试” )这允许我启用开关然后附加到正在运行的应用程序当它遇到调试器停止语句时。

您可以调试“发布”版本。发布 pdb 有助于堆栈跟踪。

我以前遇到过这个问题。我启用了 StopSwitch,检查是第一行,但没有启动 JIT,因为问题发生在 .NET Framework 甚至加载我的应用程序之前。

于 2010-03-05T22:38:49.020 回答
0

我写了一篇博客文章,其中包含一些分步说明以及有用的 URL。

http://www.spearsofttech.com/2010/03/09/how-to-use-debugging-tools-for-windows-to-debug-a-net-application/

赛斯

于 2010-03-09T19:59:31.010 回答