linux - 通过 shell 脚本运行应用程序时,Valgrind 不显示正确的堆使用情况

标签 linux shell heap-memory valgrind 7zip

我正在使用 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/

相关文章:

php - 在 PHP 脚本中启动 redis-server 进程

linux - Bash 变量定义顺序

java - 无法在 Mac OSX 上增加 JMeter 的堆大小

c++ - 我是否会导致太多内存泄漏以致于我的计算机变得无响应?

linux - 使用 AWK -Bash 拆分和写入文件

C++ 堆损坏和 valgrind

linux - 无法从 C linux 中的/proc 位置打开文件夹

linux - 运行 selenium 测试后 Firefox 未关闭

linux - 使用 'sed' shell 命令部分替换字符串

java - 在 64 位 Windows 中使用 32 位 Java