我必须编写用于检测抛出异常代码行的逻辑,以便我们稍后解决该问题。异常对象的getStackTrace()为我们提供了一个堆栈跟踪列表,每个堆栈跟踪都有一个级别。我对获得异常的最低位置感兴趣,而不是我的类方法负责传递参数。 这是我要问的一个例子
class Test {
void divide() {
try{
float i = 1/0
}
catch(Exception e){
def v = e.getStackTrace()[0]
println v.getClassName()
}
}
}
这将打印类java.math.BigDecimal,但我有兴趣获得Test类,所以我可以去除它并修复这个bug。现在,测试出现在第n行,我在运行时无法知道。一种方法是迭代堆栈跟踪列表并尝试查找自定义开发但是如何检测它的类?或者如果有一些库功能已经做到了那就太棒了。
答案 0 :(得分:2)
试试这个:
println e.stackTrace.find {
it.className == 'Test' && it.methodName == 'divide'
}
或者,我想你想检查所有级别的堆栈跟踪,然后:
Throwable t = e
StackTraceElement found = null
while (!found && t) {
found = e.stackTrace.find {
it.className == 'Test' && it.methodName == 'divide'
}
t = e.cause
}
println found