【问题标题】:Unusual exception behaviour?异常的异常行为?
【发布时间】:2010-12-05 00:56:33
【问题描述】:

我以前从未遇到过这种行为,我想知道是否有人能够对此事有所了解?

正如您在图片中看到的那样,我正在捕获AccessViolationException 类型的异常,但调试器却抱怨该异常未处理!

这怎么可能?

哦,我知道你不应该有一个空的 catch 块,这不是我的问题。

谢谢!

编辑: 现在我得到了这个:

【问题讨论】:

  • 黑暗中的一枪:用额外的 try-catch 包裹整个 foreach
  • 顺便说一句,如果你运行代码(而不是调试它)会发生什么?
  • @max:出于性能原因,将 try 块放在 foreach 之外绝对是您想要做的事情,跳入和跳出异常处理可能会很痛苦。
  • 您要将密钥发送到什么地方?您能以某种方式查看 SendWait 堆栈的内部吗?

标签: c# debugging exception .net-4.0 access-violation


【解决方案1】:

Handling Corrupted State Exceptions 是您必须明确执行的操作,您可以通过将[HandledProcessCorruptedStateExceptions] 属性添加到函数来捕获它们...

请注意,这些未处理是有原因的,因为如果忽略或一般处理意外情况,它们仍然可能有害。在这两种情况下都不能保证您正在做的事情是完全安全的!仅在不能仅终止进程的情况下处理。

【讨论】:

  • 您是说我可能会冒损坏机器上其他数据的风险吗?
  • 它不允许您访问内存,因此在这种异常情况下更改非常低,以至于您机器上的其他数据会被损坏。所以我想你可以尝试使用该属性并捕获它,或者弄清楚为什么它只是为了发送这些键而给出该异常......
  • 嗨,我已经按照建议添加了属性,并反转了 foreach 和 try-catch 块。现在我遇到了一个新问题(请参阅我的更新)。
  • 我明白了,您能否也反映我对您的问题的最后评论?
  • 也许您可以捕捉到该异常,但考虑到文本可能是冒险的事情......
【解决方案2】:

这种奇怪的事情偶尔会发生在我身上,我将推荐新手IT方法。重启你的电脑。 .NET 中的 CLI 环境有时会变得非常有问题,因为我之前的代码确实挂在了 foreach 循环中。

【讨论】:

  • 那么你要么有内存损坏,要么你写了一些不好的东西,因为这不是正常的行为,而且 .NET 也没有那么错误。如果某些代码导致此异常,重新启动他的计算机可能会导致相同的错误......编写线程不安全的代码,调整您正在枚举或处理的内容可能会导致 foreach 循环也挂起;这些都不会被视为 CLI 环境中的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2017-01-22
  • 2013-04-14
  • 2014-01-29
  • 1970-01-01
  • 2011-01-13
  • 2010-10-14
相关资源
最近更新 更多