2017-10-07 65 views
1

在正常的編程風格,邏輯被組織成語句,每個佔一行。例如調試流利的樣式代碼時,如何找到哪個鏈接的方法失敗?

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

當錯誤發生時,編譯器告訴我失敗語句的行號。我可以很容易地調試這個縮小範圍。

然而,現在使用的是流利式代碼(例如,在Java流的API),邏輯的長塊被寫在一個語句在鏈式方法的形式。例如:

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

當發生故障時,有什麼方法可以縮小鏈接方法的失敗?我關心的是編譯器的調試提示只有一個行號,但整個鏈接塊包含在這一行語句中,這對調試沒有多大幫助。

+1

堆棧跟蹤也顯示方法名,所以它會唯一識別方法A,B,C或d異常發生,所以,只要你不調用相同的方法不止一次,它不應該即使呼叫全部在一條實際線路上,而不是個別線路上,也是一個問題。 – AJNeufeld

回答

2

代碼在不同線路上的鏈接方法。

當鏈接方法在不同的行編碼,則堆棧跟蹤包含失敗的方法調用的行號。

例如:

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 

注意,堆棧跟蹤顯示哪些實際方法調用分解中的行號。

相關問題