Valgrind的massif工具不会描述我的应用程序

时间:2012-11-27 16:18:24

标签: c++ linux centos valgrind massif

我正在使用CentOS存储库中的标准gcc 4.4软件包在64位CentOS 5.8上开发静态链接的64位C ++应用程序。它似乎使用了比我预期更多的内存,所以我尝试使用massif来分析内存使用情况。我编译了调试信息,然后运行

  

valgrind --tool = massif ./MyProg

来自MyProg所在的目录。除了以下massif.out.XXXX示例之外,它永远不会产生任何结果。

desc: (none)
cmd: ./MyProg
time_unit: i
#-----------
snapshot=0
#-----------
time=0
mem_heap_B=0
mem_heap_extra_B=0
mem_stacks_B=0
heap_tree=empty

请注意,这是文件的全部内容,我的程序可以运行很多分钟。

我尝试了valgrind和massif的各种选择但无济于事。我甚至尝试使用MyProg的绝对路径,以防万一。我已经尝试下载最新稳定版本的valgrind(3.8.1)并编译并运行它(因为CentOS使用3.5.0)具有相同的结果。作为一个完整性检查,我跑了

  

valgrind --tool = massif ls -l <​​/ p>

并且它产生了多个快照,并且按预期使用了非零内存。

我尝试使用我能想到的各种关键字组合在线搜索,但没有发现任何类似的问题。

作为旁注,我可以使用valgrind的默认memcheck工具成功分析应用程序,以防有用信息。

有谁知道为什么massif无法描述我的应用程序?

1 个答案:

答案 0 :(得分:15)

如果应用程序是静态链接的,则无法使用valgrind进行分析。 Valgrind的工作原理是为程序提供自己的分配函数版本,它可以通过覆盖动态查找来实现。

如果您可以动态链接标准库(libc和libstdc ++),那么它应该能够执行您正在寻找的内存分析。

来自Valgrind FAQ:

  

其次,如果您的程序是静态链接的,那么大多数Valgrind工具都无法正常工作,因为它们无法用自己的版本替换某些功能,例如malloc。