1

コールスタックを取得する方法がいくつかあることは知っていました

  1. 「dalvik.vm.stack-trace-file」を使用してカーネル スレッドのスタックを取得する
  2. または backtrack を使用して現在のプロセスのスタックを取得します。

しかし今、私は、特別なイベントが発生したときにのみ、別のプロセスによって多くの子プロセス (スレッド) を持つユーザー空間プロセスをトレースする必要があります (一時的なデバッガーとして扱うことができます)。そのようなことを行う方法はありますか?

ptrace ( http://linux.die.net/man/2/ptrace ) は良い提案ですが、スレッドをトレースする方法がないようですか?

アップデート

  1. http://man7.org/linux/man-pages/man2/ptrace.2.html「すべてのスレッドを (潜在的に異なる) トレーサーに個別に接続できる」ようです!?

  2. プロセスのスタックを取得するために ptrace を使用しようとしました。しかし、許可がないことがわかりましたか?私が使う

    ptrace(PTRACE_ATTACH, tid2, NULL, NULL);

    ただし、-1 は return で、errno は 1 (操作は許可されていません)

    私は何かが恋しいですか?

  3. 私はアンドロイドプラットフォームで働いています。いくつかのプロセスを添付する権限がないようですか?(gdb ツールはルートですが、私のアプリはそうではありません。)

4

1 に答える 1

1

プロセスにアタッチする場合は、プロセスとアタッチするプロセスの間に親子関係が存在する必要があります。または、プロセスがルートとして実行されている必要があります。

于 2012-09-21T10:56:43.410 に答える