Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

まずはじめに

Slide 7

Slide 7 text

デバッガーの起動 • Debug ‘’ でデバッグ用にアプリを実行する • Ctrl + D • Attach Debugger to Android Processで起動中のアプリに
 デバッガーをアタッチする • デバッグ用に実行していなくても通常のRunでアタッチできる

Slide 8

Slide 8 text

いわゆるみんな知ってるBreakpoint • 普通のBreakpoint • コードの左をクリックして設定するやつ。Cmd + F8でも設定できる • デバッガーがアタッチされているアプリがBreakpointまで
 たどり着いたらそこでアプリが一時停止する

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

ステップオーバー・ステップイン・ステップアウト • 左から… • ステップオーバー:次の行に進む • ステップイン:指定しているメソッド・関数に入る • 強制ステップイン:ステップインで無視されているメソッド・関数に無理やり入る • Android StudioのBuild, Execution, Deployment > Debugger > Stepping
 から無視するパッケージを設定できる。デフォルトはJDK由来のものとか • ステップオーバー:ステップインしたメソッド・関数から出る

Slide 12

Slide 12 text

式評価 • ブレーク時点で様々な式を実行して評価させることが
 できる • 実行時点のthisとかを呼ぶとブレークした瞬間の
 メソッド・関数を実行しているオブジェクトが
 返ってくるので適当なメソッドでどうなるか試せる • 「このタイミングであの判定って成り立つんだっけ?」
 みたいな確認ができて便利

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Non-Suspend Breakpoint • 到達しても停止しないBreakpoint • Suspendを無効にすると到達時に停止しなくなる • 単体だと意味がない • Evaluation/Logging Breakpointと組み合わせると自動で
 ログを出したり強制的に値を設定したりできる • 入力テキストや入力値を固定したり • 強制的にAPIの値を書き換えたり

Slide 25

Slide 25 text

最後に • 知っていると便利かもしれないデバッガの機能でした • Android ProfilerもAndroid Studio 3.2でまともになったのでAndroid Studioだけでも全然 デバッグに苦労しなくなってきた • 以前はEditTextにフォーカスを当てた後に画面遷移するとAndroid Profilerのキー入力の
 ロガーが原因で無条件でクラッシュする不具合が… • Evaluate + Non-suspend Breakpointを思い出せるようにしておくとデバッグ時の入力がそ れなりに楽になるので個人的にはおすすめです