2
我有一个已经明确分配堆栈的线程池(即使用pthread_attr_setstack)。我可以从明确分配的堆栈中获得回溯
是否可以在堆栈上使用像gnulib的backtrace & backtrace_symbols?
谢谢。
我有一个已经明确分配堆栈的线程池(即使用pthread_attr_setstack)。我可以从明确分配的堆栈中获得回溯
是否可以在堆栈上使用像gnulib的backtrace & backtrace_symbols?
谢谢。
backtrace()返回缓冲区指向的数组 中的调用程序的回溯。
因此是的,它并不在乎堆栈的分配位置。您只需从目标线程调用它,并且堆栈信息隐含在当前堆栈指针中。
如果你想回溯另一个线程(除了正在运行的那个)更棘手。首先,它可能正在运行,这将使所有试图回溯到比赛。但另一方面,我认为没有任何标准的方法可以使其他线程可见的堆栈指针(这是跟踪应该开始的地方)。如果没有这些信息,就无法启动跟踪,因为堆栈的基础信息不够。
(ptrace
可以得到当前的寄存器值,这是调试器使用的系统调用,虽然这会造成很大的干扰)