2012-03-22 8 views
0

eclipseデバッガを使用してJavaアプリケーションをデバッグしています。私はオブジェクトに関する疑問2つのデバッグセッションの間にオブジェクトIDを保持

は、デバッガが私に示しIDS(もJava object ID in jvmを参照してください)。

2つのデバッグセッションでこれらのIDを同一にすることはできますか?だから、私は同じアプリケーションが同じIDを持っている同じアプリケーションを2回(他の後に1つ)デバッグするとき?または、次のようにブレークポイントを設定することが可能です:指定されたIDを持つオブジェクトが関与しているときに何らかのステートメントでブレークしますか?

私は心の中で、コードの特定の行を含まないブレークポイントの定義を持っています。私は、コード行から独立しているブレークポイントを覚えています。 idだけを含むブレークポイント。これらのIDのようなツールを手に入れたデバッガーは、私が提案したような機能を私に提供することはできませんか?

答えて

3

これはできません。 idはデバッガの内部にあり、オブジェクトが作成される(またはシリアル化などから復元される)たびにランダムに生成されます。さらに、そのような方法で財産を悪用しようとするべきではありません。 Object#hashCode

幸いにもJavaはおそらくあなたのニーズに合う何かを持っています。これは、各一意のオブジェクトの(半)固有の識別子です(Object#equalsまで)。したがって、データが同じである限り、オブジェクトをデバッグセッション全体で一貫して識別するために使用できます。

Eclipseは、すべてのクラスのメンバ変数に基づいて、あなたのためのhashCode()を生成することができます。私はあなたのニーズに合っている可能性があり、ハッシュがすべての望ましい特性を持っていることを保証するので、それを使用することをお勧めします。

ブレークポイントに関する限り、正しいオブジェクトをチェックしてブレークポイントを配置するだけです。

+1

ただのhashCode私はEclipseは1 – Attila

+1

@Attilaを実行するための実行から変更されたメモリアドレスに基づいて、デフォルトのものではないことを確認してください。なぜそれは起こりそうな出来事ではないのですか?同じ入力が同じ結果につながる "決定論的な"マシンを扱っているのですか? – dtech

0

デバッグ中にEclipseでIDが何を表しているのかはわかりません(デバッグセッションでオブジェクトを一意に識別するのとは別に) - メモリアドレス、ハンドル(内部または外部)などがあります。オブジェクトは通常動的に作成されたデバッガでは、別の(過去の)デバッグセッションで、あるオブジェクトが別のオブジェクトと同じものであることを認識できません。

IDが作成された順に基づいて割り当てられているとまったく同じオブジェクトが正確に同じ順序で作成された場合、私はこの出来事を想像することができる唯一の方法です - ではない可能性が高いイベントです。

答えはいいえです。

+0

コメント – dtech

+0

@Attilaとして良いだろう生成させることを示唆理由です – Matthias

+1

seme入力が同じ構成で同じ出力につながるという意味で決定的ですが、構成が変更される可能性があります(時間が異なる、OSによって異なるチャンクが割り当てられる、スレッドが異なる織り交互に実行されるなど)。 ) – Attila

関連する問題