2

私は次の問題を抱えています、私たちはそれを古典的なものと呼ぶかもしれません:

public void myMethod(Map<Object, Object> parameter){

    someOtherObject.method(parameter);
    .
    .
    .
    someOtherThirdPartyObject.method(parameter);

}

そして突然、あるメソッドが入力パラメーターMapに触れたのですが、どこでどのようにすればよいのかわかりません。さて、パラメータを不変にすることが望ましいことはわかっていますが、そうではなく、それが問題の根本です。たとえば、myMethod内のメソッドは、いくつかの検証を実行することを目的としていますが、さらにいくつかの検証も実行するため、設計上間違っています。

したがって、問題は、このパラメータMapの属性が変更された場合に実行が一時停止する、このメソッドにブレークポイントを作成する方法です。各メソッド呼び出しの後に条件付きブレークポイントを設定することは良い考えかもしれませんが、20の奇数のメソッドがある場合、それはかなり苦痛です。

この入力パラメータが変更されているときにデバッグするにはどうすればよいですか?

4

3 に答える 3

2

あなたが望むものは「ウォッチポイント」と呼ばれているように見えます。私は実際にこの機能が存在することを知りませんでした、そして私はEclipseプロジェクトで働いていました!

http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.cdt.doc.user%2Ftasks%2Fcdt_t_add_watch.htm

編集中のフィールドを把握してから、上記のヘルプドキュメントを使用して「書き込み」ウォッチポイントを設定する必要があるようです。

さらに、Eclipseは変更された変数を強調表示するため、メソッド呼び出しを1つずつステップオーバーすると、値が強調表示されるため(明るい黄色、によって)、値を変更している変数(および変更されているフィールド)を確認できます。デフォルト)「デバッグ」パースペクティブの「変数」タブ。データを変更する場合にどのメソッドを再度実行できるかがわかったら、デバッグを再度実行できますが、今回は値を変更するメソッドをデバッグし、問題が見つかるまで繰り返します。

于 2012-05-12T09:17:16.740 に答える
1

これは古典的な問題解決シナリオであり、非常に大きな検索スペースから始めて、問題を特定するのに十分なほど検索スペースが小さくなるまで、体系的かつ方法論的に絞り込みます。

マップが正しく変更されていない場所を見つけようとしている場合は、最初にmyMethodの上位レベルから開始することをお勧めします。myMethodメソッド内で呼び出されたメソッドの周囲にブレークポイントを設定します。各ブレークポイントで、マップの内容を確認します。Eclipseには変数監視パネルがあり、特定の時点でのすべての変数の内容を確認できます。

何かが間違っていることに気付いたブレークポイントに到達したとき。止まる。someOtherObject.method(parameter);これで、データがブレークポイントで変更されたと想定することを掘り下げることができました。

これで、someotherObject.methodには他のメソッドが含まれる可能性があります。このメソッド内のすべての関数呼び出しの周りにブレークポイントを設定し、プロセスを繰り返します。メソッドがなくなるまで繰り返します。最終的には、問題を絞り込んで答えを得ることができます。

残念ながら、これらのタイプの問題には魔法の「コードを修正する」ボタンはありません。根本的な原因を突き止めることができる小さなセクションが残るまで、問題ではないとわかっているコードの領域を排除するには、古き良きシャーロックホームズスタイルの調査スキルと推論が必要です。

于 2012-05-12T09:17:25.987 に答える
0

コードの変更が許可されていない場合は、

  • acattle で記述された watchpoints メソッドを使用して、この特定のマップ インスタンスでの変更を監視するか、
  • その状態を変更する Map メソッドにブレークポイントを設定します (複数のインスタンスに対してそれを行いたい場合)。Map コードがバイナリのみであることは問題ではありません。Ctrl-Shift-T (Open Type) を使用して開き、アウトライン ビューで put(...) や remove(...) などのメソッドを選択して、アウトライン ビューのコンテキスト メニューを使用してブレークポイントを追加します。
于 2012-05-12T09:44:19.893 に答える