调试流利的样式代码时,如何找到哪个链接的方法失败?
问题描述:
在正常的编程风格,逻辑被组织成语句,每个占一行。例如调试流利的样式代码时,如何找到哪个链接的方法失败?
statement A;
statement B;
statement C;
...
当错误发生时,编译器告诉我失败语句的行号。我可以很容易地调试这个缩小范围。
然而,现在使用的是流利式代码(例如,在Java流的API),逻辑的长块被写在一个语句在链式方法的形式。例如:
methodA()
.methodB()
.methodC()
.methodD()
....
当发生故障时,有什么方法可以缩小链接方法的失败?我关心的是编译器的调试提示只有一个行号,但整个链接块包含在这一行语句中,这对调试没有多大帮助。
答
代码在不同线路上的链接方法。
当链接方法在不同的行编码,则堆栈跟踪包含失败的方法调用的行号。
例如:
public class MyClass {
MyClass okMethod() {
return this;
}
MyClass explodingMethod() {
throw new RuntimeException(); // line 10
}
public static void main(String[] args) {
new MyClass()
.okMethod()
.explodingMethod() // line 16
.okMethod();
}
}
执行这会导致与该堆栈跟踪异常:
Exception in thread "main" java.lang.RuntimeException
at MyClass.explodingMethod(MyClass.java:10)
at MyClass.main(MyClass.java:16) // this is the call that exploded
注意,堆栈跟踪显示哪些实际方法调用分解中的行号。
堆栈跟踪也显示方法名,所以它会唯一识别方法A,B,C或d异常发生,所以,只要你不调用相同的方法不止一次,它不应该即使呼叫全部在一条实际线路上,而不是个别线路上,也是一个问题。 – AJNeufeld