ブレークポイントを設定しようとしているときに、Eclipse でこの奇妙なエラーが発生します。
Unable to insert breakpoint Absent Line Number Information
コンパイラオプションからチェックボックスをオンにしましたが、うまくいきませんでした。
ブレークポイントを設定しようとしているときに、Eclipse でこの奇妙なエラーが発生します。
Unable to insert breakpoint Absent Line Number Information
コンパイラオプションからチェックボックスをオンにしましたが、うまくいきませんでした。
Eclipse 3.4.1、Tomcat 6.0 に接続された SUN JVM1.6.0_07 で同じエラー メッセージが表示されました (別のマシン、Sun JVM1.6.0_16 でデバッグ モードで実行すると、デバッグ接続は正しく機能しました)。
ウィンドウ→設定→Java→コンパイラ→クラスファイル生成:「生成されたクラスファイルに行番号属性を追加する」にチェックを入れました。私はきれいに再コンパイルしました。チェックを外して、再コンパイルして、チェックして、再コンパイルしました。プロジェクトがグローバル設定を使用していることを確認しました。それでも同じメッセージ。
使用して、antビルドに切り替えました
<javac srcdir="./src/java" destdir="./bin" debug="true">
それでも、同じメッセージ。
このメッセージの原因と、消えない理由がわかりませんでした。実行中のTomcatデバッグセッションと関係があるように見えましたが、切断されたときに再コンパイルすると問題が解決します. しかし、デバッガーを Tomcat に接続するか、接続されたデバッグ セッション中に新しいブレークポイントを設定すると、再び表示されました。
しかし、メッセージが間違っていることが判明しました。デバッグ前とデバッグ中の両方で、実際にデバッグしてブレークポイントを設定することができました(javap -lでも行番号が表示されました)。だから無視してください:)
これは私の問題を修正しました:
Spring関連の問題については、場合によっては「行番号なし」でクラスを生成することを考慮してください。たとえば、@Service
インターフェイスのない注釈付きクラスの場合、インターフェイスを追加するとデバッグできます。完全な例については、こちらを参照してください。
@Service("SkillService")
public class TestServiceWithoutInterface {
public void doSomething() {
System.out.println("Hello TestServiceWithoutInterface");
}
}
上記のサービスには、Spring によって生成されたインターフェイスがあり、「行番号の欠落」が発生します。実際のインターフェイスを追加すると、生成の問題が解決されます。
public interface TestService {
void doSomething();
}
@Service("SkillService")
public class TestServiceImpl implements TestService {
public void doSomething() {
System.out.println("Hello TestServiceImpl");
}
}
この問題に対する BlackBerry SDK 側からの答えがあります。何らかの理由で、コンパイラのオプションを何度変更しても、実際の基本設定ファイルは変更されませんでした。
プロジェクトの .settings フォルダーで、org.eclipse.jdt.core.prefsというファイルを探します。
そこで、設定を手動で変更できます。
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
編集:これに加えて、Eclipseが与えるアラートを無視できる場合があり、それでも必要な場所で停止することに気づきました...好奇心と好奇心...これを、対処することを学ぶバケツに入れます開発者として働いているとき。
これは私のために働いた:
Window --> Preferences --> Java --> Compiler --> Classfile Generation
では、すべてのオプションを にする必要がありますTrue
。debug="true"
で作成されます。<javac>
Debug
モードでTomcatを再起動しましたこれがまだ関連しているかどうかはわかりませんが、おそらく別の船員がこれを役に立つと思うでしょう.
このメッセージは、デバッグ フラグをオフにしてコンパイルされたクラス ファイルがある場合に表示されます。
Eclipse では、前述のオプションでオンにできます。
ウィンドウ --> 設定 --> Java --> コンパイラ --> クラスファイル生成: 「生成されたクラス ファイルに行番号属性を追加」
ただし、jar ファイルがある場合は、コンパイルされた出力が得られます。この問題を解決する簡単な方法はありません。
ソースにアクセスでき、ant を使用して jar ファイルを取得する場合は、ant タスクを次のように変更できます。
<javac destdir="${build.destDir}" srcdir="${build.srcDir}" source="1.6" fork="true" target="${javac.target}" debug="on" debuglevel="lines,vars,source" deprecation="on" memoryInitialSize="512m" memoryMaximumSize="1024m" optimize="true" >
楽しいデバッグ..
Eclipse からデバッグ モードで Tomcat を起動しようとしたときに、この問題が発生しました。コンパイルとデプロイを処理する ANT ビルド ファイルがありました。(他の回答で述べたように) デバッグ フラグを true に設定し、アプリケーションを再デプロイすると、正常に動作しました。
<javac srcdir="./src/java" destdir="./bin" debug="true">
注:デバッグ フラグを追加して再コンパイルしたばかりの場合でも、Eclipse がクラス ファイルをデバッグしているため、アプリケーションをサーバーに再デプロイする必要があります。非常に明白ですが、1 時間ほど頭をかきむしり、なぜ機能しないのか疑問に思うのは簡単です (私を信じてください)。
使用する を変更してみてくださいjre
。代わりjre
に のフォルダに を設定してください。JDK
このメッセージのもう 1 つの理由を見つけました。私はScalaをプログラミングしていました。解決策は次のとおりです。
これでデバッグが機能するはずです。Scala IDE プラグインをインストールしたことに注意してください。このオプションは、持っていない場合は使用できない場合があります。
私の状況は似ていました:
spyTask = spy(new Task())
Task.java
)このブレークポイントは、実行するたびに問題のエラーを生成しますDebug As... > JUnit Test
この問題に対処するために、ブレークポイントを実際のテスト (TaskTest.java 内) に移動しました。実行が停止したら、元の場所 (Task.java 内) にブレークポイントを追加しました。
それでも同じエラーが発生しましたが、「OK」をクリックすると、ブレークポイントは正常に機能しました。
誰かを助けることを願って、
-gmale
Spring AOP でこのメッセージを受け取りました (CGLIB ライブラリから来ているようです)。[無視] をクリックしても問題なく動作するようですが、まだデバッグできます。
jettyサーバーで作成し、ANTで新しい.warファイルをコンパイルすると、同じ問題が発生しました。以前に書かれたように Java Compiler を設定した後、同じバージョンの jdk/jre コンパイラとビルド パス (jdk 1.6v33、jdk 1.7 など) を作成する必要があります。
私はすべてをしましたが、まだ機能していません。解決策は、コンパイルされた.classファイルと生成されたwarファイルのターゲットを削除することで、現在は機能しています:)
上記のことは私にとってはうまくいきませんでした。以下のソリューションが最終的に機能しました。Debug Configurations -> Classpath -> User Entries -> (デバッグするプロジェクトの src フォルダーを追加します。)
JBoss 7.1 で同じエラーが発生しました。そして、Zefiro と同じことをしました。エラーを無視しただけで、ブレークポイントを正常に配置できました。私の場合、私は思考アリビルダーを構築していましたが、これは私の javac タスクです:
<javac
srcdir="${src.dir}"
destdir="${build.classes.dir}"
includeantruntime="false"
debug="${debug}"
verbose="false"
debuglevel="lines,vars,source"
source="1.6"
target="1.6">
<!-- Sppressing warning for setting an older source without bootclasspath
(see: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source) -->
<compilerarg value="-Xlint:-options"/>
<classpath>
<fileset dir="${lib.dir}" includes="*.jar" />
<fileset dir="${jboss.lib.dir}" includes="**/*.jar" />
</classpath>
</javac>
同じ問題が発生しました。解決策を探すのに多くの時間を費やしましたが、これらの解決策は役に立たないので、すべてのケースを自己研究し、最終的にJDKバージョン間の競合であることがわかりました。以下は、問題を解決するための手順です。 1. JDK および JRE バージョンをすべて削除し、1 つのバージョンのみを保持します。2. Java_HOME システムの設定と Eclipse の Java コンパイラは同じです。場合によっては、上記のエラーが消えないことがありますが、デバッグ モデルで実行できます。
ある特定のプロジェクトで同じ問題が発生し、ウィンドウ - >設定で行番号属性をリセットしようとし続けました...その後、各プロジェクトには行番号属性の独自の設定があることに気付きました。プロジェクトを右クリックしてプロパティに移動し、JavaCompiler を選択して、「行番号属性を追加...」のチェックボックスをオンにします。
ロギング マネージャーをデバッグしようとしていたため、jre を jdk に変更してから、「メイン」タブの「Java ランタイム環境」でこの jdk を選択する必要がありました。デバッグ構成の「ランタイム JRE」は、すべて順調でした。
以下を確認/実行します。
1) [ウィンドウ --> 設定 --> Java --> コンパイラ --> クラスファイルの生成] の下で、すべてのオプションを True にする必要があります。
(1) Add variable attributes...
(2) Add line number attributes...
(3) Add source file name...
(4) Preserve unused (never read) local variables
2) プロジェクトの .settings フォルダーで、org.eclipse.jdt.core.prefs というファイルを探します。org.eclipse.jdt.core.compiler.debug.lineNumber=generate を確認または設定します
3) それでもエラー ウィンドウが表示される場合は、チェックボックスをクリックしてエラー メッセージを表示しないようにします。
4) プロジェクトをクリーンアップしてビルドします。デバッグを開始します。
通常、エラー ウィンドウは表示されなくなり、デバッグ情報が正しく表示されます。
jar のコンパイル/ビルド中に上記のすべてのことを行いましたが、それでも同じ問題がありました。
最終的に、サーバーの起動中に以下にリストされている jvmarg の変更が最終的に機能しました。
<!-- jvmarg value="${agentfile}" /-->
<!-- jvmarg value="-javaagent:./lib/foobar /-->
<!-- jvmarg value="-Xbootclasspath/a:/foo /-->
<jvmarg value="-Xdebug" />
次に、サーバーを起動すると、ブレークポイントに到達できます。javaagent が何らかの形で Eclipse の行番号検出機能を妨害していたのではないかと思います。
以前の解決策のほとんどを試しましたが、まだ問題がありました。これは私が次にしたことです:
この手順の一部は必要ないかもしれませんが、「念のため」です。
したがって、以前の解決策がまだ機能しない場合。これを試して。役に立てば幸いです;-)
私もこの問題に遭遇しました。Ant ビルド スクリプトを使用しています。私はレガシーアプリケーションに取り組んでいるので、jdk バージョン 1.4.2 を使用しています。これは以前は機能していたので、調べ始めました。JRE タブのデバッグ構成で、Java のバージョンが 1.7 に設定されていることに気付きました。1.4に戻したら動きました。
これが役立つことを願っています。
誰かが Java のソース コードをデバッグしようとしている場合、これが私にとって有効な唯一の解決策です。上記の回答のほとんどは、コンパイラ オプションを設定して行番号を生成することについて述べています。これは、ソース コードをデバッグする予定のプロジェクトが、 jar ではなく jar をJava Build Path --> Library --> JRE System Library
指しているためです。jar内にバンドルされているクラスは、特定のオプションで事前にコンパイルされているため、コンパイラ オプションの設定は考慮されません。解決策は、 jarを指すようにプロジェクトを再構成することです。jar内のクラスは、コンパイラ オプション設定を尊重します。したがって、プロジェクトを更新するとjre
jdk
jre
JRE System Library
jdk
jdk
JRE System Library
jarを指すようにすると、jdk
Java ソース コードのデバッグが開始されます。
Tomcatサーバーを使用したWebプロジェクトの場合、次の手順を使用して解決しました。
上記の解決策が機能せず、Spring Bean インジェクションを行った後にその問題が発生し始めた場合、インジェクトされたクラスにインターフェイスを使用しなかったことが問題である可能性があります。インターフェイスを実装するクラスでインジェクションを実行すると、問題が解決します。例については、次のリンクをたどってください: Bean 作成のためのブレークポイントの問題をインストールできません