2017-10-07 4 views
1

通常のプログラミングスタイルでは、ロジックは文で構成され、各行は1行です。例えば流暢なスタイルコードをデバッグするとき、どのチェーンメソッドが失敗するかを見つける方法は?

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

バグが発生すると、コンパイラは失敗した文の行番号を通知します。この狭い範囲で簡単にデバッグできます。

しかし、流暢なスタイルコード(JavaストリームAPIなど)が使用されているため、ロジックの長いブロックは、チェーンメソッドの形式で1つのステートメントに書き込まれます。たとえば、次のように

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

障害が発生した場合、メソッドが失敗したチェーンこれに絞り込むための良い方法は何ですか?私の懸念は、コンパイラのデバッグヒントには行番号しかないが、チェーンブロック全体がこの1行のステートメントに含まれているため、デバッグにはあまり役に立ちません。

+1

スタックトレースにはメソッド名も表示されるため、例外が発生したメソッドA、B、C、Dが一意に識別されます。同じメソッドを複数回呼び出さない限り、たとえ個々の回線の代わりに1つの物理回線にコールがあっても問題になります。 – 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 

なお、実際のメソッド呼び出しが爆発スタックトレースショー内の行番号。

関連する問題