AndroidStudioで覚えておくべきデバッグTIPS

  • 262
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

前口上

AndroidStudioのデバッガは非常に高機能でちゃんと使いこなせば人生が捗ります。
教わらないと意外に知らない機能もあると思うので紹介したいと思います。

基本

ブレークポイントはる

行番号の辺りをポチッと押すとその行にブレークポイントはれます。基本ですね。

スクリーンショット 2016-02-17 11.27.53.png

デバッガを実行中のプロセスにアタッチする

虫マークでビルドしなおさなくても、その2つ右隣の 01.png アイコンをクリックすると既に実行中(デバッグ実行じゃなくて普通のRunでよい)のプロセスにアタッチできます。

スクリーンショット 2016-02-17 11.29.40.png

アタッチ可能なデバイスを選択します。
デバイスが2つ表示されていますが下の方には当該アプリを入れてないので選択できません。
なので予めアタッチしたいデバイスで当該アプリをRunしておいてください。

スクリーンショット 2016-02-17 11.46.45.png

止まる

あとは普通にアプリを動かすとブレークポイントはったところで止まります。

スクリーンショット 2016-02-17 11.33.34.png

ブレークポイントで止まったらAndroidStudioの下の方にデバッガが見えてると思います。

スクリーンショット 2016-02-17 11.30.34.png

05.png こんなのを押すと次のブレークポイントまで実行されます。
06.png こんなのを押すとデバッグ実行を中止します。

止まった時点での引数やらthisの内容はVariablesで見ることができます。

スクリーンショット 2016-02-17 11.34.07.png

Framesにはコールスタックが書かれています。

07.png

Threadsにはスレッドの情報が書かれています。

スクリーンショット 2016-02-17 12.18.30.png

ステップオーバー、ステップイン、ステップアウト

ステップオーバー

止まった行から次の行に進むことをステップオーバーといいます。
02.png こんなアイコンを押して好きなだけ進んでください。押す毎に1行ずつ評価されます。

ステップイン

式やメソッドに入ることをステップイン(Step Into)と言います。
03.png こんなアイコンを押すとメソッドの中にどんどん潜り込んで行けます。
前述のステップオーバーは式やメソッドを実行するだけでその中には入って行きません。

ステップアウト

ステップインしたメソッドから抜けたいときは 04.png を押して抜けてください。

ここまでは基礎の基礎です。

応用

変数の中身書き換え

Variablesは中身を好きに書き換えられます。
書き換えたい変数名で右クリックしてSet Valueで値を変えられるので便利です。

スクリーンショット 2016-02-17 11.33.56.png

好きなだけ書き換えちゃってください。

スクリーンショット 2016-02-17 11.34.07.png

条件付きブレークポイント

ブレークポイントには止まるための条件を設定できます。
ブレークポイントで右クリックしてConditionに条件式を書いて下さい。

スクリーンショット 2016-02-17 11.28.55.png

hoge > 0 とかでも !text.isEmpty() とかでもいいです。ベンリ。

式評価

その場で式を評価させることが出来て激アツです。

08.png

の一番右の Evaluate Expression を押して下さい。

スクリーンショット 2016-02-17 11.30.58.png

そうすると別ウィンドウが上がってきます。
ここでthis.とかすると、いま止まってる場所のオブジェクトの参照が得られるので、好きなメソッドを呼んで評価させることができます!
副作用とかも起こせます(やりたいかどうかは別にして)

スクリーンショット 2016-02-17 11.31.30.png

評価結果はResultに表示されます。

スクリーンショット 2016-02-17 11.32.02.png

プログラム本体に書かれてないけどここどういう状態になってるんだっけ?みたいなのを確認したいことがデバッグ中には時々あるので重宝します。

まとめ

AndroidStudioサイコーですね。
知ってる人には当たり前の内容だったと思いますが、式の即時評価とかは僕しらなかったので同じような人の助けになれば幸いです。