これは便利。後半は意外と知らなかったことも多く勉強になりました。
Eclipseデバッガを活用する31のTips – Fly me to the Luna
http://kompiro.hatenablog.com/entry/2013/09/29/Eclipse%E3%83%87%E3%83%90%E3%83%83%E3%82%AC%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%99%E3%82%8B31%E3%81%AETips
基本的なところから
デバッグの手順から
Q1.デバッグするにはどうすればよいですか?
1.ブレークポイントを設定します 設定したい行の左端をダブルクリック
Q4. 実行中の変数の値を 見るにはどうすればよい ですか?
A1.変数ビュー(Variables) で見る 変数ビューではオブジェクトの内容を見られるよ
A2. Inspectを実行する 1.見たい変数(下例:store)を選択して、右クリック 2. Inspectを選択
A3. 式(Expressions)ビューで監視 1.監視したい変数(下例:donuts)を選択して、右クリック 2. Watchを選択
Q5. 実行中の変数の値を書き換えるにはどうすれば よいですか?
A1. 変数ビューから書き換えます。 1.該当の変数を探しだす 2.右クリック->Change Value…
A2. 表示(Display)ビュー から書き換えます。 1.Displayビューを表示(Window->Views->Display) 2.コードを入力、選択し、Execute
時間短縮必須の便利なショートカット
Q7. 便利なショートカットを教えて下さい。
A1.Step Into(F5) 実行中のメソッドの中に入ります。 ←のアイコンでもOK
A2.Step Over(F6) 次の処理に移ります。 ←のアイコンでもOK
A3.Step Return(F7) 現在のメソッド処理を終えます。 ←のアイコンでもOK
A4.Resume(F8) 次のブレークポイントまで処理を飛ばします。 ←のアイコンでもOK
A5.Run to Line(Ctrl+R) カーソルのある行まで処理を飛ばします。 右クリックからも実行可(Mac:Command+R)
A6.Toggle Breakpoint(Ctrl+Shift+B) ブレークポイントを設定/解除します (Mac:Command+Shift+B)
A7.Disable Breakpoint(Shift+Double Click) ブレークポイントを無効にします
A8.Debug(F11) 前回実行したデバッグを再実行します。 (Mac:Command+F11)
調べたい場所をチョイス
Q8.クラスにブレークポイントを貼るとどうなります か?
A.クラスロード時に停止
Q9.フィールドにブレークポイントを貼るとどうなりま すか?
A.フィールドにアクセス/更新があった時に停止
Q10.フィールドを更新した時にのみ停止するようにするには、どうしたらいい ですか?
A.ブレークポイントのプロ パティで調整
Q11.メソッドにブレークポイントを貼るとどうなります か?
A.メソッド呼び出し時に停止
Q12.mainが呼び出されるタイミングで停止させるには どうしたらいいですか?
A1.mainメソッドにブレークポイントを貼る
A2.デバッグのランチャー に指定する
Q13.methodがreturnされるタイミングで停止できま せんか?
A.メソッドのブレークポイントのプロパティで指定で きます。
Q14.例外が発生したタイミングで停止できませんか?
A.ブレークポイントビュー から指定できます。
フィールドを更新した時にのみ停止。実は知らなかった。他の方法でやってた。
例外が発生したタイミングで停止。知らなかったです。
応用編まで
Q15. 実行中にコードを書き換えると、自動で処理を置き換えられませんか?
A. デバッグ中はホットコードリプレースが有効 ホットコードリプレースとは、実行中のコードを書き 換えられる機構です。
※メソッド等のシグネチャ(クラスやメソッドの名前やパラメータ名、型の指定)が変わると、リプレースが無効になりダイアログを表示。
Q16. 実環境でデバッグできませんか?
A.リモートデバッグしましょう リモートデバッグとは、他のJVMをデバッグする事です。
JDWP(Java Debug Wire Protocol)を使って通信できるように起動時に指定します。
他のマシンのJVMとも通信できます。知っておくと結構べんり。
(ant等のデバッグ) 動作しているJVMのクラスを書き換えないとホット コードリプレースはされない点は注意
A.リモートデバッグしましょう アプリ側の引数例 -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost=44000
A.リモートデバッグしましょう それぞれの意味 「-agentlib:jdwp」 JDWP実装のロード指定。 「transport」 通信方法。
通常はソケット。Windowsでは共有メモリも指定可。
「server」 yの場合、起動するJVMがデバッガされる側になります。
デバッグしたいアプリ側は 「suspend」 の場合、接続するまでアプリは起動されません。
「address」 接続のためのアドレスです。
アプリ側はポートを指定 -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost=44000
A.リモートデバッグしましょう デバッガ側 Debug Configurations…を開く(虫アイコンの右の下三角から)
もう一度デバッグをやり直すしかない?
Q18.間違えてStep Overし過ぎました。もう一度デバッグをやり直すしかありませんか?
A.Drop to Frameする 呼び出しスタック上のFrameを捨てると、そのメソッドが呼び出される前に戻ります。 ←このアイコンをクリック
A.Drop to Frameする 注意:DBなどの外部リソースのデータや、staticなフィールド等は元に戻りません。
Q19.呼び出し元のメソッドの状態を知ることはできませんか?
A.Frameを選びましょう。 呼び出しスタック上のFrameを選択すると、Valuables ビュー等選択したフレームの中のものになります。
Q20.呼び出し階層をブログに貼りたいです。どうすればできますか?
A.デバッグビューは コピペ可能
何回もループで止まるのめんどくさい。
Q21.ブレークポイントに指定した回数処理が通った時に止まるように、ブレークポイントを貼るにはどうすればよいですか?
A.BreakpointにHit Count を指定しましょう。 ブレークポイントに止まる回数を数えてデバッグするような状況に重宝します。
Q22.ある条件を満たす時、初めて止まるようにブレークポイントを貼るにはどうすればよいですか?
A.Breakpointのプロパティから条件を指定しましょう。 実行した結果、trueを返した時、停止します。
Q23.ある変数が変更された時に停止するには、どういう条件を設定すればよいですか?
A.Breakpointのプロパティから条件を指定しましょう。 実行した結果、指定した変数が変わった時、停止し ます。
これでEclipseのデバッグが楽しくなること間違いなし。