我正在使用 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 目录。如果我从那里运行它,那么我会再次获得较高且正确的内存使用率。
我试图了解这两种方法有什么区别。为什么使用已安装的应用程序(通过 sheel 脚本运行)无法给出正确的内存使用情况。
最佳答案
valgrind 应该调试 ELF 64 位或 ELF 32 位可执行文件的内存相关问题。它不能与 shell 脚本一起使用。因此您将无法使用 shell 脚本调试应用程序。
关于linux - 通过 shell 脚本运行应用程序时,Valgrind 不显示正确的堆使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35715924/