1

[編集: 言い換えてみましょう]oデバッグで発生するオブジェクトがプロパティabを持ち、値がnullとであるとしますHello。次のデバッグ セッション用に次のコードを自動的に生成することは可能ですか。

if(o.a == null && o.b == "Hello") {
}

プログラミング言語のパーサーなど、複雑なユーザー入力に対処する必要があるプログラムをデバッグする場合、解析プロセスのある時点からデバッグを開始したいことがよくあります。入力コードの特定の行からの命令が処理されたときに開始する簡単な方法を実装しました。
ただし、行には非常に複雑な命令が含まれている場合があり、その結果、コード内で深い再帰が発生するため、デバッグを開始した後、手動でプログラムにさらにステップ インする必要があります。これが function で発生した場合func(obj a)、通常、次のような醜いコードを記述します。

public void func(obj a) {
  if(a instanceof someClass && ((someClass)a).hasSomeProperty() && ((someClass)a).getIdentifier().equals("myID")) {
  // set a breakpoint here
  }
  // other code 
}

したがって、基本的には、関数に渡されたオブジェクトを特定することで、興味深い状況を特定しようとします。通常、他のコードでスローされる例外にブレークポイントがあるため、これらの値を知っています。だから私の質問はこれです: 適切なブレークポイントを生成するためにこの醜いコードをすべて書く代わりに、以前のデバッグセッションで変数が持っている値に基づいて条件付きブレークポイントを設定する方法はありますか? 基本的には、オブジェクトがここにあるものとまったく同じ場合、ここで停止しますか?

4

3 に答える 3

3

次のことを行う場合があります: 将来のデバッグ セッションと比較したいオブジェクトをシリアル化して書き込む静的ユーティリティ メソッド ("writer") を記述します。もう 1 つのメソッド (「リーダー」) は、オブジェクトを受け取り、それをシリアル化されたバージョンと比較し、両方が等しい場合に true を返します。
その後、「ライター」メソッドを呼び出して停止しない条件付きブレークポイントを 1 つ以上定義できます。
さらに、「reader」メソッドを呼び出す別の条件付きブレークポイントを定義します。これは、通常どおりスレッドを停止しますが、条件が満たされた場合にのみ停止します。

于 2013-10-09T14:20:22.487 に答える
2

Netbeans offers the conditional breakpoint feature: after you set a breakpoint on a line you right click on it, choose Breakpoint-Properties, select the Condition checkbox and insert Java code to express a condition that must be true to break program execution.

于 2012-11-16T14:06:09.920 に答える
0

ブレークポイントを追加し、それを右クリックして、ブレークポイントに移動します - >ブレークポイントのプロパティウィンドウでプロパティを選択すると、条件ボックスが表示され、ifを追加します

于 2012-11-16T14:07:16.143 に答える