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_DEFINED
或VALGRIND_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:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章