不同操作系统的Valgrind错误不同
Valgrind error differ in operating systems
我使用valgrind调试我的应用程序。我有两台机器,我想在其中运行代码而不出现错误。一个是运行valgrind 3.7.0的ubuntu 11.10,一个是运行valgrind 3.6.0和valgrind 3.8.0的Mac OS X 10.7.2。
我执行如下valgrind命令:
valgrind --track-origins=yes ./my_program
在Linux机器上我没有得到任何错误报告。在Mac上,valgrind抱怨
==35723== Conditional jump or move depends on uninitialised value(s)
==35723== at 0x10004DCAF: boost::spirit ...
由于在boost库中报告了错误,我不认为在boost库中可能存在错误(boost版本在两台机器上是相同的1.46.1)。
出现不同错误报告的原因是什么?
Valgrind不是一个静态分析工具,而是一个运行时工具,即Valgrind在虚拟机上运行程序。在许多应用程序中,有许多代码不是由每台机器触发的,也不是为每台机器编译的,这解释了它们之间的差异。
您在两台计算机上使用不同的编译器吗?当访问未初始化的变量时,不同的编译器或不同的编译器版本可能会产生不同行为的代码。
我有过这样的语句
if (A && B) {
do_stuff
}
中A
为true时才初始化B
。 当我没有使用优化时,程序(如预期的那样)首先检查A
,然后,如果它是真的,检查B
。优化时,编译器发现首先检查B
是有益的;由于A
和B
都没有任何副作用或依赖于易失性内存,这是等效的。后一种行为导致valgrind
给了我你所看到的警告类型,即使代码没有任何真正的错误。
相关文章:
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 重载 new 和 delete 会导致 valgrind 错误
- 使用valgrind跟踪段错误,并了解valgrind输出
- 我如何理解我的Valgrind错误消息
- STD :: FPCLASSIFY的错误结果使用Valgrind进行长时间的双重双重结果
- Valgrind 错误和内存泄漏与 Python/C API
- 将TopoDS_Face对象分配给其子对象编译没有错误,但我有 3 个 valgrind 错误
- Opencl ClgetPlatFormids给出了约230个Valgrind Memcheck错误
- 为什么我会因Valgrind遇到内存错误?(C ,抽象语法树评估)
- valgrind错误无效读数4
- Valgrind 检查简单多线程 C++11 得到 SIG11 错误
- Valgrind 显示无效的读/写错误,但我不使用 new 或 calloc,只使用向量和固定数组
- C++ mac OS X El Capitan上的openmp,Valgrind错误(数据竞赛)
- Valgrind 错误:系统调用参数 epoll_pwait(sigmask) 指向不可寻址的字节
- Valgrind中的一些错误
- 使用 valgrind 时获得 int 变量指针的无效读取大小错误
- 使用 valgrind 的地图中的读取大小错误无效
- Valgrind内存泄漏和错误
- Valgrind 在构建时出现由 G++5 内联的错误 - Valgrind 或 G++5 中的错误
- 双重免费或腐败错误- valgrind