FreeBSD 上的 Valgrind

问题描述 投票:0回答:2

美好的一天!

我正在研究一个 C 项目。它位于 FreeBSD 机器上(看起来像 Raspberry PI2,不确定)

问题是我想在 Valgrind 中运行项目来查找内存泄漏。当我尝试通过端口安装 Valgrind 时,出现下一个错误:

root@raspberry-2-55:/usr/ports/devel/valgrind # make
===>  valgrind-3.10.1.20160113,1 is only for i386 amd64, while you are running
armv6.
*** Error code 1

Stop.
make: stopped in /usr/ports/devel/valgrind

请帮助在此平台上运行 valgrind。

valgrind freebsd raspberry-pi2
2个回答
6
投票

不支持 ARM6/FreeBSD 组合。

Valgrind 完全支持 FreeBSD i386 和 amd64。您可以在此处 FreeBSD stable port 和此处 FreeBSD development port 找到有关端口的信息。

据猜测,除非 ARM 成为第 1 层平台,或者有人挺身而出进行移植,否则 Valgrind 对 ARM 的支持不会实现。

另请参阅 Valgrind 团队关于移植的声明:

维护每个端口需要付出很大的努力,比大多数其他程序都要付出更多的努力。 Valgrind 由于其功能的低级性质而很脆弱。此外,每个平台端口都有特定于 CPU 的代码、特定于操作系统的代码和特定于平台的代码,测试所有组合很困难。

更新:

在 FreeBSD 上,您可以使用非常强大的

dtrace
工具进行性能监控和调试。不过,它确实有一个陡峭的学习曲线。

我最喜欢的调试工具仍然是将

printf()
放在战略位置。假设您怀疑您的程序在一大段代码中崩溃了。在中间放置一个
printf
,重新编译并重新运行。如果您看到输出,则错误出现在
printf
之后。如果你不这样做,那是在
printf
之前。现在,您已将包含错误的块的大小减半。现在在剩余的可疑代码中间添加另一个
printf
并重复。这种技术称为二分法。您还可以使用它来监视变量的值。

我建议将调试

printf
包装在宏中([1][2]),这样您就可以将它们保留在代码中,但您可以在发布版本中禁用它们。


0
投票

FreeBSD 上的 Valgrind 现在支持 aarch64。还没有32位arm。

作为参考,这花了大约一个月的时间,我在业余时间相当努力地工作。我预计移植到 32 位 ARM 会更快,因为 aarch64 和 ARM 代码通常非常相似。

© www.soinside.com 2019 - 2024. All rights reserved.