Valgrind的的地块工具不会分析我的应用(Valgrind's massif tool

2019-08-03 05:45发布

我使用的是标准的gcc从CentOS软件库4.4软件包开发64位的CentOS 5.8静态链接的64位C ++应用程序。 这似乎是用比我预期的更多的内存,所以我试图用地块来分析内存使用情况。 我已经编译调试信息,然后运行

的valgrind --tool =地块./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和地块无济于事。 我甚至用了MYPROG绝对路径尝试,以防万一。 我尝试下载的valgrind的最新的稳定版本(3.8.1)和编译,并与相同的结果运行(因为CentOS是使用3.5.0)。 作为一个健全检查我跑

的valgrind --tool =地块的ls -l

和它产生具有非零存储器使用多个快照按预期方式。

我试着在网上搜索使用我能想到的关键词的每个组合,但没有发现任何类似的问题。

作为一个方面说明,我可以成功地利用配置文件的valgrind的默认MEMCHECK工具的应用,这是有用的信息情况。

有谁知道为什么地块将无法分析我的应用程序?

Answer 1:

如果应用程序是静态连接的,它不能被使用的valgrind分析。 Valgrind的工作原理是提供它自己的分配函数的版本到您的程序,它实现了通过覆盖动态查找。

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

从Valgrind的常见问题:

其次,如果你的程序是静态连接的,最Valgrind的工具将无法正常工作为好,因为他们将无法更换某些功能,例如malloc,用他们自己的版本。



文章来源: Valgrind's massif tool will not profile my application