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

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

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

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

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

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

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

编辑:

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

你好,

此错误已关闭为“外部”,因为此行为是由x64版本的Windows如何处理exception引起的。 当用户模式exception穿过内核转换时,x64版本的Windows不允许传播exception。 因此,附加的调试器不知道发生exception导致调试器未能在未处理的exception上中断的事实。

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

最诚挚的问候,Visual Studio Debugger

这是一个用于查找神秘exception的调试技巧:在Visual Studio中,转到Debug – > Exceptions …并检查“Thrown”是否存在Common Language Runtime Exceptions。 这样,每当exception被触发时,IDE都会中断。 我已经用了很多东西来查找似乎被吞噬的exception。

不过,别忘了把它关掉。 🙂

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

看到这个相关的问题