次の方法で共有


Android のデバッグ ログ

開発者がアプリケーションのデバッグに使うとても一般的なトリックの 1 つは Console.WriteLine を呼び出すことです。 ただし、Android などのモバイル プラットフォームにコンソールはありません。 Android デバイスには、アプリの作成中に使用できるログがあります。 これは、ログの取得時に入力するコマンドから logcat と呼ばれることがあります。 ログに記録されたデータを表示するには、デバッグ ログ ツールを使います。

Android のデバッグ ログの概要

デバッグ ログ ツールを使うと、Visual Studio でアプリをデバッグしながらログ出力を見ることができます。 デバッグ ログは次のデバイスをサポートします。

  • 物理的な Android フォン、タブレット、ウェアラブル。
  • Android Emulator 上で動作する Android 仮想デバイス。

Note

デバッグ ログ ツールは、Xamarin Live Player では動きません。

デバッグ ログでは、デバイスのアプリがスタンドアロンで (つまり、Visual Studio から切断されて) 実行している間に生成されるログ メッセージは表示されません。

Visual Studio からデバッグ ログにアクセスする

デバイス ログ ツールを開くには、ツール バーの [デバイス ログ (logcat)] アイコンをクリックします。

Location of Device Log tool on the toolbar

または、次のいずれかのメニューを選んでデバイス ログ ツールを起動します。

  • [ビュー] > [その他のウィンドウ] > [デバイス ログ]
  • [ツール] > [Android] > [デバイス ログ]

次のスクリーンショットは、デバッグ ツール ウィンドウのさまざまな部分を示したものです。

Parts of the Debug Tool window

  • デバイス セレクター - 監視対象の物理デバイスまたは実行中のエミュレーターを選びます。

  • ログ エントリ - logcat からのログ メッセージのテーブルです。

  • ログ エントリの消去 - テーブルから現在のログ エントリをすべて消去します。

  • 再生/一時停止 - 新しいログ エントリの表示の更新と一時停止を切り替えます。

  • 停止 - 新しいログ エントリの表示を停止します。

  • 検索ボックス - ログ エントリのサブセットをフィルター処理するには、このボックスに検索文字列を入力します。

デバッグ ログ ツール ウィンドウが表示されているときは、デバイス プルダウン メニューを使って監視対象の Android デバイスを選びます。

Location of Device Selector

デバイスを選択すると、デバイス ログ ツールは実行中のアプリからのログ エントリを自動的に追加します。これらのログ エントリは、ログ エントリのテーブルに表示されます。 デバイスを切り替えると、デバイスのログはいったん停止してから開始します。 デバイス セレクターにデバイスが表示されるためには、先に Android プロジェクトを読み込む必要があることに注意してください。 デバイスがデバイス セレクターに表示されない場合は、Visual Studio の [開始] ボタンの横にあるデバイス ドロップダウン メニューでデバイスが使用できることを確認します。

コマンド ラインからのアクセス

デバッグ ログを表示するには、コマンド ラインを使う方法もあります。 コマンド プロンプト ウィンドウを開き、Android SDK の platform-tools フォルダーに移動します (SDK platform-tools フォルダーの通常の位置は、C:\Program Files (x86)\Android\android-sdk\platform-tools です)。

接続されているデバイス (物理デバイスまたはエミュレーター) が 1 つだけの場合は、次のコマンドを入力してログを表示できます。

$ adb logcat

複数のデバイスが接続されている場合は、デバイスを明示的に指定する必要があります。 たとえば、adb -d logcat では、接続されている物理デバイスのログのみが表示されます。また、adb -e logcat では、実行されているエミュレーターのログのみが表示されます。

その他のコマンドについては、「adb」と入力してヘルプ メッセージをご覧ください。

デバッグ ログへの書き込み

Android.Util.Log クラスのメソッドを使って、デバッグ ログにメッセージを書き込むことができます。 次に例を示します。

string tag = "myapp";

Log.Info (tag, "this is an info message");
Log.Warn (tag, "this is a warning message");
Log.Error (tag, "this is an error message");

これにより、次のような出力が生成されます。

I/myapp   (11103): this is an info message
W/myapp   (11103): this is a warning message
E/myapp   (11103): this is an error message

Console.WriteLine を使用してデバッグ ログに書き込むこともできます - このメッセージは logcat に表示されますが、出力形式が若干異なります (この手法は Android で Xamarin.Forms アプリをデバッグする場合に特に便利です)。

System.Console.WriteLine ("DEBUG - Button Clicked!");

これにより、logcat に次のような出力が生成されます。

Info (19543) / mono-stdout: DEBUG - Button Clicked!

興味深いメッセージ

ログを読むとき (特に、ログ スニペットを他のユーザーに提供するとき)、ログ ファイル全体を熟読するのは面倒なことががよくあります。 ログ メッセージに目を通しやすくするには、最初に次のようなログ エントリを探します。

I/ActivityManager(12944): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=GcTest.GcTest/gctest.Activity1 } from pid 24175

具体的には、アプリケーション パッケージの名前も含まれている正規表現に一致する行を探します。

^I.*ActivityManager.*Starting: Intent

これは、アクティビティの開始に対応する行であり、次のメッセージのほとんど (ただしすべてではありません) がアプリケーションと関連しています。

すべてのメッセージには、メッセージを生成するプロセスのプロセス識別子 (pid) が含まれていることに注意してください。 上記の ActivityManager メッセージでは、プロセス 12944 からメッセージを生成しました。 デバッグ対象のアプリケーションのプロセスを判断するには、mono.MonoRuntimeProvider メッセージを探します。

I/ActivityThread(  602): Pub TouchTest.TouchTest.__mono_init__: mono.MonoRuntimeProvider

このメッセージは、開始されたプロセスからのものです。 この PID を含む後続のメッセージはすべて、同じプロセスから生成されたものです。