2011-10-31 26 views
0

我使用valgrind来调试我的应用程序。我有两台机器,我希望无错地运行代码。 一个是运行valgrind 3.7.0的ubuntu 11.10,另一个是带有valgrind 3.6.0和valgrind 3.8.0的Mac OS X 10.7.2。Valgrind错误在操作系统中有所不同

我运行下面的命令Valgrind的:

valgrind --track-origins=yes ./my_program 

在Linux机器上我没有得到任何错误报告。在当误差在升压LIB报道了Mac的valgrind抱怨

==35723== Conditional jump or move depends on uninitialised value(s) 
==35723== at 0x10004DCAF: boost::spirit ... 

我不认为这有可能是Boost库的错误(增强版是在两台机器上1.46.1相同)。

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

+0

目前的Boost版本是1.47,你怎么能有3.6.1? –

+0

你为什么在意他们会如何变得不同?相反,解决一个版本指出的问题,然后两者都会通过。 –

+0

3.6.1是Valgrind的最新版本,@ tune2fs请修复您的问题。 – ks1322

回答

3

Valgrind不是一个静态分析工具,而是一个运行时分析工具,即valgrind在虚拟机上运行程序。在许多应用程序中有很多代码不是由每台机器触发或编译的,因此解释了这些差异。

1

你在两台电脑上使用不同的编译器吗?也许不同的编译器或不同的编译器版本在访问未初始化的变量时会产生具有不同行为的代码。

+0

它们是两台机器上两个不同版本的gcc,我尝试使用相同版本进行编译。 – tune2fs

+0

它不是编译器。 – tune2fs

1

我有过的形式,其中

if (A && B) { 
    do_stuff 
} 

B如果A是真的只是初始化语句。  当我没有使用优化时,程序(如预期的)首先检查A,然后,如果它是真的,则检查B。  优化时,编译器发现首先检查B是有利的; ,因为AB都没有任何副作用或依赖于易失性存储器,这是等效的。  这后一种行为导致valgrind给我你看到的警告类型,即使代码没有任何错误。  我的猜测是这里有类似的事情发生。

相关问题