如何获取在android中的用户空间上运行的指定进程的调用堆栈?

时间:2012-07-09 09:22:55

标签: android linux debugging process

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

  1. 使用" dalvik.vm.stack-trace-file"获取内核线程
  2. 的堆栈
  3. 或使用backtrack获取当前进程的堆栈。
  4. 但是现在我需要跟踪一个用户空间进程,只有在发生某些特殊事件时才会有许多子进程(线程),另一个进程(我们可以对待它)作为临时调试器)。有没有办法做这些事情?

    ptrace(http://linux.die.net/man/2/ptrace)是一个很好的建议,但似乎无法追踪线程?

    更新

    1. http://man7.org/linux/man-pages/man2/ptrace.2.html似乎"每个主题都可以单独附加到(可能不同的)跟踪器上#34;!

    2. 我尝试使用ptrace来获取进程的堆栈。但我发现我没有许可?我用

        

      ptrace(PTRACE_ATTACH,tid2,NULL,NULL);

      但是-1返回,errno是1(不允许操作

      我想错过什么吗?

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

1 个答案:

答案 0 :(得分:1)

如果要附加到流程,则必须在流程与要附加的流程之间建立父/子关系,否则流程将以root身份运行。