2013-12-09 36 views

回答

3

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

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

如果你想回溯另一个线程(除了正在运行的那个)更棘手。首先,它可能正在运行,这将使所有试图回溯到比赛。但另一方面,我认为没有任何标准的方法可以使其他线程可见的堆栈指针(这是跟踪应该开始的地方)。如果没有这些信息,就无法启动跟踪,因为堆栈的基础信息不够。

ptrace可以得到当前的寄存器值,这是调试器使用的系统调用,虽然这会造成很大的干扰)