【问题标题】:Global Exceptionhandler does not catch some Exception (for example StackoverflowException)全局异常处理程序没有捕获一些异常(例如 StackoverflowException)
【发布时间】:2013-01-31 14:14:03
【问题描述】:

我在我的应用程序(C#、WPF、.NET4)中通过以下方式在启动例程中注册了全局异常处理程序:

AppDomain.CurrentDomain.UnhandledException += (sender, args) => HandleException(args.ExceptionObject as Exception);
Application.Current.DispatcherUnhandledException += (sender, args) => {
   HandleException(args.Exception);
   args.Handled = true;
};

HandleException() 记录异常并显示带有一些附加信息的 MessageBox。

现在,我的应用程序在某些客户机器上不时发生崩溃,其中未调用 HandleException()。 Windows 显示以下消息:

在 WindowsEventLog 中,我得到以下条目:

条目 1:

Name der fehlerhaften Anwendung: proconact.exe, Version: 1.0.0.1365, Zeitstempel: 0x511531df
Name des fehlerhaften Moduls: PresentationFramework.ni.dll, Version: 4.0.30319.588, Zeitstempel: 0x504db27d
Ausnahmecode: 0xc00000fd
Fehleroffset: 0x002ef05b
ID des fehlerhaften Prozesses: 0x1bec
Startzeit der fehlerhaften Anwendung: 0x01ce0b5dce4030a6
Pfad der fehlerhaften Anwendung: C:\Program Files (x86)\proconact_sck\proconact.exe
Pfad des fehlerhaften Moduls: C:\windows\assembly\NativeImages_v4.0.30319_32\PresentationFramewo#\c627e9b7f10b01db43645284e601f255\PresentationFramework.ni.dll
Berichtskennung: d8d69f94-777a-11e2-b4b0-b4b52f2aad4f

条目2:

Fehlerbucket 3482664247, Typ 5
Ereignisname: CLR20r3
Antwort: Nicht verfügbar
CAB-Datei-ID: 0

Problemsignatur:
P1: proconact.exe
P2: 1.0.0.1365
P3: 511531df
P4: PresentationFramework
P5: 4.0.0.0
P6: 504db27d
P7: 329d
P8: 0
P9: System.StackOverflowException
P10: 

Angefügte Dateien:
d:\Temp\WER6E9F.tmp.WERInternalMetadata.xml

Diese Dateien befinden sich möglicherweise hier:
C:\Users\roger\AppData\Local\Microsoft\Windows\WER\ReportArchive\AppCrash_proconact.exe_b0fabce1f86d1f843de5b5b4692a3e8ecd928_2c77f03d

Analysesymbol: 
Es wird erneut nach einer Lösung gesucht: 0
Berichts-ID: d8d69f94-777a-11e2-b4b0-b4b52f2aad4f
Berichtstatus: 0

我可以做些什么来处理异常(为了获取堆栈跟踪以分析发生异常的位置)?

【问题讨论】:

    标签: wpf c#-4.0 .net-4.0 exception-handling unhandled-exception


    【解决方案1】:

    有些异常不能被捕获,即使是 AppDomain.UnhandledException。因为它们太讨厌了,不允许托管代码继续运行。

    StackOverflowException 就是这样的心脏病发作,臭名昭著,足以给这个网站起名。没有足够的堆栈空间来执行常见的托管代码执行任务,例如运行抖动。 ExecutionEngineException 是另一种,由已销毁的垃圾收集堆触发,在 .NET 4.0 及更高版本中无法捕获。

    所以不,演出结束了,WER 对话框和 Windows 事件日志条目就是剩下的要查看的内容了。 SO 总是由错误引起的,您需要修复它。

    【讨论】:

    • 这个。可以这样想:如果你能捕捉到堆栈溢出,你会以什么方式处理它?
    • 感谢您的解释。我知道,这是一个错误 - 我正在寻找一种方法来确定错误发生的位置。崩溃是不可重现的,并且仅在两台客户的机器上不时发生,当他们单击应用程序中的不同部分时。正因为如此,我正在搜索一种方法来获取信息,stackoverflow 中涉及哪些方法以及它发生在哪里。我不会恢复应用程序 - 只有这些信息来修复错误。
    猜你喜欢
    • 2018-06-14
    • 2013-10-25
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    相关资源
    最近更新 更多