Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Eclipseデバッガを活用す
るための31のTips
近藤寛喜(@kompiro)
kompiro@gmail.com
Thanks @shuji_w6e
13年9月29日日曜日
目的
Java開発でEclipseを使ってるエンジニアがデバ
ッグ時に知っておくと得なTipsをまとめました。
Q&A形式です。
基本編と応用編があります。
基本編でも、まとめている時に「これはいい」と
思った機能があったので、そちらも是非目を通し
てくだされば。
デバッグ例のソースコードは https://
github.com/kompiro/debug-donutstore に公開
13年9月29日日曜日
基本編
13年9月29日日曜日
Q1.デバッグするにはどう
すればよいですか?
13年9月29日日曜日
1.ブレークポイントを設定
します
設定したい行の左端をダブルクリック
13年9月29日日曜日
2. Debug Launcherから起
動します。
ツールバー上にある虫アイコンをクリック
13年9月29日日曜日
3. パースペクティブの切
り替えを勧められます。
デバッグ時はデバッグ用のパースペクティブにし
ましょう(Yesを選んでください。)
13年9月29日日曜日
4. 設定した場所からデバ
ッグが開始されます。
緑色の行が、実行中の行です。
13年9月29日日曜日
5. 設定した場所からデバ
ッグが開始されます。
デバッグビュー(Debug)もこんな感じになります。
13年9月29日日曜日
Q2.毎回デバッグパースペ
クティブへの切り替えを聞
かれて鬱陶しいです。な
んとかなりませんか?
Thanks @yujiorama
13年9月29日日曜日
A.ダイアログにチェックを
入れると出なくなります。
13年9月29日日曜日
Q3.デバッグパースペクテ
ィブにはどんなビューが
ありますか?
13年9月29日日曜日
A.基本はこんな感じ
13年9月29日日曜日
下記を追加しておくと便利
Display(表示)ビュー
Expressions(式)ビュー
この2つは後で解説します。
13年9月29日日曜日
Q4. 実行中の変数の値を
見るにはどうすればよい
ですか?
13年9月29日日曜日
A1.変数ビュー(Variables)
で見る
変数ビューではオブジェクトの内容を見られるよ
13年9月29日日曜日
A2. Inspectを実行する
1.見たい変数(下例:store)を選択して、右クリック
2. Inspectを選択
13年9月29日日曜日
A3. 式(Expressions)ビュ
ーで監視
1.監視したい変数(下例:donuts)を選択して、右クリック
2. Watchを選択
13年9月29日日曜日
式が書ける。
ちなみに式ビューでは
13年9月29日日曜日
Q5. 実行中の変数の値を
書き換えるにはどうすれば
よいですか?
13年9月29日日曜日
A1. 変数ビューから書き
換えます。
1.該当の変数を探しだす
2.右クリック->Change Value...
13年9月29日日曜日
A2. 表示(Display)ビュー
から書き換えます。
1.Displayビューを表示(Window->Views->Display)
2.コードを入力、選択し、Execute
13年9月29日日曜日
Q6. 実行中のブレークポ
イントを一時的に無効にで
きますか?
13年9月29日日曜日
A1.ブレークポイントの
無効化
1.Shift+ダブルクリック
13年9月29日日曜日
A1.ブレークポイントの
全無効化
1.ツールバー上のSkip All Breakpointsをクリック
13年9月29日日曜日
Q7. 便利なショートカット
を教えて下さい。
13年9月29日日曜日
A1.Step Into(F5)
実行中のメソッドの中に入ります。
←のアイコンでもOK
13年9月29日日曜日
A2.Step Over(F6)
次の処理に移ります。
←のアイコンでもOK
13年9月29日日曜日
A3.Step Return(F7)
現在のメソッド処理を終えます。
←のアイコンでもOK
13年9月29日日曜日
A4.Resume(F8)
次のブレークポイントまで処理を飛ばします。
←のアイコンでもOK
13年9月29日日曜日
A5.Run to Line(Ctrl+R)
カーソルのある行まで処理を飛ばします。
右クリックからも実行可(Mac:Command+R)
13年9月29日日曜日
A6.Toggle
Breakpoint(Ctrl+Shift+B)
ブレークポイントを設定/解除します
(Mac:Command+Shift+B)
13年9月29日日曜日
A7.Disable
Breakpoint(Shift+Double
Click)
ブレークポイントを無効にします
13年9月29日日曜日
A8.Debug(F11)
前回実行したデバッグを再実行します。
(Mac:Command+F11)
13年9月29日日曜日
Q8.クラスにブレークポイ
ントを貼るとどうなります
か?
13年9月29日日曜日
A.クラスロード時に停止
13年9月29日日曜日
Q9.フィールドにブレーク
ポイントを貼るとどうなりま
すか?
13年9月29日日曜日
A.フィールドにアクセス/
更新があった時に停止
13年9月29日日曜日
Q10.フィールドを更新した
時にのみ停止するように
するには、どうしたらいい
ですか?
13年9月29日日曜日
A.ブレークポイントのプロ
パティで調整
13年9月29日日曜日
Q11.メソッドにブレークポ
イントを貼るとどうなります
か?
13年9月29日日曜日
A.メソッド呼び出し時に
停止
13年9月29日日曜日
Q12.mainが呼び出されるタ
イミングで停止させるには
どうしたらいいですか?
13年9月29日日曜日
A1.mainメソッドにブレーク
ポイントを貼る
13年9月29日日曜日
A2.デバッグのランチャー
に指定する
13年9月29日日曜日
Q13.methodがreturnされ
るタイミングで停止できま
せんか?
13年9月29日日曜日
A.メソッドのブレークポイ
ントのプロパティで指定で
きます。
13年9月29日日曜日
Q14.例外が発生したタイミ
ングで停止できません
か?
13年9月29日日曜日
A.ブレークポイントビュー
から指定できます。
13年9月29日日曜日
応用編
13年9月29日日曜日
Q15. 実行中にコードを書
き換えると、自動で処理を
置き換えられませんか?
13年9月29日日曜日
A. デバッグ中はホットコ
ードリプレースが有効
ホットコードリプレースとは、実行中のコードを書き
換えられる機構です。
※メソッド等のシグネチャ(クラスやメソッドの名前
やパラメータ名、型の指定)が変わると、リプレース
が無効になり、下記のダイアログを表示。
13年9月29日日曜日
Q16. 実環境でデバッグで
きませんか?
13年9月29日日曜日
A.リモートデバッグしまし
ょう
リモートデバッグとは、他のJVMをデバッグする事
です。
JDWP(Java Debug Wire Protocol)を使って通信
できるように起動時に指定します。
他のマシンのJVMとも通信できます。
知っておくと結構べんり。(ant等のデバッグ)
動作しているJVMのクラスを書き換えないとホット
コードリプレースはされない点は注意
13年9月29日日曜日
A.リモートデバッグしまし
ょう
アプリ側の引数例
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost=44000
13年9月29日日曜日
A.リモートデバッグしまし
ょう
それぞれの意味
「-agentlib:jdwp」 JDWP実装のロード指定。
「transport」 通信方法。通常はソケット。Windowsでは共有メモリも指定
可。
「server」 yの場合、起動するJVMがデバッガされる側になります。デバッ
グしたいアプリ側はy
「suspend」 yの場合、接続するまでアプリは起動されません。
「address」 接続のためのアドレスです。アプリ側はポートを指定
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost=44000
13年9月29日日曜日
A.リモートデバッグしまし
ょう
デバッガ側
Debug Configurations...を開く(虫アイコンの右の下三角から)
13年9月29日日曜日
Q17.実環境でmainが実行さ
れた直後からデバッグする
方法はありませんか?
13年9月29日日曜日
A.アプリ起動時の指定を
「suspend=y」にしましょう
それぞれの意味
「-agentlib:jdwp」 JDWP実装のロード指定。
「transport」 通信方法。通常はソケット。Windowsでは共有メモリも指定
可。
「server」 yの場合、起動するJVMがデバッガされる側になります。デバッ
グしたいアプリ側はy
「suspend」 yの場合、接続するまでアプリは起動されません。
「address」 接続のためのアドレスです。アプリ側はポートを指定
-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost=44000
13年9月29日日曜日
Q18.間違えてStep Overし
過ぎました。もう一度デバ
ッグをやり直すしかありま
せんか?
13年9月29日日曜日
A.Drop to Frameする
呼び出しスタック上のFrameを捨てると、そのメソッ
ドが呼び出される前に戻ります。
←このアイコンをクリック
13年9月29日日曜日
A.Drop to Frameする
注意:DBなどの外部リソースのデータや、staticな
フィールド等は元に戻りません。
13年9月29日日曜日
Q19.呼び出し元のメソッド
の状態を知ることはできま
せんか?
13年9月29日日曜日
A.Frameを選びましょう。
呼び出しスタック上のFrameを選択すると、Valuables
ビュー等選択したフレームの中のものになります。
13年9月29日日曜日
Q20.呼び出し階層をブロ
グに貼りたいです。どうす
ればできますか?
Thanks @n3104
13年9月29日日曜日
A.デバッグビューは
コピペ可能
貼り付け例
DonutsStore [Java Application]!
! debug.DonutsStore at localhost:51724!
! ! Thread [main] (Suspended)!
! ! ! DonutsStore.welcome() line: 17!
! ! ! Customer.enter(DonutsStore) line: 17!
! ! ! DonutsStore.main(String[]) line: 10!
! /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/bin/java (2013/09/25 21:46:02)!
13年9月29日日曜日
Q21.ブレークポイントに指
定した回数処理が通った
時に止まるように、ブレー
クポイントを貼るにはどう
すればよいですか?
13年9月29日日曜日
A.BreakpointにHit Count
を指定しましょう。
ブレークポイントに止まる回数を数えてデバッグす
るような状況に重宝します。
13年9月29日日曜日
Q22.ある条件を満たす
時、初めて止まるようにブ
レークポイントを貼るには
どうすればよいですか?
13年9月29日日曜日
A.Breakpointのプロパティ
から条件を指定しましょう。
実行した結果、trueを返した時、停止します。
13年9月29日日曜日
Q23.ある変数が変更され
た時に停止するには、どう
いう条件を設定すればよ
いですか?
13年9月29日日曜日
A.Breakpointのプロパティ
から条件を指定しましょう。
実行した結果、指定した変数が変わった時、停止し
ます。
13年9月29日日曜日
Q24.参照しているオブジ
ェクトを見る方法はありま
せんか?
13年9月29日日曜日
A.変数ビューで「Show
References」を選びましょう
13年9月29日日曜日
Q25.変数ビューの表示が
分かりやすく変更できませ
んか?
13年9月29日日曜日
A.Detail Formatterを使い
ましょう。
13年9月29日日曜日
Q26. sun.*やjava.*等の
パッケージのクラスには
Step Inしたくありません。
飛ばす方法はありません
か?
13年9月29日日曜日
A.Step Filteringを使いま
しょう。
13年9月29日日曜日
Q27.複数のスレッドによる
競合のデバッグをするに
はどうすればよいです
か?
13年9月29日日曜日
A.スレッド停止を選択し、複
数の処理を同時にデバッ
グしましょう。
13年9月29日日曜日
Q28.バックグラウンドで行
われる処理がデバッグを
邪魔します。どうすればデ
バッグしている処理だけ
に限定できますか??
13年9月29日日曜日
A.VM停止を選択し、デバッ
グ中は他の処理を停止しま
しょう。
13年9月29日日曜日
Q29. 起動引数を知る方法
はありませんか?
13年9月29日日曜日
A.デバッグビューから起動
引数を調べられます。
13年9月29日日曜日
Q30. 特定のインスタンス
に注目してブレークポイン
トを貼ることはできません
か?
Thanks @matobaa
13年9月29日日曜日
A.変数ビューのインスタン
スからブレークポイントを
指定できます。
13年9月29日日曜日
A.変数ビューのインスタン
スからブレークポイントを
指定できます。
13年9月29日日曜日
Q31.ソースコードを修正す
ることなく、コンソールに
値を出力することはできま
すか?
13年9月29日日曜日
A.できます
13年9月29日日曜日
おしまい
誤字脱字、もっとこうしたらいい等、フィードバッ
クがあればkompiro@gmail.comにお寄せください。
13年9月29日日曜日
謝辞
フィードバックをお寄せくださった方(スライド順)
@shuji_w6e, @yujiorama, @n3104, @matobaa
13年9月29日日曜日

More Related Content

Eclipseデバッガを活用するための31のtips