我将在 Linux 上实现一个内部内存分析器。我想为每个 malloc/free/realloc 保存堆栈。我每次都尝试使用“pstack”来获取堆栈跟踪。但开销太大了。有没有轻量级的方法来获取 C 代码中的调用堆栈?
我知道有一些工具,例如“valgrind、google profiler”,但不知道它们如何记住每个操作的堆栈。
欢迎任何评论。
谢谢。
最佳答案
有一个 GNU 函数 backtrace()
,它相对较快 - 它只返回地址数组。
要将这些地址解析为函数名称,您需要使用 backtrace_symbols()
,它要重得多,但希望您不需要太频繁地运行它。
要获得 backtrace_symbols()
实际解析名称,您需要使用 -rdynamic
链接器选项。
有关详细信息,请参阅man backtrace
。
关于c - 以更少的开销获取代码中的调用堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1231671/