【问题标题】:How to get the call stack of a specified process which run on user space in android?如何获取在android的用户空间上运行的指定进程的调用堆栈?
【发布时间】:2012-07-09 09:22:55
【问题描述】:

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

  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,但我的应用程序不是。)

【问题讨论】:

  • 这只会在您自己的代码或有根设备上真正起作用。
  • 是的。这是。我可以编译代码。

标签: android linux debugging process


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2017-11-27
    相关资源
    最近更新 更多