Valgrind:致命错误:memcheck.h:没有这样的文件或目录

Posted

技术标签:

【中文标题】Valgrind:致命错误:memcheck.h:没有这样的文件或目录【英文标题】:Valgrind: fatal error: memcheck.h: No such file or directory 【发布时间】:2015-11-09 23:16:53 【问题描述】:

我们正在尝试在 Valgrind 报告的 C++ 项目中追踪 条件跳转或移动取决于未初始化的值。发现中提供的地址并没有真正的帮助,因为它指向 GCC 扩展程序集块的末尾,而不是导致问题的实际变量。

根据Valgrind的Eliminating undefined values with Valgrind, the easy way,我们可以在包含<memcheck.h>之后使用VALGRIND_CHECK_MEM_IS_DEFINEDVALGRIND_CHECK_VALUE_IS_DEFINED。此外,这些宏或函数显然记录在头文件中(肯定没有它们的手册页)。

但是,当我包含 <memcheck.h><valgrind/memcheck.h> 时,会导致:

致命错误:memcheck.h:没有这样的文件或目录

基于 Stack Overflow 的 How do I find which rpm package supplies a file I'm looking for?,我执行了 RPM file search,但它为 memcheck.h 返回了 0 个命中。

问题

    博客文章有点过时了。这些信息是否仍然适用?

    如果信息准确,我在哪里可以找到memcheck.h


$ uname -a
Linux localhost.localdomain 4.1.4-200.fc22.x86_64 #1 SMP Tue Aug 4 03:22:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

$ g++ --version
g++ (GCC) 5.1.1 20150618 (Red Hat 5.1.1-4)
...

$ valgrind --version
valgrind-3.10.1

【问题讨论】:

sudo updatedb; locate memcheck.h 返回什么? 你试过#include <valgrind/memcheck.h>吗? @Victor - locate memcheck.h 什么也不返回。我在命令下方得到一个新提示。 @gsamaras - #include <valgrind/memcheck.h> 导致同样的错误。 【参考方案1】:

您必须安装包含memcheck.h 的RPM valgrind-devel

*-devel 软件包通常位于“可选”存储库中(例如 RHEL 6 上的 rhel-x86_64-server-optional-6)。此外,您可以在 Google 上找到 RPM,下载并自行安装。无论采用哪种方法,一旦安装,memcheck.h 通常会放置在 /usr/include/valgrind 中。

【讨论】:

这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。 @011001000110000101110110011010 作者还询问在哪里可以找到 memcheck.h,它位于 RPM“valgrind-devel”(不同于 valgrind)中【参考方案2】:

使用 valgrind 挖掘未初始化值错误的另一种方法是 使用嵌入式 gdbserver。

然后您可以在程序中放置断点,并以交互方式 使用各种检查各种地址/长度的定义 memcheck 监控命令如:

  check_memory [addressable|defined] <addr> [<len>]
        check that <len> (or 1) bytes at <addr> have the given accessibility
            and outputs a description of <addr>

参见例如http://www.valgrind.org/docs/manual/mc-manual.html#mc-manual.monitor-commands 了解更多信息

【讨论】:

以上是关于Valgrind:致命错误:memcheck.h:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

使用valgrind时出现奇怪的错误?也许是一个错误?

Valgrind 错误 - 无法执行二进制文件

Valgrind 报告内存肯定丢失而没有错误

如何理解我的 valgrind 错误消息?

抑制源自 valgrind 中特定库的所有错误

使用 pthread_create 时出现 valgrind 内存泄漏错误