我正在64位C++ 5.8上开发一个静态链接的64位CentOS应用程序,使用来自CentOS存储库的标准gcc 4.4包。它所使用的内存似乎比我预期的要多,所以我尝试使用massif来分析内存使用情况。已使用调试信息进行编译,然后运行
工具=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注意,这是文件的全部内容,我的程序可以运行很多分钟。
我试过各种各样的方法,但都没有用。我甚至尝试使用MyProg的绝对路径,以防万一。我已经尝试下载了最新的稳定版本valgrind (3.8.1),并编译和运行它(因为CentOS使用的是3.5.0),结果是相同的。作为一次理智检查,我跑了
工具=massif ls -l
它产生了多个快照,内存使用率达到预期的非零。
我试着用我能想到的所有关键字组合在线搜索,但没有发现任何类似的问题。
作为附带说明,我可以成功地使用val差尔的默认memcheck工具对应用程序进行分析,以防这是有用的信息。
有人知道为什么massif会不能分析我的应用程序吗?
发布于 2012-11-27 19:38:06
如果应用程序是静态链接的,则不能使用val研进行分析。通过为您的程序提供自己版本的分配函数来工作,它通过重写动态查找来完成。
如果您可以动态地链接到标准库(libc和libstdc++),那么它很可能能够执行您正在寻找的内存分析。
来自瓦伦堡常见问题:
第二,如果您的程序是静态链接的,那么大多数Val砂矿工具也不能正常工作,因为它们无法用自己的版本替换某些函数,比如malloc。
https://stackoverflow.com/questions/13588474
复制相似问题