我可以从显式分配的堆栈中获取回溯

时间:2013-12-09 01:24:36

标签: c++ pthreads backtrace

我有一个已明确分配堆栈的线程池(即使用pthread_attr_setstack)。

是否可以使用gnulib的回溯和放大器之类的东西。这个堆栈上的backtrace_symbols?

感谢。

1 个答案:

答案 0 :(得分:3)

  

backtrace()返回数组中调用程序的回溯          缓冲区指出。

因此,是的,它并不关心堆栈的分配位置。您只需从目标线程调用它,并且堆栈信息隐含在当前堆栈指针中。

如果你想回溯另一个线程(不同于正在运行的线程),那就太棘手了。首先,它可能正在运行,这将使所有尝试回溯受到比赛的影响。但另一方面,我认为当前堆栈指针(跟踪应该从哪里开始)的任何标准方式都不会对另一个线程可见。如果没有这些信息,就无法启动跟踪,因为堆栈的基础信息确实不够。

ptrace可以得到当前的寄存器值。这是调试器使用的系统调用。但是它会非常具有破坏性。