异常未被捕获

4
我有一个64位的Win7系统,使用VS2010和.Net Framework 4.0。在一个Winform应用程序中,我收到了来自第三方组件的异常,我试图用Try-Catch捕获这个异常,但它不起作用!为什么?如果我取消选中CLR异常,它就能正常工作,但由于这个已知问题,我被迫选择它:为什么无法在表单加载时捕获异常?如果我按F10,它会继续进入catch语句!!请看下面的图片: enter image description here

这似乎很奇怪。Exception 当然应该捕获这个异常。你尝试过显式地捕获抛出的异常类型吗? - MoonKnight
2
你已经配置了调试器,让它在异常抛出时中断。程序停在try块内时,你尝试按F5键了吗? - Stephan
1
完整的堆栈跟踪是什么?CAENRFIDException确实扩展了System.Exception,我想。您是否尝试过检查其他异常复选框,以防它是其中之一?还有,“未捕获的异常”。catch的范例是catch/caught/caught,这是一个强动词。 :) - nicodemus13
异常处理通常捕获托管异常,尝试使用catch { //记录任何自定义消息 },这应该可以捕获所有异常...也许这个答案可以帮到你: https://dev59.com/93VC5IYBdhLWcg3w51hv - S2S2
1
好的,如果在调试器中按下“F11”或“F5”或其他某个“继续”按钮会导致执行catch块,则这是预期的行为。相反,您希望发生什么?您已经配置了调试器以在抛出CLR异常时中断,以解决64位环境问题。这意味着每次抛出异常时调试器都会中断。如果您继续,则catch块将像往常一样执行。 - Cody Gray
显示剩余6条评论
2个回答

1

看起来你在这里调用了一个非托管的dll。尝试使用ExternalException Class捕获此异常。这可能对你有用,但一旦你超出了.NET运行时的控制范围,就完全取决于非托管代码;.NET运行时无法做任何事情。


2
即使它是一个未受管理的dll... ExternalException 有一个基类 Exception。因此,它会被 catch (Exception) 捕获。 - Stephan

0
你是否已经取消了以下设置的勾选:

当异常跨越 AppDomain 或托管/本机边界时中断 (仅限托管代码)

请在 Visual Studio 2010 的“工具”->“选项”->“调试”->“常规”选项卡中进行设置。
MSDN 这里有详细说明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接