什么东西吞没了未经处理的例外?

时间:2009-12-23 06:47:15

标签: c# .net winforms visual-studio-2008

在我正在制作的应用程序中,有时抛出但未处理的异常似乎消失在空气中并导致GUI出现奇怪的错误。

我通常会逐步找到它,直到到达引发异常的行,此时Visual Studio会立即停止步进并返回应用程序。

这是一个IRC应用程序,所以它是由异步套接字连接大量事件驱动的。不确定这是否相关。

我没有任何空的捕获块或任何类似的东西。

3 个答案:

答案 0 :(得分:3)

显然这是x64机器的已知错误。

错误和解决方法在Microsoft Connect上。

修改

如果有人对原因感兴趣,那么在错误关闭时就会发布:

  

您好,

     

此错误已关闭为“外部”,因为此行为是由此产生的   x64版本的Windows如何处理异常。当用户模式   异常跨越了内核转换,x64版本的Windows没有   允许异常传播。因此附加调试器   不知道发生异常的事实导致了   调试器无法中断未处理的异常。

     

不幸的是,Visual Studo团队无法做到这一点   解决这个问题,它是操作系统设计的结果。所有   有关此问题的反馈应提交给Windows团队;   但Windows团队认为这是“正确的”操作   系统设计,并认为x86行为“不正确”。

     

最诚挚的问候,Visual Studio调试器

答案 1 :(得分:1)

这是一个用于查找神秘异常的调试技巧:在Visual Studio中,转到Debug - >异常...并检查公共语言运行时异常的“Thrown”。这样,每当异常被触发时,IDE都会中断。我已经用了很多东西来查找似乎被吞下的异常。

不要忘了把它关掉。 :)

答案 2 :(得分:-1)

后台线程中任何未处理的异常都会导致运行时立即终止。您需要捕获并处理异步方法中的任何异常。

请参阅this related question