在UnhandledException处理程序中尝试/捕获不起作用

时间:2013-11-21 10:10:03

标签: c# exception-handling unhandled-exception

我在应用程序中有一个奇怪的症状,其中在UnhandledExceptions的处理程序内的try / catches不起作用:(即使内部断点,catch内的断点也不会被命中try确实如此。

显然,在UnhandledException中搜索“未处理的异常”对我来说效果不佳。

我尝试过做一个迷你概念验证,不幸的是,这个有效。

因此,当我试图找出问题的根源时,如果有人在这里有任何想法,我会很高兴。

(我们最近从XP更改为Windows7,而.Net 4.5从4.0更改 - 我很确定以前这样做了。)

编辑:看起来是通过调用(托管)C ++库来引发System.AccessViolationException而引发的。奇怪的是,如果我用throw new AccessViolationException替换呼叫,它确实做了我想做的事情......

3 个答案:

答案 0 :(得分:4)

你写道,“我们最近改变了...... .Net 4.5从4.0开始 - 我很确定以前这样做了。”但以下似乎值得补充,因为非常确定确实意味着不确定: - )

我在某处看到AccessViolationException在托管代码中不会出现,但可能被运行时捕获到非托管代码。也许C ++库调用非托管代码?

在.NET 4+中,该过程将在AccessViolationException之后终止。您的异常处理程序将被忽略。这属于一组被认为不可恢复的异常类型:Corrupted State Exceptions。在.NET 4+中,您需要自定义应用程序配置以覆盖此行为。

答案 1 :(得分:1)

请确保您尝试捕获System.AccessViolationException而不是本机访问冲突错误。

当你执行throw new AccessViolationException时,它会抛出System.AccAccessViolationException。 如果您调用的库是本机的,则它可能会抛出本机访问冲突错误,但.NET catch块通常只能捕获托管异常。

答案 2 :(得分:0)

试试这个: 我认为我们无法处理未处理的异常并且最终必须退出应用程序。 http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx