2011-09-13 8 views
5

C/C++アプリケーションをデバッグするときに、ポインタ型へのキャストアドレスのウォッチを作成し、スコープ外になった場合でもその構造体の内容を表示できます。 Javaのようなものを実現することは可能でしょうか?
私がメソッドにいるとしましょう。 "& this"のような時計を追加して、クラスメソッドを終了すると、スコープ外でも内容を見ることができますか?Javaデバッグ - スコープ外の変数を監視する

私の質問に対する答えは「いいえ」なので、私は主に「なぜ」に興味がありますか?説明。これはJVMの制限ですか? JPDAの制限?そのような特殊な質問をするより良い場所はありますか?

答えて

1

C/C++では、その変数にキャストしている任意のポインタを(参照先の領域)見ています。

Javaにはポインタはありません。変数watchのみが可能です。範囲外では存在しません。

なぜあなたはそれをとにかく見たいですか?あなたがそれに腕時計を置くと、それはスコープ内にあるときに正しく監視されます。

+0

オブジェクトはスコープ外に存在します。オブジェクトの大きなグラフとそれを処理する複雑なアルゴリズムがあるとしましょう。私はアルゴリズムがグラフ内の特定のオブジェクトを変更する段階を知りたい。興味のあるインスタンスで何が起こっているのか見守っていきます。 –

+0

うん、私の悪い。しかし、オブジェクトに到達可能な範囲内にある参照がある必要があります。私はあなたが目的のオブジェクトに掘り下げ、範囲であるそのオブジェクトを使用して見る必要があると思います。私はそれが便利ではない、そして時にはサポートされていないことがわかります。 –

0

スコープに含まれていない変数を見ることはできません。

ただし、同じオブジェクトを参照することはできますが、それを指す別の変数が見つかった場合は、そのオブジェクトを見ることができます。

どこからも参照されていないオブジェクトを見ても意味がありません(プログラムの実行には何の影響もありません。もう変更できません。ガベージコレクションされ、全く別のものによってメモリが再利用されます)。

JavaレベルのデバッグツールはJVMメモリ管理の上で動作するため、オブジェクトへの有効な参照が必要なため、ランダムなメモリ領域を覗くことはできません。

+0

私はあなたがその質問を理解するとは思わない。オブジェクトはまだそれへの参照を持っていますが、私は現段階で進んでいる現在のクラスからではありません。私が20回以上のメソッド呼び出しをステップ実行していて、どのオブジェクトがこのオブジェクトを変更しているのかを確認したいとします。 –

+0

20種類のメソッド(呼び出しスタックのどこかにあるかもしれません)に存在する参照を見つけてそれです。 – Thilo

関連する問題