我们正试图在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次。
问题
博客文章有点过时了。信息是否仍然适用?
如果信息准确无误,那么我在哪里可以找到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
答案 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 了解更多信息