我有几个问题:
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/