You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Valgrind Massif追踪特定函数的内存分配

如何用Valgrind Massif仅查看特定函数的内存分配

有两种实用方法可以实现需求,具体如下:

方法一:运行Massif时直接指定跟踪目标函数

使用Massif的--alloc-fn选项,让工具只记录由指定函数发起的内存分配操作。命令格式如下:

valgrind --tool=massif --alloc-fn=目标函数名 ./你的程序
  • 示例:如果要跟踪自定义函数process_data的内存分配,命令就是valgrind --tool=massif --alloc-fn=process_data ./my_app
  • 注意:如果跟踪的是标准库函数(比如malloc),直接写函数名即可;如果是C++类成员函数,需要注意名字修饰问题,可先用c++filt解析编译后的函数名再填入。

方法二:生成完整报告后过滤目标函数

如果已经生成了完整的Massif输出文件(默认名为massif.out.<PID>),可以用ms_print工具结合文本过滤命令提取目标函数的相关记录:

  1. 先生成可读报告并过滤:
ms_print massif.out.12345 | grep -A 10 -B 5 "目标函数名"

其中-A 10表示显示匹配行后10行,-B 5表示显示匹配行前5行,可根据需要调整行数。
2. 针对C++修饰后的函数名,先解析再过滤:

ms_print massif.out.12345 | c++filt | grep -A 10 -B 5 "MyClass::myFunction"

关键注意事项

  • 编译程序时必须添加-g调试选项,否则Massif无法识别函数名,只能显示内存地址,无法进行精准过滤。
  • 如果目标函数是通过函数指针调用的,--alloc-fn可能无法跟踪到,此时建议用方法二结合调用栈信息过滤。

内容的提问来源于stack exchange,提问作者Trams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:09:54