[英]print all threads stack trace of a process in c/c++ on linux platform
我想要的是使用c / c ++获取所有线程的堆栈跟踪以运行进程。
我知道获得stacktrace的不同方式:
我们有backtrace()api,但问题是它只提供当前线程的堆栈跟踪。 有没有人知道如何将它与每个正在运行的线程相关联?
我试过的第二种方法是使用pstack命令。 pstack接受输入作为运行进程的pid显示所有线程的所有堆栈。 但问题是它不是C / C ++ api所以我们不能在我们的代码中使用它。 (当我研究时)pstack是一个shell文件,它反过来使用gdb的bt命令。
有没有人知道不同的方法,这将有助于我获得运行进程的所有线程的堆栈跟踪?
也许你可以使用ptrace
。 附加到所有线程(打印PTRACE_GETREGS
的线程除外),您可以使用PTRACE_GETREGS
获取寄存器值。 然后你可以进行堆栈展开(也许你需要存储在.elf文件中的信息才能可靠地执行此操作)。 请注意,如果线程只是创建/销毁其堆栈帧,则必须特别小心。 并且您可能需要来自elf的调试信息才能可靠地执行此操作(如果您的代码使用省略的帧指针进行编译,则肯定需要这样做)。
手动完成这项工作并非易事,但肯定可以做到。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.