Upgrade to Pro — share decks privately, control downloads, hide ads and more …

More Android Studio Debugger

More Android Studio Debugger

2018/10/31に開催された Shibuya.apk #29 にて発表した「More Android Studio Debugger」のスライドです。

Yoshihiro WADA

October 31, 2018
Tweet

More Decks by Yoshihiro WADA

Other Decks in Programming

Transcript

  1. More Android Studio Debugger
    〜あんなことできたんかお前〜
    Cyber Agent Inc.
    Yoshihiro Wada a.k.a. @e10dokup
    2018/10/31 Shibuya.apk at Yahoo! LODGE

    View Slide

  2. 自己紹介
    • Yoshihiro Wada a.k.a. @e10dokup
    • 大体左のアイコンで息をしています
    • CyberAgant Inc. / Ameba
    • つい最近Ameba Blogを作ることになりました
    • カメラ沼
    • 財布の透過率が高いのが最近の悩み

    View Slide

  3. Android Studioのデバッガー、
    ちゃんと扱えていますか

    View Slide

  4. 知っているとちょっと楽になるかもしれない
    デバッガーの使い方を見ていきましょう

    View Slide

  5. 「んなもん知ってるわい」
    って方ごめんなさい。

    View Slide

  6. まずはじめに

    View Slide

  7. デバッガーの起動
    • Debug ‘’ でデバッグ用にアプリを実行する
    • Ctrl + D
    • Attach Debugger to Android Processで起動中のアプリに

    デバッガーをアタッチする
    • デバッグ用に実行していなくても通常のRunでアタッチできる

    View Slide

  8. いわゆるみんな知ってるBreakpoint
    • 普通のBreakpoint
    • コードの左をクリックして設定するやつ。Cmd + F8でも設定できる
    • デバッガーがアタッチされているアプリがBreakpointまで

    たどり着いたらそこでアプリが一時停止する

    View Slide

  9. 自分で設定したBreakpointの確認
    • デバッガーからBreakpointsを呼び出すことで

    自分の設定したBreakpointを一覧で確認できる
    • ここから一括ですべて消すことも可能
    • Shift + Cmd + F8でも開けます
    • 一旦ブレークさせたくないときはミュートもできます

    View Slide

  10. ブレークしたら
    • スタックトレースを確認したり、変数の状態を見たり変更したりできる

    View Slide

  11. ステップオーバー・ステップイン・ステップアウト
    • 左から…
    • ステップオーバー:次の行に進む
    • ステップイン:指定しているメソッド・関数に入る
    • 強制ステップイン:ステップインで無視されているメソッド・関数に無理やり入る
    • Android StudioのBuild, Execution, Deployment > Debugger > Stepping

    から無視するパッケージを設定できる。デフォルトはJDK由来のものとか
    • ステップオーバー:ステップインしたメソッド・関数から出る

    View Slide

  12. 式評価
    • ブレーク時点で様々な式を実行して評価させることが

    できる
    • 実行時点のthisとかを呼ぶとブレークした瞬間の

    メソッド・関数を実行しているオブジェクトが

    返ってくるので適当なメソッドでどうなるか試せる
    • 「このタイミングであの判定って成り立つんだっけ?」

    みたいな確認ができて便利

    View Slide

  13. 流石にこの辺はみんな使ってそうですね

    View Slide

  14. 何もわからないが
    「この画面で例外吐いてクラッシュした」
    みたいな情報があるとき

    View Slide

  15. Exception Breakpoint
    • 任意、ないしは指定のExceptionが発生した瞬間にブレークできる
    • 任意のExceptionでブレークするとき
    • Breakpoints画面から「Java Exception Breakpoints > Any exception」を有効にする
    • 指定のExceptionでブレークするとき
    • Breakpoints画面から + ボタンで「Java Exception Breakpoints」を選んでException

    クラスを選択する

    View Slide

  16. 「とある条件下で意図しない挙動をしている」
    とき

    View Slide

  17. Condition Breakpoint
    • 設定した式の演算結果がtrueだったときにブレークする
    • 異常に長い文字列を入れたら挙動が変になった、とかリストに表示する要素数が大きくなった
    ら挙動が変になった、みたいなケースで有効

    View Slide

  18. 「起動後の画面でだけ変、
    一回遷移すると大丈夫」
    みたいなとき

    View Slide

  19. Temporary Line Breakpoint
    • 最初にBreakpointに達したときのみブレークする
    • 一度通過したらそのBreakpointは無効になる
    • Remove once hitを有効にすることで設定できる
    • Cmd + Opt + Shift + F8でも設定できる

    View Slide

  20. 「3回しか呼ばれないはずの処理が
    不正に4回呼ばれている」
    みたいなとき

    View Slide

  21. PassCount Breakpoint
    • Breakpointに指定した回数到達したらブレークする
    • Pass Countが4なら4,8,12,…回目にブレークし、それ以外はブレークしない
    • APIの処理タイミングなどの都合で不正に仕様以上の回数実行される等のデバッグに便利

    View Slide

  22. Breakpointでなにか処理を入れたいとき

    View Slide

  23. Evaluation/Logging Breakpoint
    • Breakpointの実行直前に指定した処理を実行する
    • 文字列を入力するとデバッガー上にログが出力される
    • ブレークしているオブジェクトに適当な処理を実行させられる

    View Slide

  24. Non-Suspend Breakpoint
    • 到達しても停止しないBreakpoint
    • Suspendを無効にすると到達時に停止しなくなる
    • 単体だと意味がない
    • Evaluation/Logging Breakpointと組み合わせると自動で

    ログを出したり強制的に値を設定したりできる
    • 入力テキストや入力値を固定したり
    • 強制的にAPIの値を書き換えたり

    View Slide

  25. 最後に
    • 知っていると便利かもしれないデバッガの機能でした
    • Android ProfilerもAndroid Studio 3.2でまともになったのでAndroid Studioだけでも全然
    デバッグに苦労しなくなってきた
    • 以前はEditTextにフォーカスを当てた後に画面遷移するとAndroid Profilerのキー入力の

    ロガーが原因で無条件でクラッシュする不具合が…
    • Evaluate + Non-suspend Breakpointを思い出せるようにしておくとデバッグ時の入力がそ
    れなりに楽になるので個人的にはおすすめです

    View Slide