1

我知道有一些方法可以获取调用堆栈

  1. 使用“dalvik.vm.stack-trace-file”获取内核线程堆栈
  2. 或使用回溯获取当前进程的堆栈。

但是现在我需要跟踪一个用户空间进程,只有当一些特殊事件发生时,才会有许多子进程(线程),由另一个进程(我们可以将其视为临时调试器)。有没有办法做这样的事情?

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 是返回,而 errno 是 1(不允许操作

    我错过了什么吗?

  3. 我在一个安卓平台上工作。似乎我无权附加某些进程?(gdb 工具是 root,但我的应用程序不是。)

4

1 回答 1

1

如果要附加到进程,则进程与要附加的进程之间必须存在父/子关系,或者您的进程以 root 身份运行。

于 2012-09-21T10:56:43.410 回答