4

Intellij (v14 および現在は v15) を使用して、Tomcat 7 以降で実行されている Web アプリの外部依存関係 (通常はスナップショット バージョン) から来るまだリリースされていないクラスをデバッグするためにブレークポイントを配置しました。

その外部依存関係をリリース済みバージョンに変更するときは、プロジェクトを再コンパイルしてデバッグ モードで実行します。IntelliJ は、ブレークポイントがブレークポイント リスト ビューに存在しなくなっても、古いクラス ブレークポイントで実行を停止します (メニュー: [実行] > [ブレークポイント] から)。

私は次のことを試しました:

  • アプリを起動する前に、すべてのアーティファクトを消去して再構築し、デプロイされたアプリの依存関係が更新されていることを確認します。
  • 「無効化されたキャッシュ/再起動」機能を実行します。これにより、最愛のファイル変更履歴がクリアされますが、これらのブレークポイントはクリアされません。
  • すべてのブレークポイントを削除: (現在の有効なブレークポイントはクリアされますが、現在のリストにないためファントム ブレークポイントはクリアされません)

私にとってうまくいった唯一のことは、正確な古いソースjarを(可能な限り)再アタッチして、影響を受けるクラスを探し、そこからブレークポイントを削除することです。

これらのファントムブレークポイントをクリアする不便でない方法はありますか?

4

2 に答える 2

8

免責事項: これはおそらくコメントとして最適ですが、制限された文字数には適合しません。


ナイスキャッチ!以前はこの問題が発生したことはありませんでしたが、JDK のバージョンを切り替えることで再現できました。java.io.FileJDK8 から開いて、276 行目にブレークポイントを設定しました。

public File(String pathname) {
    if (pathname == null) { // <= breakpoint here
        throw new NullPointerException();
    }
    this.path = fs.normalize(pathname);
    this.prefixLength = fs.prefixLength(this.path);
}

次に、その行に単純な右中括弧 ( }) がある JDK6 に切り替えました。CTRLただし、 + SHIFT+ (Windows)を押すとF8、ブレークポイントは利用可能ですが、古いソース ファイルの説明があります。

ブレークポイント

これは私に考えさせられたので、ブレークポイントが保存されている場所を見つけようとしましたが、それらはセクション<project root>/.idea/workspace.xmlの下にあることがわかりました<component name="XDebuggerManager">:

<component name="XDebuggerManager">
    <breakpoint-manager>
      <breakpoints>
        ...
        <line-breakpoint enabled="true" type="java-line">
          <url>jar://C:/Program Files/Java/jdk1.8.0_45/src.zip!/java/io/File.java</url>
          <line>275</line>
          <properties />
          <option name="timeStamp" value="4" />
        </line-breakpoint>
      </breakpoints>
      ...

したがって、初期ファイルへの参照を保持しているようです。ローカルリポジトリから古いjarへのパスを参照するのが簡単な場合、maven、gradleなどを使用しているときにブレークポイントがまだリストに表示されるかどうかはわかりませんが、この時点で私はとにかくそれが重要だとは思わないでください。

簡単な回避策 (たぶん?!) : それでも、xml からファントムブレークポイントを手動で削除してファイルを保存すると、IJ は自動的に変更を取得し、設定を更新します。少なくとも、それを行った後、ブレークポイントはリストに表示されなくなりました。

トラッカーをすばやく検索したところ、v14.1.1 (私は現在 14.1.6 を使用しています) に影響するこの問題が明らかになりましたが、これはまだ修正されていないようです。今、私は単純な/まともな方法を考えることができません)。

于 2016-02-23T21:43:57.757 に答える