2012-05-12 16 views
2

をデバッグする方法私は、次のような問題を持って、私たちもそれを古典的なものを呼ぶかもしれませんどこでどのように知っているの?今、パラメータを不変にすることが望ましいことは分かっていますが、それは問題ではなく、問題の根源です。たとえば、myMethod内のメソッドはいくつかのバリデーションを実行することを意図していますが、いくつかのバリデーションも行いますが、これは設計上間違っています。Eclipseの入力パラメータの変更

このパラメータマップの属性が変更された場合、実行が一時停止するこのメソッドでブレークポイントを作成する方法は問題です。それぞれのメソッド呼び出しの後に条件付きブレークポイントを置くことは良い考えですが、20以上のメソッドがある場合は、むしろ痛いものです。

この入力パラメータが変更されている場合、どうすればデバッグできますか?

答えて

2

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

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

あなたはフィールドがeditted、その後、上記のヘルプ文書を使用して「書く」ウォッチポイントを設定されているかを把握する必要がありますように見えます。

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

+0

私はウォッチパネルを言ったが、ウォッチポイントは正しい用語である。実際にそれをマークして変更があったときにハイライト表示することを忘れていました。 +1 – jmort253

+0

私は以前これを使用したことがないので、私はそれを行かせます。 –

1

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

マップが誤って変更されている場所を見つけようとしている場合は、最初にmyMethodの上位レベルから始めたいと思うかもしれません。 myMethodメソッドの中で呼び出されるメソッドの周りにブレークポイントを設定します。各ブレークポイントで、マップの内容を見てください。 Eclipseにはさまざまな時計パネルがあり、特定の瞬間に各変数の内容を見ることができます。

何かが間違っていることに気付いたブレークポイントをヒットしたとき。やめる。データがブレークポイントで変更されたと仮定して、someOtherObject.method(parameter);を調べることができます。

someotherObject.methodには他のメソッドが含まれている可能性があります。このメソッドの中にブレークポイントを置いて、その関数の呼び出しをすべて処理し、プロセスを繰り返します。それ以上メソッドが残らなくなるまで繰り返します。最終的には、問題を絞り込んで答えを得ます。

残念ながら、これらのタイプの問題については、「自分のコードを修正する」という魔法はありません。それはちょうど良い、昔ながらのシャーロック・ホームズスタイルの調査技術と根本的な原因で得ることができる小さなセクションで残されるまで、あなたが問題ではないことを知っているコードの領域を排除するために推論が必要です。何のコードの変更が許可されていない場合は

+0

はい、あなたは正しいかもしれませんが、私は説明したように現在行っていますが、大きな地図を持っていて、実際には右上隅の変化を見ることはできません。値が変更または追加されたかどうかをIDEが教えてくれるのはあまりにも複雑です。 –

+0

状況にもよりますが、あなたのケースではウォッチポイントのように聞こえるのは答えです:) – jmort253

+0

いいえ、それはありません:(メソッドブレークポイントも試みましたが、入力の初期状態を「保存」する方法はわかりませんパラメータはありませんので、私はそれを比較するものがないので、コレクションのサイズも見ることができません。私は古いスタイルの作品を知っています、それは非常に便利ではない、おそらく私はちょっと台無しにします。 –

0

、あなたは

  • この特定のマップ・インスタンスで変更または
  • を見るためにacattleで説明ウォッチポイントのメソッドを使用することができます場合(その状態を変更するマップメソッドにブレークポイントを持っています複数のインスタンスのためにそれをしたい)。マップコードはバイナリのみで、Ctrl-Shift-T(Open Type)を使用して開くことができます。アウトラインビューでput(...)やremove(...)などのメソッドを選択し、アウトラインビューのコンテキストメニューを使用してブレークポイントを追加します。
関連する問題