2018/10/31に開催された Shibuya.apk #29 にて発表した「More Android Studio Debugger」のスライドです。
More Android Studio Debugger〜あんなことできたんかお前〜Cyber Agent Inc.Yoshihiro Wada a.k.a. @e10dokup2018/10/31 Shibuya.apk at Yahoo! LODGE
View Slide
自己紹介• Yoshihiro Wada a.k.a. @e10dokup• 大体左のアイコンで息をしています• CyberAgant Inc. / Ameba• つい最近Ameba Blogを作ることになりました• カメラ沼• 財布の透過率が高いのが最近の悩み
Android Studioのデバッガー、ちゃんと扱えていますか
知っているとちょっと楽になるかもしれないデバッガーの使い方を見ていきましょう
「んなもん知ってるわい」って方ごめんなさい。
まずはじめに
デバッガーの起動• Debug ‘’ でデバッグ用にアプリを実行する• Ctrl + D• Attach Debugger to Android Processで起動中のアプリに デバッガーをアタッチする• デバッグ用に実行していなくても通常のRunでアタッチできる
いわゆるみんな知ってるBreakpoint• 普通のBreakpoint• コードの左をクリックして設定するやつ。Cmd + F8でも設定できる• デバッガーがアタッチされているアプリがBreakpointまで たどり着いたらそこでアプリが一時停止する
自分で設定したBreakpointの確認• デバッガーからBreakpointsを呼び出すことで 自分の設定したBreakpointを一覧で確認できる• ここから一括ですべて消すことも可能• Shift + Cmd + F8でも開けます• 一旦ブレークさせたくないときはミュートもできます
ブレークしたら• スタックトレースを確認したり、変数の状態を見たり変更したりできる
ステップオーバー・ステップイン・ステップアウト• 左から…• ステップオーバー:次の行に進む• ステップイン:指定しているメソッド・関数に入る• 強制ステップイン:ステップインで無視されているメソッド・関数に無理やり入る• Android StudioのBuild, Execution, Deployment > Debugger > Stepping から無視するパッケージを設定できる。デフォルトはJDK由来のものとか• ステップオーバー:ステップインしたメソッド・関数から出る
式評価• ブレーク時点で様々な式を実行して評価させることが できる• 実行時点のthisとかを呼ぶとブレークした瞬間の メソッド・関数を実行しているオブジェクトが 返ってくるので適当なメソッドでどうなるか試せる• 「このタイミングであの判定って成り立つんだっけ?」 みたいな確認ができて便利
流石にこの辺はみんな使ってそうですね
何もわからないが「この画面で例外吐いてクラッシュした」みたいな情報があるとき
Exception Breakpoint• 任意、ないしは指定のExceptionが発生した瞬間にブレークできる• 任意のExceptionでブレークするとき• Breakpoints画面から「Java Exception Breakpoints > Any exception」を有効にする• 指定のExceptionでブレークするとき• Breakpoints画面から + ボタンで「Java Exception Breakpoints」を選んでException クラスを選択する
「とある条件下で意図しない挙動をしている」とき
Condition Breakpoint• 設定した式の演算結果がtrueだったときにブレークする• 異常に長い文字列を入れたら挙動が変になった、とかリストに表示する要素数が大きくなったら挙動が変になった、みたいなケースで有効
「起動後の画面でだけ変、一回遷移すると大丈夫」みたいなとき
Temporary Line Breakpoint• 最初にBreakpointに達したときのみブレークする• 一度通過したらそのBreakpointは無効になる• Remove once hitを有効にすることで設定できる• Cmd + Opt + Shift + F8でも設定できる
「3回しか呼ばれないはずの処理が不正に4回呼ばれている」みたいなとき
PassCount Breakpoint• Breakpointに指定した回数到達したらブレークする• Pass Countが4なら4,8,12,…回目にブレークし、それ以外はブレークしない• APIの処理タイミングなどの都合で不正に仕様以上の回数実行される等のデバッグに便利
Breakpointでなにか処理を入れたいとき
Evaluation/Logging Breakpoint• Breakpointの実行直前に指定した処理を実行する• 文字列を入力するとデバッガー上にログが出力される• ブレークしているオブジェクトに適当な処理を実行させられる
Non-Suspend Breakpoint• 到達しても停止しないBreakpoint• Suspendを無効にすると到達時に停止しなくなる• 単体だと意味がない• Evaluation/Logging Breakpointと組み合わせると自動で ログを出したり強制的に値を設定したりできる• 入力テキストや入力値を固定したり• 強制的にAPIの値を書き換えたり
最後に• 知っていると便利かもしれないデバッガの機能でした• Android ProfilerもAndroid Studio 3.2でまともになったのでAndroid Studioだけでも全然デバッグに苦労しなくなってきた• 以前はEditTextにフォーカスを当てた後に画面遷移するとAndroid Profilerのキー入力の ロガーが原因で無条件でクラッシュする不具合が…• Evaluate + Non-suspend Breakpointを思い出せるようにしておくとデバッグ時の入力がそれなりに楽になるので個人的にはおすすめです