无法捕获的.NET运行时2.0错误 - 用户机器 - 下一步是什么?

时间:2010-10-18 21:27:08

标签: .net exception deployment

情况:

我有一个广泛使用http连接的应用程序(流式传输应用程序),它应该全天候工作。确实如此。

然而,偶尔会出现因任何地方未被捕获的运行时错误而崩溃,并在事件日志之后转储:

Event Type: Error
Event Source:   .NET Runtime 2.0 Error Reporting
Event Category: None
Event ID:   5000
Date:       13.10.2010
Time:       11:02:30
User:       N/A
Computer:   STREAM01
Description:
EventType clr20r3, P1 streamsink.exe, P2 1.0.0.42484, P3 4c880fd9, P4 mscorlib, P5 2.0.0.0, P6 4add54dc, P7 344a, P8 21c, P9 system.io.ioexception, P10 NIL.

我的问题是:如何知道导致崩溃的代码行。我正在使用二进制文件部署.PDB,但是......怎么做?

目标是WIndows XP,Framework是2.0

编辑:

我已经实现了这个:

    static public void InitializeExceptionHandler(string AppName) {
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.UnhandledException+=new UnhandledExceptionEventHandler(currentDomain_UnhandledException);
        _appName=AppName;
    }

不,它不起作用!

4 个答案:

答案 0 :(得分:4)

在入口点(Main()或...)中注册当前域的未处理异常:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

在处理程序中实现日志记录:

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            // log
        }

应用程序仍会崩溃,但您将获得发生的事件和堆栈跟踪的完整记录。

<强>更新

根据您的更新,我建议您下载Windows http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx的调试工具,然后启用事后调试并确保创建故障转储(请参阅Windbg帮助文件中的启用事后调试部分) 并使用Windbg调试转储以找出崩溃的位置。

答案 1 :(得分:3)

也许这篇文章会有用A Simple Class to Catch Unhandled Exceptions in WinForms

更新:

非常奇怪..所以抓住ProcDump,编写批处理文件,并在看到错误消息时让客户运行它。获取转储并尝试通过WinDbg或VS 2010进行调查。Here了解更多信息。

同时检查:Creating and analyzing minidumps in .NET production applications。如果您是WinDbg新手,请查看Tess Ferrandez's blog

使用Remote Debugging Setup

的另一种方式

答案 2 :(得分:2)

每当发生异常时,您都可以使用Adplus自动保存minidump。有关详细信息,请参阅此问题:Fastest way to break in WinDbg for specific exception? .net 4.0 app.

答案 3 :(得分:1)

如果无法实现异常处理解决方案,您可以实现一些跟踪日志记录,以缩小代码中的位置以及导致异常的流。