Valgrind的“noise”是什么意思?

11

当我使用valgrind来帮助调试我正在开发的应用程序时,我注意到有大量噪声,似乎在抱怨标准库。作为一个测试,我做了这个:

echo 'int main() {return 0;}' | gcc -x c -o test -

然后我做了这个;

valgrind ./test

==1096== Use of uninitialised value of size 8
==1096==    at 0x400A202: _dl_new_object (in /lib64/ld-2.10.1.so)
==1096==    by 0x400607F: _dl_map_object_from_fd (in /lib64/ld-2.10.1.so)
==1096==    by 0x4007A2C: _dl_map_object (in /lib64/ld-2.10.1.so)
==1096==    by 0x400199A: map_doit (in /lib64/ld-2.10.1.so)
==1096==    by 0x400D495: _dl_catch_error (in /lib64/ld-2.10.1.so)
==1096==    by 0x400189E: do_preload (in /lib64/ld-2.10.1.so)
==1096==    by 0x4003CCD: dl_main (in /lib64/ld-2.10.1.so)
==1096==    by 0x401404B: _dl_sysdep_start (in /lib64/ld-2.10.1.so)
==1096==    by 0x4001471: _dl_start (in /lib64/ld-2.10.1.so)
==1096==    by 0x4000BA7: (within /lib64/ld-2.10.1.so)
* large block of similar snipped *
==1096== Use of uninitialised value of size 8
==1096==    at 0x4F35FDD: (within /lib64/libc-2.10.1.so)
==1096==    by 0x4F35B11: (within /lib64/libc-2.10.1.so)
==1096==    by 0x4A1E61C: _vgnU_freeres (vg_preloaded.c:60)
==1096==    by 0x4E5F2E4: __run_exit_handlers (in /lib64/libc-2.10.1.so)
==1096==    by 0x4E5F354: exit (in /lib64/libc-2.10.1.so)
==1096==    by 0x4E48A2C: (below main) (in /lib64/libc-2.10.1.so)
==1096==
==1096== ERROR SUMMARY: 3819 errors from 298 contexts (suppressed: 876 from 4)
==1096== malloc/free: in use at exit: 0 bytes in 0 blocks.
==1096== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==1096== For counts of detected errors, rerun with: -v
==1096== Use --track-origins=yes to see where uninitialised values come from
==1096== All heap blocks were freed -- no leaks are possible.
你可以在这里查看完整的结果: http://pastebin.com/gcTN8xGp 我有两个问题:首先,是否有一种方法可以抑制所有噪声? --show-below-main默认设置为no,但似乎没有一个等效的--show-after-main选项。
3个回答

12

你可以通过添加以下内容来抑制输出:

{
   ld error suppression
   Memcheck:Cond
   fun:dl_main
   fun:_dl_sysdep_start
   fun:_dl_start
   obj:/lib64/ld-2.10.1.so
}

要想解决这个问题,你需要将/usr/lib/valgrind/default.supp文件路径指定为你自己的抑制文件或使用默认的抑制文件。

这似乎是一个已知的链接器/加载器错误,至少对于Debian和Arch Linux开发人员而言;我不确定其他人以及他们计划采取的行动。


问题出在使用了比Valgrind熟悉的glibc版本更新的库上。感谢你指出了正确的方向。 - Chris Huang-Leaver

6

升级到Valgrind 3.5.0或更高版本。 默认的.supp文件已经更新,其中包括其他内容。


4

我时不时会遇到这些症状,解决方法总是将我的valgrind和libc软件包升级到同步版本。Debian的可爱精灵们会处理剩下的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接