有没有办法找出try块中的哪一行抛出异常?
我在Eclipse中使用Java看起来像
try {
//Lots of code. Seriously. Lots.
} catch (Exception e){
throw new OtherException();
}
我在try块中遇到异常(然后被捕获)。我怎样弄清楚它被扔出去的地方?
问题
感觉应该有一种直截了当的方式。
注意:我没有写这段代码; - )
答案 0 :(得分:13)
使用cause
Exceptions
的{{1}}参数:{/ 3}}:
try {
//Lots of code. Seriously. Lots.
} catch (Exception e){
throw new OtherException(e); // Trick is here
}
这样你在堆栈跟踪中也会得到cause
异常。
答案 1 :(得分:4)
在Eclipse中,您可以设置由异常触发的断点。请参阅Add Java Exception Breakpoint。
对于这种特殊情况,您需要确保勾选“暂停捕获的异常”。
Eclipse进入调试器后,您可以使用大量工具。您将看到调用堆栈,将能够检查变量等。
答案 2 :(得分:4)
您可以使用throw new OtherException(e);
。正如documentation所解释的,此构造函数使用指定的原因构造一个新的异常。
答案 3 :(得分:2)
投掷时,在OtherException
构造函数中传递异常e。它将为您提供完整的堆栈跟踪,其中包含抛出异常的确切行:
catch (Exception e) {
throw new OtherException(e);
}
如果OtherException
没有可以执行Exception
或Throwable
的构造函数:
catch (Exception e) {
OtherException o = new OtherException();
o.initCause(e);
throw o;
}
答案 4 :(得分:2)
只需打印堆栈跟踪或在调试模式下运行
e.printStackTrace()
答案 5 :(得分:0)
您还可以尝试将错误消息打印到控制台:System.out.println(e.getMessage());
断点非常有用,因为您可以跟踪代码并准确查看它何时到达catch块。