1

如何在嵌入式 Linux 机器上运行 valgrind 以查找主软件中的内存泄漏?

rcS脚本中,我是这样运行的:

./main_app

如何将./main_app程序与 valgrind 关联?main_app 进程永远不会终止。

我想不断地将数据记录到文件中。另外,我想在不终止main_app进程的情况下访问日志文件。我可以远程登录并可以访问日志文件。但问题是,除非处理程序关闭,否则我如何打开文件,即我不太明白哪些 valgrind 参数控制如何将内存泄漏记录到文件中。请帮忙!

4

3 回答 3

7

您可以尝试自己为 mips 构建它,步骤如下:从此处下载 valgrind http://valgrind.org/downloads/ - 我使用 Valgrind 3.8.1 解压存档与 valgrind 并移动到 valgrinds 文件夹执行:

./autogen.sh
./configure --host=mipsel-linux-gnu --prefix=/home/pub/valgrind CFLAGS="-mips32r2" CC=/opt/toolchains/mips-4.3/bin/mips-linux-gnu-gcc CXX=/opt/toolchains/mips-4.3/bin/mips-linux-gnu-c++
./make -j6
./make install
  • prefix - 安装 valgrind 已编译二进制文件的文件夹;
  • CCCXX - 编译器路径;
  • CFLAGS - 如果“-mips32r2”和“-mplt”标志比 gcc (GCC) 4.5.1 旧,则应将其传递给编译器

在目标 mips 框导出路径到 valgrind lib 文件夹:

export VALGRIND_LIB=/mnt/nfs/lib/valgrind

现在您可以像往常一样使用它,对于内存检查功能,您可以在这里查看http://valgrind.org/docs/manual/mc-manual.html 它对我有用,祝你好运。

于 2013-11-01T06:47:02.010 回答
0

Valgrind 仅适用于 x86。如果您为 x86 构建应用程序并在 valgrind 下运行它,您仍然可以追踪您的泄漏。该问题不太可能特定于目标体系结构。

于 2013-09-05T02:20:58.857 回答
0

上面的答案描述了如何构建 valgrind,但要真正获得完整的泄漏检查,而不是仅仅列出内存问题,你的程序确实必须终止,我猜你永远不会终止你的程序。

假设你的进程是某种守护进程,你最好的办法就是循环运行它,使用类似的东西监视内存使用情况top,然后当你看到内存使用过多的迹象时,以某种方式发送关闭命令。如果您随后使用以下选项运行 valgrind,您将获得每个进程运行的唯一日志,包括退出时的泄漏转储:

while true ; do
  valgrind --leak-check=yes --log-file=/tmp/log.%p.txt main_app
  sleep 1
done

文件名中的%p插入进程 ID。

您还可以指定--show-possibly-lost=no哪些会减少向 valgrind 具有更高置信度的人报告的泄漏量。

于 2014-06-05T10:01:28.583 回答