调试流利的样式代码时,如何找到哪个链接的方法失败?

问题描述:

在正常的编程风格,逻辑被组织成语句,每个占一行。例如调试流利的样式代码时,如何找到哪个链接的方法失败?

statement A; 
statement B; 
statement C; 
... 

当错误发生时,编译器告诉我失败语句的行号。我可以很容易地调试这个缩小范围。

然而,现在使用的是流利式代码(例如,在Java流的API),逻辑的长块被写在一个语句在链式方法的形式。例如:

methodA() 
    .methodB() 
    .methodC() 
    .methodD() 
    .... 

当发生故障时,有什么方法可以缩小链接方法的失败?我关心的是编译器的调试提示只有一个行号,但整个链接块包含在这一行语句中,这对调试没有多大帮助。

+1

堆栈跟踪也显示方法名,所以它会唯一识别方法A,B,C或d异常发生,所以,只要你不调用相同的方法不止一次,它不应该即使呼叫全部在一条实际线路上,而不是个别线路上,也是一个问题。 – AJNeufeld

代码在不同线路上的链接方法。

当链接方法在不同的行编码,则堆栈跟踪包含失败的方法调用的行号。

例如:

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 

注意,堆栈跟踪显示哪些实际方法调用分解中的行号。