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

时间:2015-08-17 10:41:41

标签: c++ valgrind

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

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

但是,当我加入<memcheck.h><valgrind/memcheck.h>时,会产生:

  

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

根据Stack Overflow&#39; How do I find which rpm package supplies a file I'm looking for?,我执行了RPM file search,但memcheck.h返回0次。

问题

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

  2. 如果信息准确无误,那么我在哪里可以找到memcheck.h

  3. $ 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
    

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

使用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 了解更多信息