我知道有一些方法可以获得调用堆栈
但是现在我需要跟踪一个用户空间进程,只有在发生某些特殊事件时才会有许多子进程(线程),另一个进程(我们可以对待它)作为临时调试器)。有没有办法做这些事情?
ptrace(http://linux.die.net/man/2/ptrace)是一个很好的建议,但似乎无法追踪线程?
更新
http://man7.org/linux/man-pages/man2/ptrace.2.html似乎"每个主题都可以单独附加到(可能不同的)跟踪器上#34;!
我尝试使用ptrace来获取进程的堆栈。但我发现我没有许可?我用
ptrace(PTRACE_ATTACH,tid2,NULL,NULL);
但是-1返回,errno是1(不允许操作)
我想错过什么吗?
我在Android平台上工作。我似乎无权附加某些流程? (gdb工具是root,但我的应用不是。)
答案 0 :(得分:1)
如果要附加到流程,则必须在流程与要附加的流程之间建立父/子关系,否则流程将以root身份运行。