これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、または MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド トレースビューです。
プログラム:
NAME
トレースビュー - Android アプリケーションによって保存された実行ログのグラフィカル ビューア。
SYNOPSIS
トレースビュー [-r] トレース
DESCRIPTION
Traceview は、デバッグ ツールを使用して作成する実行ログのグラフィカル ビューアです。
コード内のトレース情報を記録するクラス。 Traceview はデバッグに役立ちます
アプリケーションを作成し、そのパフォーマンスをプロファイリングします。
OPTIONS
-r 回帰のみ
トレースビュー レイアウト
トレース ログ ファイル (アプリケーションにトレース コードを追加するか、
DDMS)、Traceview にログ ファイルをロードさせ、そのデータをウィンドウに表示させることができます。
アプリケーションを XNUMX つのパネルで視覚化します。
タイムライン パネル - 各スレッドとメソッドがいつ開始および停止されたかを説明します。
プロファイル パネル - メソッド内で何が起こったかの概要を提供します。
以下のセクションでは、traceview 出力ペインに関する追加情報を提供します。
タイムライン パネル
各スレッドの実行はそれぞれの行に表示され、右に行くほど時間が増加します。 それぞれ
メソッドは別の色で表示されます (色はラウンドロビン方式で再利用されます)
最も包括的な時間がかかるメソッド)。 最初の行の下の細い線
選択したメソッドへのすべての呼び出しの範囲 (入口から出口まで) を表示します。 の方法
この場合は LoadListener です。ネイティブ終了() そしてそれはプロフィールビューで選択されました。
プロフィール パネル
このビューには、メソッドに費やされたすべての時間の概要が表示されます。 表には両方が示されています。
包括的な時間と排他的な時間 (および合計時間の割合)。 エクスクルーシブ
time はメソッドに費やされた時間です。 包括時間は、メソッドに費やした時間に加えて、
呼び出された関数に費やされた時間。 呼び出しメソッドを「親」と呼びます。
メソッドを「子」と呼びます。 メソッドが選択されると (クリックすると)、次のように展開されます。
親と子に見せる。 親は紫色の背景で表示され、子供たちは
黄色の背景。 表の最後の列は、この呼び出しの数を示します。
メソッドに再帰呼び出しの数を加えたものです。 最後の列はコールアウトの数を示します
そのメソッドに対して行われた呼び出しの合計数。 このビューでは、次のことがわかります。
LoadListener への 14 回の呼び出し。ネイティブ終了(); タイムライン パネルを見ると、次のいずれかが表示されます。
その通話には異常に長い時間がかかりました。
トレースビュー FILE FORMAT
トレースでは、トレース データを保持するデータ ファイルという XNUMX つの異なる出力が作成されます。
バイナリ識別子からスレッドおよびメソッドへのマッピングを提供するキー ファイル
名前。 トレースが完了すると、ファイルは XNUMX つの .trace ファイルに連結されます。
注意: Traceview の以前のバージョンでは、これらのファイルが連結されませんでした。 もし、あんたが
まだトレースしたい古いキー ファイルとデータ ファイルがある場合は、それらを連結できます
cat mytrace.key mytrace.data > mytrace.trace を使用して自分自身を作成します。
Rescale データ File フォーマット
データ ファイルはバイナリで、次のような構造になっています (すべての値はリトル エンディアンで保存されます)
注文):
* ファイル形式:
* ヘッダー
* レコード0
* レコード1
* ...
*
* ヘッダー形式:
* u4 マジック 0x574f4c53 ('遅い')
*u2バージョン
* データへの u2 オフセット
* u8 の開始日時が使用されます
*
* レコードフォーマット:
* u1 スレッド ID
* u4 メソッド ID | メソッドアクション
* 開始以降の u4 時間デルタ、使用中
アプリケーションはすべてのヘッダー フィールドを解析し、「オフセット」を求めることが期待されています。
data" をファイルの先頭から読み込みます。そこからは、EOF が終わるまで 9 バイトのレコードを読み取るだけです。
に達した。
usec の u8 開始日時は、からの出力です。 gettimeofday()。 それは主にそこにあるので、
出力が昨日生成されたのか、XNUMX か月前に生成されたのかがわかります。
メソッド アクションは、メソッド ワードの下位 XNUMX ビットに配置されます。 現在、
定義されている意味は次のとおりです。
0 - メソッドエントリ
1 - メソッドの終了
2 - 例外処理によって展開されたときにメソッドが「終了」した
3 - (予約済み)
符号なし 32 ビット整数は、マイクロ秒単位で約 70 分の時間を保持できます。
キー File フォーマット
キー ファイルは XNUMX つのセクションに分かれたプレーン テキスト ファイルです。 各セクションは次のように始まります。
「*」で始まるキーワード。 行の先頭に「*」がある場合は、
新しいセクションの始まり。
ファイルの例は次のようになります。
*バージョン
1
クロック=グローバル
*スレッド
1メイン
6 JDWPハンドラー
5 非同期 GC
4 参照ハンドラ
3 ファイナライザー
2 シグナルハンドラー
*メソッド
0x080f23f8 java/io/PrintStream 書き込み ([BII)V]
0x080f25d4 java/io/PrintStream 印刷 (Ljava/lang/String;)V
0x080f27f4 java/io/PrintStream println (Ljava/lang/String;)V
0x080da620 java/lang/RuntimeException ()V
[...]
0x080f630c android/os/Debug startMethodTracing ()V
0x080f6350 android/os/Debug startMethodTracing (Ljava/lang/String;Ljava/lang/String;I)V
*終わり
次のリストでは、キー ファイルの主要なセクションについて説明します。
バージョンセクション
最初の行はファイルのバージョン番号で、現在は 1 です。 XNUMX 行目は Clock=global、
すべてのスレッドで共通のクロックを使用することを示します。 将来のバージョンでは、次のように使用される可能性があります。
スレッドごとに独立したスレッド CPU 時間カウンター。
スレッドセクション
スレッドごとに XNUMX 行。 各行は、スレッド ID とそれに続く XNUMX つの部分で構成されます。
タブの後にスレッド名を入力します。 有効なスレッドにはいくつかの制限があります
name なので、行末まですべてを含めます。
メソッドセクション
メソッドの入口または出口ごとに XNUMX 行。 行はタブで区切られた XNUMX つの部分で構成されます
マーク:メソッドID [TAB] クラス名 [TAB] メソッド名 [TAB] シグネチャ。 メソッドのみ
実際に出入りしたものもリストに含まれます。 XNUMXつとも注意してください
メソッドを一意に識別するには識別子が必要です。
スレッドセクションもメソッドセクションもソートされません。
作成 TRACE ファイル
Traceview を使用するには、必要なトレース情報を含むログ ファイルを生成する必要があります。
分析します。
トレース ログを生成するには XNUMX つの方法があります。
コードに Debug クラスを組み込み、そのメソッドを呼び出してログの記録を開始および停止します。
トレース情報をディスクに記録します。 この方法は非常に正確です。
トレース データのロギングを開始および停止する場所を正確にコード化します。
DDMS のメソッド プロファイリング機能を使用して、トレース ログを生成します。 この方法は少ないです
コードを変更するのではなく、いつ開始および停止するかを指定するため、正確です。
DDMS を使用したロギング。 データがどこにあるのかを正確に制御することはできませんが、
ログに記録されるため、このメソッドはアプリケーションのコードにアクセスできない場合に役立ちます。
最初の方法の精度が必要ない場合。
トレース ログの生成を開始する前に、次の制限事項に注意してください。
Debug クラスを使用している場合、デバイスまたはエミュレータには SD カードと
アプリケーションには SD カードへの書き込み権限が必要です。
DDMS を使用している場合、Android 1.5 デバイスはサポートされません。
DDMS を使用している場合、Android 2.1 以前のデバイスには SD カードが存在する必要があります
また、アプリケーションには SD カードへの書き込み権限が必要です。
DDMS を使用している場合、Android 2.2 以降のデバイスでは SD カードは必要ありません。 の
トレース ログ ファイルは、開発マシンに直接ストリーミングされます。
トレース ファイルを作成するには、Debug クラスを組み込み、次のいずれかを呼び出します。
startMethodTracing() メソッド。 呼び出しでは、トレース ファイルのベース名を指定します。
システムが生成するもの。 トレースを停止するには、電話してください stopMethodTracing()。 これらのメソッドは開始します
仮想マシン全体のメソッド トレースを停止します。 たとえば、次のように呼び出すことができます。
startMethodTracing() あなたのアクティビティの中で onCreate() メソッドを呼び出して、 stopMethodTracing() in
その活動の onDestroy() 方法。
// "/sdcard/calc.trace" へのトレースを開始します
Debug.startMethodTracing("calc");
//..。
// トレースを停止します
Debug.stopMethodTracing();
アプリケーションが呼び出すとき startMethodTracing()と呼ばれるファイルがシステムによって作成されます。
。痕跡。 これには、バイナリ メソッド トレース データとマッピング テーブルが含まれます。
スレッド名とメソッド名を付けます。
その後、アプリケーションが呼び出しを行うまで、システムは生成されたトレース データのバッファリングを開始します。
stopMethodTracing()、その時点で、バッファされたデータが出力ファイルに書き込まれます。 もし
システムが最大バッファ サイズに達する前に、 stopMethodTracing() と呼ばれるシステム
トレースを停止し、コンソールに通知を送信します。
プロファイリングが有効になっていると、解釈されたコードの実行が遅くなります。 生成しようとしないでください
プロファイラーの結果からの絶対タイミング (つまり、「関数 X の実行には 2.5 秒かかります」)。
時間は他のプロファイル出力との関連でのみ役立つため、変更があるかどうかを確認できます。
コードを速くしたり、遅くしたりしました。
Android エミュレータを使用する場合、AVD を作成するときに SD カードを指定する必要があります
トレース ファイルが SD カードに書き込まれるためです。 アプリケーションには許可が必要です
SDカードにも書き込むことができます。
コピー TRACE ファイル に A 主催者 機械
アプリケーションが実行され、システムがトレース ファイルを作成した後
デバイスまたはエミュレータ上の .trace の場合は、それらのファイルを
開発用コンピューター。 adb pull を使用してファイルをコピーできます。 これを示す例は次のとおりです
サンプル ファイル calc.trace をエミュレータ上のデフォルトの場所からコピーする方法
/ tmpに エミュレータ ホスト マシン上のディレクトリ:
adb プル /sdcard/calc.trace / tmpに
COPYRIGHT
このマニュアルページは、ApacheLicenseバージョン2.0の下でライセンスされています。
Copyright(C)2013 Android Open Source Project
Copyright(C)2013 Jakub Adam[メール保護]>
onworks.net サービスを使用してオンラインで Traceview を使用する