【问题标题】:Valgrind does not show correct heap usage when run an app through shell script通过 shell 脚本运行应用程序时,Valgrind 未显示正确的堆使用情况
【发布时间】:2023-09-13 17:04:01
【问题描述】:

我正在使用 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 目录。如果我从那里运行它,那么我会再次获得高且正确的内存使用率。

我试图了解这两种方法的区别。为什么使用已安装的应用程序(通过 shell 脚本运行)不能提供正确的内存使用情况。

【问题讨论】:

    标签: linux shell heap-memory valgrind 7zip


    【解决方案1】:

    valgrind 应该为 ELF 64 位或 ELF 32 位可执行文件调试内存相关问题。它不能与 shell 脚本一起使用。因此,您将无法使用 shell 脚本调试您的应用程序。

    【讨论】:

      最近更新 更多