如果发生未捕获的异常,如何在finally
中调试try {...} finally{...}
块?似乎无论我对异常设置或调试器做什么,Visual Studio都不会让我继续经过try
块中抛出异常的点,以便调试finally
代码。 / p>
这是一个有代表性的简短例子:
public static void Main()
{
var instrument = new Instrument();
try
{
instrument.TurnOnInstrument();
instrument.DoSomethingThatMightThrowAnException();
throw new Exception(); // Visual Studio won't let me get past here. Only option is to hit "Stop Debugging", which does not proceed through the finally block
}
finally
{
if(instrument != null)
instrument.TurnOffInstrument();
}
}
背景:我有一个程序可以控制一些用于在实验室中进行电子测量的硬件仪器,例如:可编程PSU。如果出现问题,我希望它快速失败:首先关闭仪器以防止可能的物理损坏,然后退出。关闭它们的代码是在finally块中,但我无法调试此代码在错误情况下工作。我不想尝试处理任何可能的错误,只需转动仪器然后关闭程序。也许我的方式错了?
答案 0 :(得分:2)
答案 1 :(得分:2)
如果异常导致应用程序崩溃,则永远不会执行finally块,即代码中的情况。 要在你的例子中调试finally块,你必须将main函数的整个代码放在另一个try语句中,并捕获异常以防止应用程序崩溃,如下所示:
public static void Main()
{
try
{
var instrument = new Instrument();
try
{
instrument.TurnOnInstrument();
instrument.DoSomethingThatMightThrowAnException();
throw new Exception();
}
finally
{
if(instrument != null)
instrument.TurnOffInstrument();
}
}
catch(Exception)
{
Console.Writeline("An exception occured");
}
}
答案 2 :(得分:1)
你需要在第一行里面放置一个断点 finally
块,然后在异常后再点击“运行”。