Android Studio最速入門~効率的にコーディングするための使い方

第39回 デバッガについて

この記事を読むのに必要な時間:およそ 8 分

インスペクタでオブジェクトの参照元は見れますか?

見れません。もともと,そうゆう機能がないので「Variablesペイン」「Watchesペイン」でオプションやコマンドを探しても見つかりません。

変数の値をわかりやすく表示することはできますか?

できます。簡単な方法とものすごく面倒な方法とで何通りか方法があります。以下の操作は,特に断りがなければ「Variablesペイン」「Watchesペイン」での操作になります。

プリミティブ型の場合
コンテキストメニューから"View as"を選び,16進表記にするか10進表記にするかを指定できます。

図39 "View as"でプリミティブ型の表示方法を変更する

図39 

配列やリストの場合
コンテキストメニューから"Adjest Range..."を選び,配列やリストの表示範囲を設定することができます。

図40 Adjest Rangeで配列やリストの表示範囲を設定(クリックすると動きがわかります)

オブジェクトの表示方法を個別に指定する
コンテキストメニューから「Customize Data Views...」を選び,表示されるダイアログの「Data Type Renderersタブ」でオブジェクトごとの表示方法を指定します。

図41 ⁠Customize Data Views / Data Type Renderers」設定画面

図41 「Customize Data Views / Data Type Renderers」設定画面

まずは設定の名前(Renderer name)を決め,対象となるクラス(Apply renderer to objects of type)を指定します。その後,ノードを折り畳んでいる時の表示方法(When rendering the node)と,ノードを展開した時の表示方法(When expanding the node)をそれぞれ指定します。
ここで設定した名前(Renderer name)「Variablesペイン」「Watchesペイン」「View as」で指定できるようになります。

図42 "View as"でカスタマイズした表示方法を指定する

図42 

「Variablesペイン」「Watchesペイン」のカスタマイズ
コンテキストメニューから「Customize Data Views...」を選び,表示されるダイアログの「Data Viewsタブ」で全体的な設定ができます。

図43 ⁠Customize Data Views / Data Views」設定画面

図43 「Customize Data Views / Data Views」設定画面

たとえば「Show」では「Variablesペイン」で表示する対象をそれぞれ指定します。⁠Enable 'toString()' object view」では,toString() 表示するオブジェクトを指定することができます。

特定のパッケージやクラスにステップインさせないことはできますか?

できます。⁠Preferences / Debugger / Stepping」でステップフィルタを設定できます。⁠Do not step into the classes」をONにし,その下のエリアにステップインしたくないクラスやパッケージを指定します。

図44 ⁠Preferences / Debugger / Stepping」設定画面

図44 「Preferences / Debugger / Stepping」設定画面

同じく,この設定画面で「コンストラクタをスキップ(Skip constructors)⁠したり「簡単なアクセサの呼出をスキップ(Skip simple getters)⁠することもできます。

デバッグ中にプログラムとは関係のないコード片を実行できますか?

できます。⁠Debugツールウィンドウ」のツールバーか「Run」メニューから "Evaluate Expression..."を実行すると,図45のようなダイアログが表示されます。

図45 "Evaluate Expression..."を実行して表示されるダイアログ

図45 

「Expression Evaluation」ダイアログは「Expression」欄にコード片(1行)を記述して「Evaluate」ボタンでその式を評価します。⁠Code Fragment Mode」ボタンを押すこと「Code Fragment Evaluation」ダイアログに切り替わり,ここでは複数行のコード片を記述して評価することが可能です。

「Code Fragment Mode」では任意の例外を送出できそうなんですが,実際にやってみても例外送出することはできません。

図46 例外は送出することができない

図46 例外は送出することができない

他になにか面白いことをおしえてください

オブジェクトにマークを付けることができます

「Variablesペイン」などでコンテキストメニューから"Mark Object"を実行すると,任意のオブジェクトに対してマークを付けることができます。

図47 "Mark Object"の実行例

図47 

マークは変数ではなく,その変数が指し示しているインスタンスに付きます。また,マークは文字列だけではなく色も付けることができるため,マークを付けたインスタンスが入れ替わったかどうかを容易に把握することが可能です。

またマークしたオブジェクトは <マーク名>_DebugLabelとしてブレイクポイントの条件式や "Evaluation Expression..." の評価式で利用することもできます。

図48 Evaluation Expressionの評価式でマークオブジェクトを指定

図48 Evaluation Expressionの評価式でマークオブジェクトを指定

スレッドダンプを取得できます

「Debugツールウィンドウ」のツールバーか「Run」メニューから "Get thread dump"」を実行すると,その時点でのスレッドダンプを取得します。この時,ブレイクポイントでプログラムが停止しているかどうかは関係ありません。

図49 "Get thread dump"でスレッドダンプを取得する(クリックすると動きがわかります)

スレッドダンプを取得すると,⁠Debugツールウィンドウ」にスレッドダンプごとの「Dumpタブ」が追加されます。そういえばなんてツールもありましたね……。

コンソールのフォントや色を変更できます

デバッガに限った話ではありませんが「Debugツールウィンドウ」⁠Androidツールウィンドウ」「Terminalツールウィンドウ」のフォントサイズやカラーを変更したいな,と思ったことはありませんか?

これら全て同じ設定を共有していて「Preferences / Editor / Color&Fonts」の次の項目でそれぞれ設定変更できます。

  • Console Colors : 各種カラー設定を行います。
  • Console Font : フォントやフォントサイズを設定します。

図50 Preferences/Editor/Color&Fontsの設定

図50 Preferences/Editor/Colo

対象となるツールウィンドウによっては,一度ツールウィンドウを破棄してからではないと設定が反映されません(⁠Terminalツールウィンドウ」がそうです)⁠

著者プロフィール

今井勝信(いまいまさのぶ)

システムエンジニア。日本ユニシス株式会社所属。仙台在住。

Android開発はまったくやったことがないけれどIntelliJ IDEAが大好き。

Twitter: @masanobuimai

コメント

コメントの記入