我有几个问题:


int backtrace(void ** buffer,int size);
这里的缓冲区是指针数组。返回的数组元素指向返回的堆栈的每一帧。那么,backtrace()内部调用malloc()的次数与帧数的次数一样吗?为什么这样做?
上面分配的内存不是从backtrace()释放的(),那么,谁释放此内存?
有什么办法可以避免从backtrace()内部获取malloc()?
在哪里可以找到backtrace()源代码?
如何在汇编中编写代码以回溯?

最佳答案

请仔细阅读manual page以获得回溯。您似乎对某些基本概念有误:


不,array是您的指针缓冲区,由backtrace()填充以指向堆栈帧。没有呼叫malloc()
您,因为这是您的记忆。
不适用,backtrace()不会调用malloc()
它是GNU libc的一部分。 Here是实现的一部分。
可能是通过复制堆栈指针并手动遍历堆栈。


您似乎将backtrace()backtrace_symbols()混淆了,后者涉及内存分配。

要最多读取当前回溯到64个级别,只需执行以下操作:

void *stack[64];
const int depth = backtrace(stack, sizeof stack / sizeof *stack);

关于c - Backtrace如何在Linux x86_64上工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8724814/

10-10 01:54