c - 以更少的开销获取代码中的调用堆栈?

标签 c linux profiler

我将在 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/

相关文章:

c - 如何在 lua 中创建接受多个参数的 C 函数?

linux - 在 RHEL 的特定文件夹中安装 Jenkins

linux - Linux 中的安装命令(useradd、ifconfig)

c++ - 使用 C/C++,如何以彩色打印到标准输出,但前提是终端支持它?

c++ - gprof 探查器不打印时间摘要

mysql - 请推荐MySQL Profiler(最好是免费的)

Nhibernate 探查器显示警告 "Use explicit Save or Update in session"

c# - 调用从 C# 获取 char** 的 C dll 函数

Float 数据类型背后的概念及其赋值

java - 串联/不间断套接字编程