3

Java 開発者向けの Eclipse IDE を使用しています

バージョン: Helios サービス リリース 1 ビルド ID: 20100917-0705

Tomcat 7.0.37 を使用した Web アプリのリモート デバッグでは、1 行でも変更を加えると、変更がランタイムに反映されないため、war アプリケーションを再コンパイルして再デプロイする必要があります。多くの時間を無駄にしました。メッセージ:

Hot code replace failed - Delete method not implemented

メッセージがわかりません。

デバッグモードでコード変更を自動反映する方法の秘密を知っている人はいますか? ありがとう。

4

3 に答える 3

3

ホットコード置換が機能するには、変更/置換されるコードが実行スタックにある必要があることがわかりました。したがって、停止したメソッドに加えられた変更をホットリプレースできますが、そのメソッドからステップアウトすると、そのメソッドへの変更をホットリプレースすることはできません...への連続した呼び出しで最初にメソッドに戻って停止しない限りメソッド。

于 2013-04-04T15:20:18.950 に答える
1

標準の JVM (Oracle の) では、既存のメソッドのみを変更できます。メソッドの追加と削除、およびクラスの構造の変更 (メソッド、フィールドの移動) はサポートされていません。そのためには、JRebel にアクセスしてください。

注意すべきことの 1 つは、一部のメソッド内の一見「通常のコード」を変更すると、実際には Java コンパイラがメソッドを追加または削除する必要があるため、失敗することです。これは、たとえば、内部クラスで外部クラスのプライベート フィールドにアクセスする場合に発生します。Java コンパイラは、合成アクセサー メソッドを外部クラスに追加して、内部クラスがそれらのフィールドにアクセスできるようにする必要があります。したがって、ホット コード置換に失敗します。また、そのようなフィールドにアクセスするコードを削除すると、Java コンパイラは対応する合成アクセサ メソッドを削除しようとしますが、これも失敗します。

于 2015-04-19T02:02:04.457 に答える
-2

デバッグモードでコード変更を反映する方法はないと思います

  • デバッグ モードでは、プログラム フローをトレースし、特定のコードに問題やエラーがないかどうかを確認します。
  • Tomcatで実行されているEclipseのコード行を指すだけです。eclipse のコードは、アプリケーションを実行するために使用されません。

したがって、Eclipseで行った変更はTomcatコードに反映されません

于 2013-04-04T04:34:38.783 に答える