2

この質問のように、アプリケーションをデバッグするときに、現在のコール スタックに特定のメソッドがある場合にのみブレークポイントでアプリケーションを一時停止させたいと考えています。ただし、Netbeans を使用しています。

Java では、現在のコール スタックは次のようないくつかの方法で取得できます。

Thread.currentThread().getStackTrace()

これは、スタック トレース要素の配列を返します。

配列 (または変換されたリスト) を反復処理し、メソッド名を確認してブール値を 1 行で返すことはできますか?

または、配列をチェックし、関心のあるメソッドの存在に基づいてブール値を返すメソッドを作成する必要がある場合、どこに配置すればよいですか?

4

2 に答える 2

0

スタックに条件をテストするプライベート メソッドを追加し、条件付きブレークポイントから呼び出すことができます。概念実証は次のとおりです。

public class DebugStack {
    private int x = 0;
    private void m1(){
        x++;
        m2();
    }
    private void m2(){
        x+=3;         
    }
    private boolean insideMethod(String methodName){
        for (StackTraceElement stackTrace : Thread.currentThread().getStackTrace()) {
            if (stackTrace.getMethodName().equals(methodName)) {
                return true;
            }
        }
        return false;
    }
    public static void main(String[] args) {
        DebugStack dbg = new DebugStack();
        dbg.m1();
        dbg.m2();

    }
}

m2()条件としてwith内に条件付きブレークポイントを配置するthis.insideMethod("m1")と、アプリケーションはm2()内から が呼び出された場合にのみブレークポイントで一時停止しますm1()

于 2015-03-17T18:06:17.870 に答える