【问题标题】:Use of valgrind on embedded device在嵌入式设备上使用 valgrind
【发布时间】:2014-03-19 07:26:14
【问题描述】:

我有这样的设置。我需要在规范中说运行 Linux 的一些嵌入式设备上编程(尽管当你打开设备时,显然显示器没有显示任何与 linux 相关的东西 - 小显示器)。 嵌入式设备有自己的 SDK。 现在,我想使用 valgrind 来检查内存管理/分配。 我可以使用 valgrind 检查为我的设备编写的程序吗? 我看到的问题是该程序可能包含一些特定于设备的 SDK 调用,因此该程序可能无法在我在桌面上运行的普通 fedora linux 上运行。 我有哪些选择?

【问题讨论】:

  • 根据您要分析的内容,考虑使用 Clang Address Sanitizer,它会快得多(valgrind 会非常慢)。或者让软件在桌面上运行。

标签: c embedded valgrind


【解决方案1】:

在嵌入式设备上运行 valgrind 可能非常具有挑战性,如果不是不可能的话。

您可以做的是创建单元测试,并在主机平台上使用 valgrind 执行它们。这是一种至少可以检查部分代码的内存问题的方法。

其他选项是使用平台仿真,并在仿真器中运行程序(再次在主机系统上)。 QEMU 是相当有名的开源模拟器。

【讨论】:

  • 您所说的“主机”是指哪个平台?使用您提供的链接,这似乎并不容易……是否有一些好的静态检查程序?用于检查内存泄漏?这个我可以只在代码上运行。
  • @dmcr_code 在“主机”下,我指的是您编写和编译程序的计算机。你问的是相当复杂的话题。静态检查器在一定程度上有所帮助,但 valgrind 更好。
  • 是的,但就像我说的我不能在我的主机上运行所有代码,对吧?因为代码的某些部分可能包含对设备 SDK 的调用,因此在我的计算机上它们不会运行?
  • @dmcr_code 不,你不能。这是检查至少(单元测试)部分代码的最简单和最简单的方法。
  • 所以您建议我使用 valgrind 和我的计算机测试不包含特定设备 SDK 调用的那部分代码,对吗?
【解决方案2】:

也许吧。

  1. 当然,请确保您真正运行的是 Linux。

  2. 搞清楚硬件平台; Valgrind supports quite a few platforms 但不是全部。

  3. 考虑您的平台是否有空闲资源(内存和 CPU 速度);运行 Valgrind 的成本相当高。

如果所有这些检查都正常,那么您应该能够运行 Valgrind,当然前提是您可以将它安装到目标机器上。当然,您可能需要自己build and install

我假设您有某种形式的终端/控制台访问,即通过串行端口、telnet 或可用于在目标上运行程序的东西。

更新:根据 cmets 的反馈,我开始怀疑您是否有可能在您的特定设备上运行 Valgrind。

【讨论】:

  • 我有点困惑。设备与此类似:p.globalsources.com/IMAGES/PDT/B1054670876/POS-Terminal.jpg。硬件说:双 CPU 32 位 ARM9 CPU。显然,当您运行此设备时(由于屏幕尺寸小),您几乎看不到数字和字母......所以我真的很好奇如何在此设备上运行 valgrind?我会在哪里看到输出?
  • See this question regarding "ARM9",看来您需要更高的精度。
  • 这是设备的一些规格:s30.postimg.org/6ftarwgz5/2012051115061359.jpg。我在那里看不到 Cortex?但即使支持 valgrind,我将如何在此设备上运行 valgrind?我在哪里可以看到输出? (我已经向您展示了设备的物理外观)
  • 如何在设备上运行代码?您是否有任何形式的终端访问,通过串行端口或网络?该设备似乎有大量可用于此目的的 I/O 端口。
  • 不,我通常使用一些下载工具将我必须的可执行文件下载到设备上。然后,当您启动设备可执行文件时,就会执行。我还没有使用终端访问设备...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 2017-08-14
  • 1970-01-01
  • 2011-05-27
相关资源
最近更新 更多