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

34,383 views

Published on

Published in: Technology
0 Comments
76 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
34,383
On SlideShare
0
From Embeds
0
Number of Embeds
9,050
Actions
Shares
0
Downloads
182
Comments
0
Likes
76
Embeds 0
No embeds

No notes for slide

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

  1. 1. Eclipseデバッガを活用す るための31のTips 近藤寛喜(@kompiro) kompiro@gmail.com Thanks @shuji_w6e 13年9月29日日曜日
  2. 2. 目的 Java開発でEclipseを使ってるエンジニアがデバ ッグ時に知っておくと得なTipsをまとめました。 Q&A形式です。 基本編と応用編があります。 基本編でも、まとめている時に「これはいい」と 思った機能があったので、そちらも是非目を通し てくだされば。 デバッグ例のソースコードは https:// github.com/kompiro/debug-donutstore に公開 13年9月29日日曜日
  3. 3. 基本編 13年9月29日日曜日
  4. 4. Q1.デバッグするにはどう すればよいですか? 13年9月29日日曜日
  5. 5. 1.ブレークポイントを設定 します 設定したい行の左端をダブルクリック 13年9月29日日曜日
  6. 6. 2. Debug Launcherから起 動します。 ツールバー上にある虫アイコンをクリック 13年9月29日日曜日
  7. 7. 3. パースペクティブの切 り替えを勧められます。 デバッグ時はデバッグ用のパースペクティブにし ましょう(Yesを選んでください。) 13年9月29日日曜日
  8. 8. 4. 設定した場所からデバ ッグが開始されます。 緑色の行が、実行中の行です。 13年9月29日日曜日
  9. 9. 5. 設定した場所からデバ ッグが開始されます。 デバッグビュー(Debug)もこんな感じになります。 13年9月29日日曜日
  10. 10. Q2.毎回デバッグパースペ クティブへの切り替えを聞 かれて鬱陶しいです。な んとかなりませんか? Thanks @yujiorama 13年9月29日日曜日
  11. 11. A.ダイアログにチェックを 入れると出なくなります。 13年9月29日日曜日
  12. 12. Q3.デバッグパースペクテ ィブにはどんなビューが ありますか? 13年9月29日日曜日
  13. 13. A.基本はこんな感じ 13年9月29日日曜日
  14. 14. 下記を追加しておくと便利 Display(表示)ビュー Expressions(式)ビュー この2つは後で解説します。 13年9月29日日曜日
  15. 15. Q4. 実行中の変数の値を 見るにはどうすればよい ですか? 13年9月29日日曜日
  16. 16. A1.変数ビュー(Variables) で見る 変数ビューではオブジェクトの内容を見られるよ 13年9月29日日曜日
  17. 17. A2. Inspectを実行する 1.見たい変数(下例:store)を選択して、右クリック 2. Inspectを選択 13年9月29日日曜日
  18. 18. A3. 式(Expressions)ビュ ーで監視 1.監視したい変数(下例:donuts)を選択して、右クリック 2. Watchを選択 13年9月29日日曜日
  19. 19. 式が書ける。 ちなみに式ビューでは 13年9月29日日曜日
  20. 20. Q5. 実行中の変数の値を 書き換えるにはどうすれば よいですか? 13年9月29日日曜日
  21. 21. A1. 変数ビューから書き 換えます。 1.該当の変数を探しだす 2.右クリック->Change Value... 13年9月29日日曜日
  22. 22. A2. 表示(Display)ビュー から書き換えます。 1.Displayビューを表示(Window->Views->Display) 2.コードを入力、選択し、Execute 13年9月29日日曜日
  23. 23. Q6. 実行中のブレークポ イントを一時的に無効にで きますか? 13年9月29日日曜日
  24. 24. A1.ブレークポイントの 無効化 1.Shift+ダブルクリック 13年9月29日日曜日
  25. 25. A1.ブレークポイントの 全無効化 1.ツールバー上のSkip All Breakpointsをクリック 13年9月29日日曜日
  26. 26. Q7. 便利なショートカット を教えて下さい。 13年9月29日日曜日
  27. 27. A1.Step Into(F5) 実行中のメソッドの中に入ります。 ←のアイコンでもOK 13年9月29日日曜日
  28. 28. A2.Step Over(F6) 次の処理に移ります。 ←のアイコンでもOK 13年9月29日日曜日
  29. 29. A3.Step Return(F7) 現在のメソッド処理を終えます。 ←のアイコンでもOK 13年9月29日日曜日
  30. 30. A4.Resume(F8) 次のブレークポイントまで処理を飛ばします。 ←のアイコンでもOK 13年9月29日日曜日
  31. 31. A5.Run to Line(Ctrl+R) カーソルのある行まで処理を飛ばします。 右クリックからも実行可(Mac:Command+R) 13年9月29日日曜日
  32. 32. A6.Toggle Breakpoint(Ctrl+Shift+B) ブレークポイントを設定/解除します (Mac:Command+Shift+B) 13年9月29日日曜日
  33. 33. A7.Disable Breakpoint(Shift+Double Click) ブレークポイントを無効にします 13年9月29日日曜日
  34. 34. A8.Debug(F11) 前回実行したデバッグを再実行します。 (Mac:Command+F11) 13年9月29日日曜日
  35. 35. Q8.クラスにブレークポイ ントを貼るとどうなります か? 13年9月29日日曜日
  36. 36. A.クラスロード時に停止 13年9月29日日曜日
  37. 37. Q9.フィールドにブレーク ポイントを貼るとどうなりま すか? 13年9月29日日曜日
  38. 38. A.フィールドにアクセス/ 更新があった時に停止 13年9月29日日曜日
  39. 39. Q10.フィールドを更新した 時にのみ停止するように するには、どうしたらいい ですか? 13年9月29日日曜日
  40. 40. A.ブレークポイントのプロ パティで調整 13年9月29日日曜日
  41. 41. Q11.メソッドにブレークポ イントを貼るとどうなります か? 13年9月29日日曜日
  42. 42. A.メソッド呼び出し時に 停止 13年9月29日日曜日
  43. 43. Q12.mainが呼び出されるタ イミングで停止させるには どうしたらいいですか? 13年9月29日日曜日
  44. 44. A1.mainメソッドにブレーク ポイントを貼る 13年9月29日日曜日
  45. 45. A2.デバッグのランチャー に指定する 13年9月29日日曜日
  46. 46. Q13.methodがreturnされ るタイミングで停止できま せんか? 13年9月29日日曜日
  47. 47. A.メソッドのブレークポイ ントのプロパティで指定で きます。 13年9月29日日曜日
  48. 48. Q14.例外が発生したタイミ ングで停止できません か? 13年9月29日日曜日
  49. 49. A.ブレークポイントビュー から指定できます。 13年9月29日日曜日
  50. 50. 応用編 13年9月29日日曜日
  51. 51. Q15. 実行中にコードを書 き換えると、自動で処理を 置き換えられませんか? 13年9月29日日曜日
  52. 52. A. デバッグ中はホットコ ードリプレースが有効 ホットコードリプレースとは、実行中のコードを書き 換えられる機構です。 ※メソッド等のシグネチャ(クラスやメソッドの名前 やパラメータ名、型の指定)が変わると、リプレース が無効になり、下記のダイアログを表示。 13年9月29日日曜日
  53. 53. Q16. 実環境でデバッグで きませんか? 13年9月29日日曜日
  54. 54. A.リモートデバッグしまし ょう リモートデバッグとは、他のJVMをデバッグする事 です。 JDWP(Java Debug Wire Protocol)を使って通信 できるように起動時に指定します。 他のマシンのJVMとも通信できます。 知っておくと結構べんり。(ant等のデバッグ) 動作しているJVMのクラスを書き換えないとホット コードリプレースはされない点は注意 13年9月29日日曜日
  55. 55. A.リモートデバッグしまし ょう アプリ側の引数例 -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost=44000 13年9月29日日曜日
  56. 56. 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日日曜日
  57. 57. A.リモートデバッグしまし ょう デバッガ側 Debug Configurations...を開く(虫アイコンの右の下三角から) 13年9月29日日曜日
  58. 58. Q17.実環境でmainが実行さ れた直後からデバッグする 方法はありませんか? 13年9月29日日曜日
  59. 59. 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日日曜日
  60. 60. Q18.間違えてStep Overし 過ぎました。もう一度デバ ッグをやり直すしかありま せんか? 13年9月29日日曜日
  61. 61. A.Drop to Frameする 呼び出しスタック上のFrameを捨てると、そのメソッ ドが呼び出される前に戻ります。 ←このアイコンをクリック 13年9月29日日曜日
  62. 62. A.Drop to Frameする 注意:DBなどの外部リソースのデータや、staticな フィールド等は元に戻りません。 13年9月29日日曜日
  63. 63. Q19.呼び出し元のメソッド の状態を知ることはできま せんか? 13年9月29日日曜日
  64. 64. A.Frameを選びましょう。 呼び出しスタック上のFrameを選択すると、Valuables ビュー等選択したフレームの中のものになります。 13年9月29日日曜日
  65. 65. Q20.呼び出し階層をブロ グに貼りたいです。どうす ればできますか? Thanks @n3104 13年9月29日日曜日
  66. 66. 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日日曜日
  67. 67. Q21.ブレークポイントに指 定した回数処理が通った 時に止まるように、ブレー クポイントを貼るにはどう すればよいですか? 13年9月29日日曜日
  68. 68. A.BreakpointにHit Count を指定しましょう。 ブレークポイントに止まる回数を数えてデバッグす るような状況に重宝します。 13年9月29日日曜日
  69. 69. Q22.ある条件を満たす 時、初めて止まるようにブ レークポイントを貼るには どうすればよいですか? 13年9月29日日曜日
  70. 70. A.Breakpointのプロパティ から条件を指定しましょう。 実行した結果、trueを返した時、停止します。 13年9月29日日曜日
  71. 71. Q23.ある変数が変更され た時に停止するには、どう いう条件を設定すればよ いですか? 13年9月29日日曜日
  72. 72. A.Breakpointのプロパティ から条件を指定しましょう。 実行した結果、指定した変数が変わった時、停止し ます。 13年9月29日日曜日
  73. 73. Q24.参照しているオブジ ェクトを見る方法はありま せんか? 13年9月29日日曜日
  74. 74. A.変数ビューで「Show References」を選びましょう 13年9月29日日曜日
  75. 75. Q25.変数ビューの表示が 分かりやすく変更できませ んか? 13年9月29日日曜日
  76. 76. A.Detail Formatterを使い ましょう。 13年9月29日日曜日
  77. 77. Q26. sun.*やjava.*等の パッケージのクラスには Step Inしたくありません。 飛ばす方法はありません か? 13年9月29日日曜日
  78. 78. A.Step Filteringを使いま しょう。 13年9月29日日曜日
  79. 79. Q27.複数のスレッドによる 競合のデバッグをするに はどうすればよいです か? 13年9月29日日曜日
  80. 80. A.スレッド停止を選択し、複 数の処理を同時にデバッ グしましょう。 13年9月29日日曜日
  81. 81. Q28.バックグラウンドで行 われる処理がデバッグを 邪魔します。どうすればデ バッグしている処理だけ に限定できますか?? 13年9月29日日曜日
  82. 82. A.VM停止を選択し、デバッ グ中は他の処理を停止しま しょう。 13年9月29日日曜日
  83. 83. Q29. 起動引数を知る方法 はありませんか? 13年9月29日日曜日
  84. 84. A.デバッグビューから起動 引数を調べられます。 13年9月29日日曜日
  85. 85. Q30. 特定のインスタンス に注目してブレークポイン トを貼ることはできません か? Thanks @matobaa 13年9月29日日曜日
  86. 86. A.変数ビューのインスタン スからブレークポイントを 指定できます。 13年9月29日日曜日
  87. 87. A.変数ビューのインスタン スからブレークポイントを 指定できます。 13年9月29日日曜日
  88. 88. Q31.ソースコードを修正す ることなく、コンソールに 値を出力することはできま すか? 13年9月29日日曜日
  89. 89. A.できます 13年9月29日日曜日
  90. 90. おしまい 誤字脱字、もっとこうしたらいい等、フィードバッ クがあればkompiro@gmail.comにお寄せください。 13年9月29日日曜日
  91. 91. 謝辞 フィードバックをお寄せくださった方(スライド順) @shuji_w6e, @yujiorama, @n3104, @matobaa 13年9月29日日曜日

×