1

我必须编写逻辑来检测哪行代码抛出了异常,以便我们稍后解决这个问题。异常对象的 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 类很感兴趣,所以我可以去它的划分并修复这个错误。现在,测试出现在我在运行时无法知道的第 n 行中。一种方法是迭代堆栈跟踪列表并尝试查找自定义开发的类,但如何检测呢?或者,如果有一些库函数已经这样做了,那就太好了。

4

1 回答 1

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
于 2013-11-07T11:24:44.527 回答