当 运行 应用程序通过 shell 脚本时,Valgrind 不显示正确的堆使用情况
Valgrind does not show correct heap usage when run an app through shell script
我正在使用 valgrind 检查 archive/compression 工具 p7zip(Windows 上的 7zip)在 Linux 上的堆分配。我从这里下载代码 (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 脚本调试您的应用程序。
我正在使用 valgrind 检查 archive/compression 工具 p7zip(Windows 上的 7zip)在 Linux 上的堆分配。我从这里下载代码 (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 脚本调试您的应用程序。