Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
#ccc_h4
Java デバッガ活用術
∼勘デバッグ・print デバッグから抜けだそう∼
@yusuke
株式会社サムライズム 山本裕介
#ccc_h4
【デバッグ】
デバッグ (debug) とはコンピュータプログラムや電
気機器中のバグ・欠陥を発見および修正し、動作を
仕様通りのものとするための作業である。サブシス
テムが密結合であると、1箇所の変更が別の箇所での
バグを作り...
#ccc_h4
バグ発見のタイミング
• コーディング中!
• ユニットテスト中!
• CI環境!
• 結合/ステージング環境!
• プロダクション環境
早
遅
#ccc_h4
デバッグの難易度
• コーディング中!
• ユニットテスト中!
• CI環境!
• 結合/ステージング環境!
• プロダクション環境
低
高
デバッガが活躍
#ccc_h4
デバッガ vs ユニットテスト
#ccc_h4
デバッガ vs ユニットテスト
• ユニットテスト!
• 実装が期待通りに動くことを確認!
• インプットに対して期待するアウトプットが
出るか
#ccc_h4
デバッガ vs ユニットテスト
• デバッガ!
• 期待通りに動いていない 実装を掘り下げる!
• 多量のdebug / print文でコードを汚さない
#ccc_h4
デバッガ vs ユニットテスト
• ユニットテストでデバッグ!
• デバッグ目的でユニットテスト作成!
• 粒度が細かくなりすぎことも!
• ユニットテストはリグレッションを発見できる
最低限のセット!
• ロジックの確認、デバ...
#ccc_h4
デバッグの方法
• 再現条件の確認!
• テストケースの作成!
• 当該コードの修正
非常にむずかしい
デバッガで確認
#ccc_h4
デバッガの活用
#ccc_h4
デバッガのしてくれること
• プログラムを任意の箇所で一時停止!
• ステップ実行!
• 即時評価!
• 値の書き換え
等々
#ccc_h4
デバッガがしてくれないこと
• パフォーマンスボトルネックの発見!
• タイミングissueの原因究明!
• 結合箇所の問題発見
#ccc_h4
今日説明すること
• ラインブレークポイント!
• ステップ実行!
• 条件付ブレークポイント!
• 式評価 / ウォッチ
#ccc_h4
行ブレークポイント、ステップ実行
• 指定した行に到達するとプログラムが一時停止!
• (ダブル)クリック/ショートカットでブレークポ
イント設定!
#ccc_h4
step over / step into
• step over!
• 現在のクラスをステップ実行!
• step into!
• クラスメソッド内に潜り込んでステップ実行
#ccc_h4
resume / continue
• resume / continue!
• ブレーク中のスレッドを再開!
• 次のブレークポイントまで動作
#ccc_h4
ブレーク中に出来る主なこと
• 変数の値の確認!
• 変数の値の変更!
• 式評価
#ccc_h4
ショートカット一覧
Eclipse NetBeans IntelliJ IDEA
ブレークポイント設定 Shift+ +B + F8 + F8
ブレークポイント一覧 ⌥+ +Q→B Shift+Ctrl+5 Shift+ +F8...
#ccc_h4
ブレークポイントで良くある問題
• ループ内をデバッグしたい!
• ブレークポイントを設定するが問題発生まで何
回もブレークしてしまう!
#ccc_h4
ブレークポイントで良くある問題
• ループ内をデバッグしたい!
• ブレークポイントを設定するが問題発生まで何
回もブレークしてしまう!
ヒットカウント / 条件付ブレークポイント
#ccc_h4
ヒットカウント / 条件付ブレークポイント
#ccc_h4
ヒットカウント / 条件付ブレークポイント
#ccc_h4
ヒットカウント / 条件付ブレークポイント
#ccc_h4
リモートデバッグ
#ccc_h4
リモートデバッグ
• JPDA(Java Platform Debugger Architecture)!
• デバッグをするための標準インタフェース!
• IDE上で実行/デバッグする際も利用!
• IDE外、リモートマシンの...
#ccc_h4
リモートデバッグの方法
• Javaの実行オプションを追加
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
“y”にするとデバッガアタッチまで...
#ccc_h4
デバッガのアタッチ
#ccc_h4
デバッガのアタッチ
#ccc_h4
デバッガのアタッチ
#ccc_h4
プロダクション環境のデバッグ
• パフォーマンス!
• セキュリティ
#ccc_h4
プロダクション環境のデバッグ
• パフォーマンス!
• デバッグ有効化はパフォーマンス影響なし!
• アタッチ時は影響有り!
• ホットスポットに条件付ブレークポイント
を設定する場合は注意
#ccc_h4
プロダクション環境のデバッグ
• セキュリティ!
• 大変脆弱 / 認証機構はない!
• 不要な場合は無効に
#ccc_h4
プロダクション環境のデバッグ
• セキュリティ!
• 大変脆弱 / 認証機構はない!
• 不要な場合は無効に!
• プロダクション環境ではリスンアドレスを指定!
!
!
• リモート接続はsshトンネル経由で
-agentlib...
#ccc_h4
デバッグあるある問題
#ccc_h4
デバッガあるある問題
• ここだ!とブレークポイント設定!
#ccc_h4
デバッガあるある問題
• ここだ!とブレークポイント設定!
• 事件はブレークポイント以前で起きていた!!
#ccc_h4
デバッガあるある問題
• ここだ!とブレークポイント設定!
• 事件はブレークポイント以前で起きていた!!
• もっと手前にブレークポイント設定!
#ccc_h4
デバッガあるある問題
• step実行、step実行・・・!
!
#ccc_h4
デバッガあるある問題
• step実行、step実行・・・!
! !
!
• 飛び越した!step intoしておくべきだった・・!
#ccc_h4
デバッグあるある問題
• Jenkins/Bamboo/TeamCityなどCI環境でのみ再現!
• たまにしか再現しない!
• print文を入れたら再現しない!
• 他システムとの結合箇所でまれに失敗!
• 再現条件がよくわ...
#ccc_h4
一般的な解決方法
#ccc_h4
一般的な解決方法
• 超能力を使う!
• 超能力を使う!
• 超能力を使う!
• 超能力を使う!
• 超能力を使う!
• 超能力を使う
#ccc_h4
超能力を持ち合わせていない方
#ccc_h4
Chronon Time Travellingデバッガ
• Chronon Systems, LLC.
#ccc_h4
デモ
#ccc_h4
でもお高いんでしょ?
#ccc_h4
IntelliJ IDEAを持っていれば無料!
#ccc_h4
他の使い方
• CI環境で稀に発生するバグの記録を後で確認!
• プロダクション環境で記録!
• Chronon Recording Server!
• 記録し続けてローテート、最長n日保存!
• 任意のタイミングで記録開始・停...
#ccc_h4
まとめ
• デバッガを利用するタイミング!
• デバッグ時!!
• 一時的なデバッグ用のデバッグ文は入れない!
• ショートカット、条件付ブレークポイントで効
率的にデバッグ!
• オフラインデバッグにはChronon Time...
#ccc_h4
ありがとうございました
@yusuke
Upcoming SlideShare
Loading in …5
×

Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4

