瓦尔格兰德';s massif工具将不会分析我的应用程序 我正在使用CITOS存储库中的标准GCC 4.4包,在64位CITOS 5.8上开发静态链接的64位C++应用程序。它使用的内存似乎比我预期的要多,因此我尝试使用massif来分析内存使用情况。我已使用调试信息编译,然后运行

瓦尔格兰德';s massif工具将不会分析我的应用程序 我正在使用CITOS存储库中的标准GCC 4.4包,在64位CITOS 5.8上开发静态链接的64位C++应用程序。它使用的内存似乎比我预期的要多,因此我尝试使用massif来分析内存使用情况。我已使用调试信息编译,然后运行,c++,linux,centos,valgrind,massif,C++,Linux,Centos,Valgrind,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--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--工具=地块ls-l

它还生成了多个快照,并按预期使用了非零内存

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

作为补充说明,我可以使用valgrind的默认memcheck工具成功地评测应用程序,以防这是有用的信息


有人知道为什么massif无法分析我的应用程序吗?

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

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

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


你的程序是静态链接的吗?如果执行“ldd./MyProg”,它会列出一组共享库,还是什么都不打印?它是静态链接的。我编辑了这个问题来澄清这一点。谢谢。我错过了常见问题的那一部分。在更改为部分动态链接后,我能够获得一个配置文件。基于valgrind用户邮件列表上的一个配置文件,valgrind应该能够分析3.8.1版以后的静态链接应用程序。根据邮件列表上的要求,我已经就此提交了一份申请。