如何运行Valgrind来查找我的嵌入式MIPSEL-linux盒子上的内存泄漏?

时间:2013-08-02 05:05:59

标签: mips valgrind embedded-linux

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

rcS脚本中,我的运行方式如下:

./main_app

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

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

3 个答案:

答案 0 :(得分:6)

您可以尝试使用自己的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
  • 前缀 - 用于安装valgrind的已编译二进制文件的文件夹;
  • CC CXX - 编译器的路径;
  • 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 它对我有用,祝你好运。

答案 1 :(得分:0)

Valgrind仅适用于x86。如果您为x86构建应用程序并在那里使用valgrind运行它,您仍然可以追踪泄漏。这个问题不太可能是针对目标架构的。

答案 2 :(得分: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具有更高置信度的人的泄漏量。