20,967 views

Published on

Published in: Technology
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2Q98JRS ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ❶❶❶ http://bit.ly/2Q98JRS ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4

  1. 1. #ccc_h4 Java デバッガ活用術 ∼勘デバッグ・print デバッグから抜けだそう∼ @yusuke 株式会社サムライズム 山本裕介
  2. 2. #ccc_h4 【デバッグ】 デバッグ (debug) とはコンピュータプログラムや電 気機器中のバグ・欠陥を発見および修正し、動作を 仕様通りのものとするための作業である。サブシス テムが密結合であると、1箇所の変更が別の箇所での バグを作り出すので、バグの修正がより困難となる。 http://ja.wikipedia.org/wiki/デバッグ より
  3. 3. #ccc_h4 バグ発見のタイミング • コーディング中! • ユニットテスト中! • CI環境! • 結合/ステージング環境! • プロダクション環境 早 遅
  4. 4. #ccc_h4 デバッグの難易度 • コーディング中! • ユニットテスト中! • CI環境! • 結合/ステージング環境! • プロダクション環境 低 高 デバッガが活躍
  5. 5. #ccc_h4 デバッガ vs ユニットテスト
  6. 6. #ccc_h4 デバッガ vs ユニットテスト • ユニットテスト! • 実装が期待通りに動くことを確認! • インプットに対して期待するアウトプットが 出るか
  7. 7. #ccc_h4 デバッガ vs ユニットテスト • デバッガ! • 期待通りに動いていない 実装を掘り下げる! • 多量のdebug / print文でコードを汚さない
  8. 8. #ccc_h4 デバッガ vs ユニットテスト • ユニットテストでデバッグ! • デバッグ目的でユニットテスト作成! • 粒度が細かくなりすぎことも! • ユニットテストはリグレッションを発見できる 最低限のセット! • ロジックの確認、デバッグはデバッガで
  9. 9. #ccc_h4 デバッグの方法 • 再現条件の確認! • テストケースの作成! • 当該コードの修正 非常にむずかしい デバッガで確認
  10. 10. #ccc_h4 デバッガの活用
  11. 11. #ccc_h4 デバッガのしてくれること • プログラムを任意の箇所で一時停止! • ステップ実行! • 即時評価! • 値の書き換え 等々
  12. 12. #ccc_h4 デバッガがしてくれないこと • パフォーマンスボトルネックの発見! • タイミングissueの原因究明! • 結合箇所の問題発見
  13. 13. #ccc_h4 今日説明すること • ラインブレークポイント! • ステップ実行! • 条件付ブレークポイント! • 式評価 / ウォッチ
  14. 14. #ccc_h4 行ブレークポイント、ステップ実行 • 指定した行に到達するとプログラムが一時停止! • (ダブル)クリック/ショートカットでブレークポ イント設定!
  15. 15. #ccc_h4 step over / step into • step over! • 現在のクラスをステップ実行! • step into! • クラスメソッド内に潜り込んでステップ実行
  16. 16. #ccc_h4 resume / continue • resume / continue! • ブレーク中のスレッドを再開! • 次のブレークポイントまで動作
  17. 17. #ccc_h4 ブレーク中に出来る主なこと • 変数の値の確認! • 変数の値の変更! • 式評価
  18. 18. #ccc_h4 ショートカット一覧 Eclipse NetBeans IntelliJ IDEA ブレークポイント設定 Shift+ +B + F8 + F8 ブレークポイント一覧 ⌥+ +Q→B Shift+Ctrl+5 Shift+ +F8 デバッグ実行 + F11 + F5 Shift+Ctrl+F9 step over F6 F8 F8 step into F5 F7 F7 resume/continue F8 F5 F9 式評価 Window > Show View > Expressions + F9 ⌥ + F8
  19. 19. #ccc_h4 ブレークポイントで良くある問題 • ループ内をデバッグしたい! • ブレークポイントを設定するが問題発生まで何 回もブレークしてしまう!
  20. 20. #ccc_h4 ブレークポイントで良くある問題 • ループ内をデバッグしたい! • ブレークポイントを設定するが問題発生まで何 回もブレークしてしまう! ヒットカウント / 条件付ブレークポイント
  21. 21. #ccc_h4 ヒットカウント / 条件付ブレークポイント
  22. 22. #ccc_h4 ヒットカウント / 条件付ブレークポイント
  23. 23. #ccc_h4 ヒットカウント / 条件付ブレークポイント
  24. 24. #ccc_h4 リモートデバッグ
  25. 25. #ccc_h4 リモートデバッグ • JPDA(Java Platform Debugger Architecture)! • デバッグをするための標準インタフェース! • IDE上で実行/デバッグする際も利用! • IDE外、リモートマシンのJVMをデバッグ可能
  26. 26. #ccc_h4 リモートデバッグの方法 • Javaの実行オプションを追加 -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 “y”にするとデバッガアタッチまで待つ デバッガがリスンするポート
  27. 27. #ccc_h4 デバッガのアタッチ
  28. 28. #ccc_h4 デバッガのアタッチ
  29. 29. #ccc_h4 デバッガのアタッチ
  30. 30. #ccc_h4 プロダクション環境のデバッグ • パフォーマンス! • セキュリティ
  31. 31. #ccc_h4 プロダクション環境のデバッグ • パフォーマンス! • デバッグ有効化はパフォーマンス影響なし! • アタッチ時は影響有り! • ホットスポットに条件付ブレークポイント を設定する場合は注意
  32. 32. #ccc_h4 プロダクション環境のデバッグ • セキュリティ! • 大変脆弱 / 認証機構はない! • 不要な場合は無効に
  33. 33. #ccc_h4 プロダクション環境のデバッグ • セキュリティ! • 大変脆弱 / 認証機構はない! • 不要な場合は無効に! • プロダクション環境ではリスンアドレスを指定! ! ! • リモート接続はsshトンネル経由で -agentlib:jdwp=transport=dt_socket,server=y, suspend=n,address=localhost:5005
  34. 34. #ccc_h4 デバッグあるある問題
  35. 35. #ccc_h4 デバッガあるある問題 • ここだ!とブレークポイント設定!
  36. 36. #ccc_h4 デバッガあるある問題 • ここだ!とブレークポイント設定! • 事件はブレークポイント以前で起きていた!!
  37. 37. #ccc_h4 デバッガあるある問題 • ここだ!とブレークポイント設定! • 事件はブレークポイント以前で起きていた!! • もっと手前にブレークポイント設定!
  38. 38. #ccc_h4 デバッガあるある問題 • step実行、step実行・・・! !
  39. 39. #ccc_h4 デバッガあるある問題 • step実行、step実行・・・! ! ! ! • 飛び越した!step intoしておくべきだった・・!
  40. 40. #ccc_h4 デバッグあるある問題 • Jenkins/Bamboo/TeamCityなどCI環境でのみ再現! • たまにしか再現しない! • print文を入れたら再現しない! • 他システムとの結合箇所でまれに失敗! • 再現条件がよくわからずテストが書けない! • 小人さんが直してくれていた(みたい)
  41. 41. #ccc_h4 一般的な解決方法
  42. 42. #ccc_h4 一般的な解決方法 • 超能力を使う! • 超能力を使う! • 超能力を使う! • 超能力を使う! • 超能力を使う! • 超能力を使う
  43. 43. #ccc_h4 超能力を持ち合わせていない方
  44. 44. #ccc_h4 Chronon Time Travellingデバッガ • Chronon Systems, LLC.
  45. 45. #ccc_h4 デモ
  46. 46. #ccc_h4 でもお高いんでしょ?
  47. 47. #ccc_h4 IntelliJ IDEAを持っていれば無料!
  48. 48. #ccc_h4 他の使い方 • CI環境で稀に発生するバグの記録を後で確認! • プロダクション環境で記録! • Chronon Recording Server! • 記録し続けてローテート、最長n日保存! • 任意のタイミングで記録開始・停止! • パフォーマンスオーバーヘッド:低
  49. 49. #ccc_h4 まとめ • デバッガを利用するタイミング! • デバッグ時!! • 一時的なデバッグ用のデバッグ文は入れない! • ショートカット、条件付ブレークポイントで効 率的にデバッグ! • オフラインデバッグにはChronon Timetravelling デバッガ
  50. 50. #ccc_h4 ありがとうございました @yusuke

×