我正在使用valgrind来检查Linux上的归档/压缩工具p7zip(Windows上的7zip)的堆分配。我从这里下载了代码(https://sourceforge.net/projects/p7zip/files/p7zip/)并构建它(make all_test)然后安装它(./install.sh)。
安装后,在/ usr / local / bin创建一个名为“7Za”的shell脚本,其内容读作:
#! /bin/sh
"/usr/local/lib/p7zip/7za" "$@"
此外,在指定的路径/ usr / local / lib / p7zip / 7za上放置了7za的可执行文件。
现在,如果我使用此命令运行valgrind来测试7za(基本上运行shell脚本)的内存使用情况,那么我只获得2KB的堆使用量。
valgrind 7za x file.7z
然而,如果我直接使用7za二进制文件,那么我的内存使用量大约为1MB,这看起来也是真实的:
valgrind /usr/local/lib/p7zip/7za x /home/z/Desktop/file.7z
类似地,当我构建代码时,在那里创建包含7za可执行文件的bin目录。如果我从那里运行它,那么我再次获得高和正确的内存使用。
我试图了解这两种方法的区别。为什么使用已安装的应用程序(通过剪切脚本运行)无法正确使用内存。
答案 0 :(得分:1)
valgrind应调试ELF 64位或ELF 32位exectuable的内存相关问题。它不能与shell脚本一起使用。因此,您将无法使用shell脚本调试应用程序。