Valgrind错误在操作系统上有所不同

时间:2011-10-31 15:50:31

标签: c++ linux macos debugging valgrind

我使用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 lib中报告了错误,我认为升级库中可能没有错误(升级版本在两台机器上都是相同的1.46.1)。

不同错误报告的原因是什么?

3 个答案:

答案 0 :(得分:3)

Valgrind不是静态分析工具,而是运行时工具,即valgrind在虚拟机上运行程序。许多应用程序中有大量代码不是由每台机器触发或编译的,这解释了不同之处。

答案 1 :(得分:1)

您是否在两台计算机上使用不同的编译器?也许不同的编译器或不同的编译器版本在访问未初始化的变量时会产生具有不同行为的代码。

答案 2 :(得分:1)

我已经有了表格的陈述

if (A && B) {
  do_stuff
}

其中B仅在A为真时才初始化。当我没有使用优化时,程序(如预期的那样)首先检查A然后,如果是,则检查B。优化时,编译器发现首先检查B是有利可图的; 由于AB都没有任何副作用或依赖于易失性内存,这是等效的。后一种行为导致valgrind给我一种你所看到的警告类型,即使代码没有任何问题。我猜这里发生了类似的事情。