繁体   English   中英

在Linux平台上用c / c ++打印所有线程堆栈进程的跟踪

[英]print all threads stack trace of a process in c/c++ on linux platform

我想要的是使用c / c ++获取所有线程的堆栈跟踪以运行进程。

我知道获得stacktrace的不同方式:

  1. 我们有backtrace()api,但问题是它只提供当前线程的堆栈跟踪。 有没有人知道如何将它与每个正在运行的线程相关联?

  2. 我试过的第二种方法是使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM