使用Windows调试工具调试.NET 2.0 Winforms应用程序

时间:2010-03-05 20:59:49

标签: .net winforms debugging remote-debugging

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

在过去,我们帮助客户重新安装.net框架,并且经常有效......但偶尔也不行。

在这种情况下,可以使用Windows Debugging Tools来确定问题的原因。如果是这样,你必须下载调试符号到目标计算机(想避免,因为这可能是几百MB的东西下载到目标。)

对于.net应用程序来说,这有点过分吗?任何替代品。你会如何调试这个。非特定的逐步将是值得赞赏的。当然,这个应用程序在目标机器上编译为RELEASE配置。客户很可能没有安装开发工具或调试工具。我们通常可以远程控制对计算机的访问。重新迭代。这种情况很快发生,因为客户试图运行应用程序并立即失败。

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

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

来源:.NET Runtime 2.0错误。 EventID:5000

提前致谢。

赛斯

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

编辑:刚刚看到“在启动时立即发生”。 Indeed WinDBG can help

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

特别是(小型)崩溃的应用程序转储可以通过SOS扩展进行非常好的分析。如果您的应用程序在发布或调试模式下编译并不重要,只要您在分析转储时获得匹配的符号文件(.PDB)。

那里有很多信息,在这个答案中有很多话要说,但你最好的选择是搜索“windbg sos”。

关于你给出的例子

  

EventType 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等)来计算未捕获异常的来源。

答案 2 :(得分:0)

我认为你不想要“Windows调试工具”。调试符号适用于OS,而不适用于.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甚至加载我的应用程序之前。

答案 3 :(得分:0)

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

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

赛斯