c# - try/catch 在 UnhandledException 处理程序中不起作用

标签 c# exception unhandled-exception

我在一个应用程序中有一个奇怪的症状,其中 UnhandledExceptions 处理程序中的 try/catches 不起作用:(即 catch 中的断点不会被击中,即使try 中的断点)。

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

我已经尝试过进行小型概念验证,不幸的是,它成功了。

因此,当我试图追查问题的根源时,如果这里有人有任何想法,我将不胜感激。

(我们最近从 XP 更改为 Windows7,并从 4.0 更改为 .Net 4.5 - 我很确定以前这行得通)。

编辑:看起来它是由对抛出 System.AccessViolationException 的(托管)C++ 库的调用引发的。奇怪的是,如果我用 throw new AccessViolationException 替换调用,它确实会执行我想要的...

最佳答案

您写道,“我们最近将 .Net 4.5 从 4.0 更改为 .Net 4.5 - 我很确定以前这行得通。”但以下内容似乎值得添加,因为非常确定实际上意味着不确定 :-)

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

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

关于c# - try/catch 在 UnhandledException 处理程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20117946/

相关文章:

java - 我可以将 Eclipse 设置为忽略 "Unhandled exception type"

C#线程内存使用

.net - 在服务器上引发远程异常时,获取套接字关闭错误

java - Java 异常构造函数是否必需?

c# - 有没有办法自动确定语句可能抛出的异常?

java.util.regex.PatternSyntaxException - 使用 split ("\\"时);

c++ - CreateProcess 未处理的错误

c# - OleDbCommand 不会更新 MS Access 数据库,不会抛出任何错误

c# - 在多个解决方案之间共享 app.xaml

C#清除已关闭应用程序的托盘图标