Eclipseでブレークポイントが止まらなくなった原因とその対処方法
前置き
ご無沙汰しております。管理人です。
ブログ名を変更しました。
当初の目標は正直低すぎたと考えるようになり、今後はもっと色んな人のためになることをブログにアップしていこうと思ったのがブログ名変更の理由です。
2016年4月からコンサルティング会社に転職したことは、先の記事でもお伝えしたかと思います。それに伴って最近の業務が大幅に変わりました。
なんと、5月からは開発業務に携わっています。言語はJavaです。
初めての開発業務ということで、慣れないことがたくさんあって、日々勉強の毎日です。なので、これからはちょいちょい開発知識的なことをブログにあげていこうかなーと思っている次第です。
ということで、早速ですが本記事の主題へ移ります。
Eclipseでデバッグ中にブレークポイントが止まらない!!
恐らく、Eclipseで開発経験の長い人ほどEclipseでこの問題にぶつかったことは多いのではないのでしょうか。
この問題にぶち当たったとき、多くの方は下記のような一時的対処方法を試されるかと思います。
◆クリーン
◆リフレッシュ
◆Eclipseの再起動 など。
私もこれを試しました。しかし、それでも問題が解消されない。しかも、業務中13時~20時まで、この問題が解消されずはまってしまいました。(笑)本当にきつかったです。(笑)
しかし、調べた結果、有効な対処方法が見つかったのでこの場で共有させていただきます。
Eclipseでデバッグ中にブレークポイントが止まらなくなる原因とは?
調べた結果、下記のようなことが分かりました。
◆原因
JDK6u14のバグ
下記、ORACLEのバグデータベースです。(英語)
Bug ID: JDK-6862295 JDWP threadid changes during debugging session (leading to ignored breakpoints)
超絶簡単に要約すると、
・Eclipseは関係ない。
・メモリが枯渇するとGCが悪さをして、Eclipseの機能が正常に動作しなくなる。
(例:変数やメソッド名などにカーソルを合わせて、Ctrlを押すと「宣言に戻る」などを選べたりすると思いますが、こういう機能が使えなくなります。)
◆原因の詳細(現在はないORACLE日本語のリリースノートより引用)
Java ™ Virtual Machine Tool Interface (JVM TI) のブレークポイントは、並列スカベンジガベージコレクタ (-XX:+UseParallelGC) または並列圧縮ガベージコレクタ (-XX:+UseParallelOldGC) が使用されている場合のみ信頼できます。
ほかのコレクタが使用されている場合は、ブレークポイントが機能しなくなることがあり、フル GC 処理の実行後に JVM TI オブジェクトタグが使用不可になることがあります。Java ™ Debug Interface (JDI) ThreadReference には、JVM TI オブジェクトタグに依存する埋め込みのスレッド ID があるため、この埋め込みのスレッド ID が予期せず変更されることがあります。これにより、スレッドベースの JDI イベントに混乱が発生する可能性があります。
シリアルガベージコレクタ (-XX:+UseSerialGC) はこの問題に対して脆弱ですが、一部のプラットフォームではデフォルトで選択されることに注意してください。この問題を回避するには、コマンド行オプション -XX:+UseParallelGC を使用して並列スカベンジコレクタを明示的に選択します。
Eclipseでブレークポイントが止まらなくなった場合の対処方法
上記の原因詳細でも記載されていますが、改めて分かりやすく作業手順からご説明いたします。
①Eclipse上で「ウィンドウ」→「設定」をクリック
②設定の左サイドバーにある「インストール済みのJRE」から現在使用中のJREを選択して「編集」をクリック
③上から三番目の窓「デフォルトのVM引数」?に下記内容を追記
-XX:+UseParallelGC
④「完了」をクリックして、再ビルドされることを確認して完了。
Eclipseはメモリの枯渇に弱い!
私は今、お客様先の環境にリモートでアクセスしている都合上、比較的どの作業をするにしてもメモリを喰うことが多いです。
ちなみに私がこの問題に陥った時のEclipseのメモリ使用量は600,000Kでした。半端ないですよね・・・。(笑)
なので、ヒープサイズの変更も検討しましたが、そもそもあまり意味はありませんでした。(※元々ヒープサイズは1024に設定していましたしね・・・)
まぁ、このご時世でJDK6u14を使っている人がどれだけいるのかっていう話ですが、もし皆さんもこのような問題にぶち当たった時は、是非本記事でご紹介した対処方法をお試しください。
以上ですーー!