2010-12-01 12 views
5

私はIDEとしてEclipse(書込み、デバッグ)を使用します。デバッグモードでは、ローカル変数を初期化するなどの変更を加えると自動的に反映されます。デバッグモードでEclipseに自動的に反映されるコードの変更はありますか?

しかし、静的変数の値を変更するなどの変更もあります。 VMを再起動する必要があるとのメッセージが表示されることがあります。

ここで問題となるのは、どのような変更が自動的に反映され、どのような変更が反映されないかです。

私はリモートデバッグを使用していますが、Eclipseからプログラムを実行するときに違いがありますか?

答えて

2

これはIDE機能ではなく、リモートデバッグのVM機能です。 VMは、可変イニシャライザのメソッド内でロジックの簡単な変更を処理できるようになりましたが、変更されたクラス構造では処理できません。

リロードは、クラス構造が変更されていないときには通常処理されます。メンバ、メソッド、または内部クラスを追加または追加しないため、クラスメモリの割り当てサイズが変更されるためです。メソッドはメモリサイズを変更しませんが、構造を変更します。

Hereいくつかの説明があります。

3

実際にHotswapが表示されています。メソッド本体の変更のみに制限されています。詳細情報here

0

リモート・デバッグでは、Eclipseが異なるJVM内のクラス・ファイルをスワップできないため、ホット・コードの置換はまったくできません。

リモートデバッガは異なる仮想マシンに接続し、そのリモートマシン内で実行されるコードを監視します。ちょうどソースファイルはローカルです。

+0

Right!私がやることは、JVMが実行されているリモートマシン上でクラスファイルをコンパイルすることです。リモートでデバッグするだけです。 –

0

静的変数は、クラスに一度インスタンス化されるクラス変数です。クラスロード時にインスタンス化されます。したがって、静的変数を変更するには、VMがリロードし、変更された静的変数をインスタンス化する必要があります。

これは私があなたの質問に提供できるすべてです。

0

HotSwapは非常に制限されており、簡単なメソッド本体の変更だけをリロードできます。

JRebelを見ると、フィールド/メソッド/注釈/列挙値の追加/削除など、他のコード変更もリロードできます。 詳細はfeature listをご覧ください。

(JRebelは、OSSおよびScala開発者向けに無料ライセンスが提供されていることに注意してください)