Редактировать: я посмотрел код ответа: НЕТ из них делают то, что я хочу (я проверял). Казалось бы, нет никакого способа сделать то, что я хочу в нативном 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
}
это лучший способ сделать это?
Решение должно вести себя точно так же, как и в отладчике, в отношении незамеченных исключений. Это должно было привести к единственному первому исключению и отладчику в момент, когда исключение было первоначально брошено, а не в блоке перехвата.
В частности, мне нужен отладчик для необнаруженных исключений, чтобы остановить MightThrow в стороне.
Следующее не работает, потому что не удается сделать перерыв в отладчике в правильном месте
try { ... } catch { throw; }
И это не работает, потому что оно теряет информацию о стеке (а также разрывается в неправильном месте).
try { ... } catch(Excption e) { throw e; }
Я знал, что в D я мог бы использовать scope(failure)
блок