编辑:我查看了答案代码:他们都没有做我想要的(我已经检查过)。似乎没有办法在本机 c# 中做我想做的事。我想这不是一场灾难,只是一种耻辱,因为 .NET 确实支持它(见接受的答案)。
谢谢大家。
我有像这样的 c# 代码(测试框架的一部分,除非在调试器下运行,否则永远不会运行)谁指出它是为了避免实际捕获异常,因为这使得调试堆栈未展开部分中的代码非常痛苦。
Bool bad = true;
try
{
MightThrow();
bad = false;
}
finally
{
if(bad) DoSomeLoggingOnFailure();
//// Does not catch!!!!
//// exception continues to unwind stack.
//// Note that re throwing the exception is NOT
//// the same as not catching it in the first place
}
他们是更好的方法吗?
对于未捕获的异常,解决方案的行为必须与调试器下的行为完全相同。它必须导致唯一的第一次机会异常,并且调试器在最初引发异常的点中断,而不是在 catch 块中。
具体来说,我需要未捕获异常的调试器来停止 MightThrow。
以下不起作用,因为它无法让调试器在正确的位置中断
try { ... } catch { throw; }
这不起作用,因为它会丢失堆栈信息(并且还会在错误的位置中断)。
try { ... } catch(Exception e) { throw e; }
我知道在D中我可以使用scope(failure)
块