我有一个已明确分配堆栈的线程池(即使用pthread_attr_setstack)。
是否可以使用gnulib的回溯和放大器之类的东西。这个堆栈上的backtrace_symbols?
感谢。
答案 0 :(得分:3)
backtrace()返回数组中调用程序的回溯 缓冲区指出。
因此,是的,它并不关心堆栈的分配位置。您只需从目标线程调用它,并且堆栈信息隐含在当前堆栈指针中。
如果你想回溯另一个线程(不同于正在运行的线程),那就太棘手了。首先,它可能正在运行,这将使所有尝试回溯受到比赛的影响。但另一方面,我认为当前堆栈指针(跟踪应该从哪里开始)的任何标准方式都不会对另一个线程可见。如果没有这些信息,就无法启动跟踪,因为堆栈的基础信息确实不够。
(ptrace
可以得到当前的寄存器值。这是调试器使用的系统调用。但是它会非常具有破坏性。