我尝试了几种方法来保持抛出异常时堆栈跟踪中的正确行号。最常见的是捕获并抛出,但这并不起作用。以下是我尝试过的几种方法:
private void button1_Click(object sender, EventArgs e)
{
try
{
test();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void test()
{
try
{
int a = 1;
int b = 0;
int x = 0;
x = a / b;
}
catch
{
throw;
}
}
在 catch 块中有几个变化。
catch (Exception)
{
throw;
}
catch (Exception e)
{
throw;
}
catch (Exception e)
{
throw e;
}
所有的错误都在 throw 行和消息框行上报告,而不是在除以 0 的那一行上报告。如果我在 test() 函数内部打断点,可以显示正确的行号,但在被抛出后却无法显示。唯一有效的方法是在 test() 函数中不使用任何 try/catch。但是,当然我希望能够捕获错误并重新抛出它们,并保持堆栈跟踪正确。那么该怎么做呢?谢谢。