我在应用程序中有一个奇怪的症状,其中在UnhandledExceptions的处理程序内的try / catches不起作用:(即使内部断点,catch
内的断点也不会被命中try
确实如此。
显然,在UnhandledException中搜索“未处理的异常”对我来说效果不佳。
我尝试过做一个迷你概念验证,不幸的是,这个有效。
因此,当我试图找出问题的根源时,如果有人在这里有任何想法,我会很高兴。
(我们最近从XP更改为Windows7,而.Net 4.5从4.0更改 - 我很确定以前这样做了。)
编辑:看起来是通过调用(托管)C ++库来引发System.AccessViolationException
而引发的。奇怪的是,如果我用throw new AccessViolationException
替换呼叫,它确实做了我想做的事情......
答案 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