14

Java仮想マシンスレッドからすべてのダンプを取得して、スレッドがロックしているものと、一部のリソースのロックを解除するために待機しているスレッドを確認したいだけです。ここのようなものが記述されています。Zygote プロセスを強制終了しようとしましたが、結果はありません。

4

6 に答える 6

17

最も簡単な方法は、DDMS、または Eclipse の ADT プラグインを使用することです。基本的な手順については、 http://developer.android.com/tools/debugging/ddms.htmlを参照 してください。つまり、[デバイス] ビューに移動し、関心のあるアプリケーションを選択し、スレッドの更新が有効になっていることを確認してから、[スレッド] ビューに切り替えます。そのプロセスのスレッドのライブ更新リストを取得します。スレッドをダブルクリックすると、現在のスタック状態のスナップショットが取得されます。

スレッド ダンプで select-all と copy を使用して、スタック トレースをコピーして貼り付けることができます。

開発者/ルート化されたデバイスをお持ちのSIGQUIT場合は、興味のあるアプリ プロセスに を送信することで、Dalvik VM にスレッド スタックをダンプするように依頼できます。たとえば、カレンダー アプリのすべてのスレッドのスタックを確認したい場合は、次のようなことができます。

% adb shell ps | grep android.calendar
u0_a6     2596  127   912804 48296 ffffffff b6f62c10 S com.google.android.calendar
# 2596 is the process ID
% adb shell run-as com.google.android.colendar kill -3 2596

logcat の出力は次のようになります。

I/dalvikvm( 2596): Wrote stack traces to '/data/anr/traces.txt'

だから、それを引っ張ってください:

% adb pull /data/anr/traces.txt .

プロセスにシグナルを送るたびに、ログがそのファイルに追加されます。そこには他のものがあるかもしれないので、検索する必要がありますpid 2596

----- pid 2596 at 2012-11-27 12:48:38 -----
Cmd line: com.google.android.calendar

DALVIK THREADS:
...

DDMS スレッド ビューよりもこれを実行する利点は、スレッドがモニターでスタックしている場合、スタック ダンプによって、ロックされているオブジェクトと現在ロックを保持しているスレッドが示されることです。

接合子プロセスはここでは関係ありません。定義上、アプリを実行していません。JDWP スレッドがなく、SIGQUIT をリッスンしないため、スタック トレースを取得することはできません。

于 2012-11-27T21:00:17.787 に答える
2

ルート化されたデバイスがなく、アプリがデバッグ ビルドでない場合でも、開発者向けオプションからバグ レポートを生成してスレッド ダンプを取得できます。ダンプは、bugreport*.txt ファイルの VM TRACES JUST NOW セクションの下にあります。

疑わしいスレッドの ID がわかっていると、より迅速に処理できます。次のように呼び出して、アプリの PID を取得できます。

adb shell ps -A | grep com.example.myapp

およびスレッド ID は次のとおりです。

adb shell ps -T | grep <pid>
于 2019-11-07T11:34:34.700 に答える
0

EclipseでDDMSビューに切り替えると、スレッドを調べるためのツールがいくつかあります。それはあなたが探しているものですか?

于 2012-11-27T17:12:44.183 に答える
0

アプリ内にスレッドが必要だと思います。このために、ADTEclipseプラグインのDDMSビューを使用できます。これがドキュメントですhttp://developer.android.com/tools/debugging/ddms.html#thread

于 2012-11-27T17:13:36.903 に答える