简体   繁体   English

使用valgrind在内存泄漏检测中抑制“dl-hack3-cond-1”

[英]suppression “dl-hack3-cond-1” in memory leak detection using valgrind

I am using valgrind to detect memory leaks. 我正在使用valgrind来检测内存泄漏。 the output from valgrind is generated by command valgrind的输出由命令生成

valgrind -v --leak-check=full ../spython test.py 2>/tmp/log

in fact, my program is a highly simplified python interpreter (homework ToT) as you can infer from the name spython test.py 事实上,我的程序是一个高度简化的python解释器(作业ToT),你可以从名称spython test.py推断出来

the thing that bothers me is the output at bottom 困扰我的是底部的输出

==24269== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 3 from 3)
--24269-- 
--24269-- used_suppression:      3 dl-hack3-cond-1

what does this mean? 这是什么意思? I've look up, and there's no dl-hack3-cond-1 in valgrind's suppression file default.supp . dl-hack3-cond-1一下,在valgrind的抑制文件default.supp没有dl-hack3-cond-1 I want to eliminate this annoying suppressed error (which means PASS the valgrind test, not by 'suppress the suppressions'). 我想消除这个恼人的抑制错误(这意味着通过valgrind测试,而不是'抑制抑制')。

here is the content of /tmp/log: 这是/ tmp / log的内容:

==24269== Memcheck, a memory error detector
==24269== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==24269== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==24269== Command: ../spython test.py
==24269== 
--24269-- Valgrind options:
--24269--    -v
--24269--    --leak-check=full
--24269-- Contents of /proc/version:
--24269--   Linux version 3.3.2-1-ARCH (tobias@T-POWA-LX) (gcc version 4.7.0 20120407 (prerelease) (GCC) ) #1 SMP PREEMPT Sat Apr 14 09:48:37 CEST 2012
--24269-- Arch and hwcaps: AMD64, amd64-sse3-cx16
--24269-- Page sizes: currently 4096, max supported 4096
--24269-- Valgrind library directory: /usr/lib/valgrind
--24269-- Reading syms from /home/tim/oop-2012-spring-spython/bin/spython (0x400000)
--24269-- Reading syms from /lib/ld-2.15.so (0x4000000)
--24269-- Reading syms from /usr/lib/valgrind/memcheck-amd64-linux (0x38000000)
--24269--    object doesn't have a symbol table
--24269--    object doesn't have a dynamic symbol table
--24269-- Reading suppressions file: /usr/lib/valgrind/default.supp
==24269== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-24269-by-tim-on-???
==24269== embedded gdbserver: writing to   /tmp/vgdb-pipe-to-vgdb-from-24269-by-tim-on-???
==24269== embedded gdbserver: shared mem   /tmp/vgdb-pipe-shared-mem-vgdb-24269-by-tim-on-???
==24269== 
==24269== TO CONTROL THIS PROCESS USING vgdb (which you probably
==24269== don't want to do, unless you know exactly what you're doing,
==24269== or are doing some strange experiment):
==24269==   /usr/lib/valgrind/../../bin/vgdb --pid=24269 ...command...
==24269== 
==24269== TO DEBUG THIS PROCESS USING GDB: start GDB like this
==24269==   /path/to/gdb ../spython
==24269== and then give GDB the following command
==24269==   target remote | /usr/lib/valgrind/../../bin/vgdb --pid=24269
==24269== --pid is optional if only one valgrind process is running
==24269== 
--24269-- REDIR: 0x4017a20 (strlen) redirected to 0x380625a7 (???)
--24269-- Reading syms from /usr/lib/valgrind/vgpreload_core-amd64-linux.so (0x4a24000)
--24269--    object doesn't have a symbol table
--24269-- Reading syms from /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so (0x4c26000)
--24269--    object doesn't have a symbol table
--24269-- REDIR: 0x4017890 (index) redirected to 0x4c2aed0 (index)
--24269-- REDIR: 0x4017910 (strcmp) redirected to 0x4c2be90 (strcmp)
--24269-- Reading syms from /usr/lib/libstdc++.so.6.0.17 (0x4e31000)
--24269--    object doesn't have a symbol table
--24269-- Reading syms from /lib/libm-2.15.so (0x5135000)
--24269--    object doesn't have a symbol table
--24269-- Reading syms from /usr/lib/libgcc_s.so.1 (0x542a000)
--24269--    object doesn't have a symbol table
--24269-- Reading syms from /lib/libc-2.15.so (0x563f000)
--24269-- REDIR: 0x56c73a0 (strncasecmp) redirected to 0x4a24620 (_vgnU_ifunc_wrapper)
--24269-- REDIR: 0x56c1470 (strnlen) redirected to 0x4a24620 (_vgnU_ifunc_wrapper)
--24269-- REDIR: 0x56c50e0 (strcasecmp) redirected to 0x4a24620 (_vgnU_ifunc_wrapper)
--24269-- REDIR: 0x56c2e60 (__GI_strrchr) redirected to 0x4c2acf0 (__GI_strrchr)
--24269-- REDIR: 0x56c1340 (strlen) redirected to 0x4a24620 (_vgnU_ifunc_wrapper)
--24269-- REDIR: 0x57863d0 (__strlen_sse2_pminub) redirected to 0x4c2b210 (strlen)
--24269-- REDIR: 0x4e90430 (operator new(unsigned long)) redirected to 0x4c2a3d0 (operator new(unsigned long))
--24269-- REDIR: 0x56c9a70 (memcpy@@GLIBC_2.14) redirected to 0x4a24620 (_vgnU_ifunc_wrapper)
--24269-- REDIR: 0x576b790 (__memcpy_ssse3_back) redirected to 0x4c2c1a0 (memcpy@@GLIBC_2.14)
--24269-- REDIR: 0x56c38a0 (bcmp) redirected to 0x4a24620 (_vgnU_ifunc_wrapper)
--24269-- REDIR: 0x5780d00 (__memcmp_sse4_1) redirected to 0x4c2cf10 (bcmp)
--24269-- REDIR: 0x56bbab0 (malloc) redirected to 0x4c2a8d0 (malloc)
--24269-- REDIR: 0x4e8e750 (operator delete(void*)) redirected to 0x4c296c0 (operator delete(void*))
--24269-- REDIR: 0x4e90540 (operator new[](unsigned long)) redirected to 0x4c29e30 (operator new[](unsigned long))
--24269-- REDIR: 0x56c3ec0 (memset) redirected to 0x4a24620 (_vgnU_ifunc_wrapper)
--24269-- REDIR: 0x56c3f00 (__GI_memset) redirected to 0x4c2d2f0 (memset)
--24269-- REDIR: 0x56bbfd0 (free) redirected to 0x4c29a30 (free)
--24269-- REDIR: 0x4e8e780 (operator delete[](void*)) redirected to 0x4c292a0 (operator delete[](void*))
--24269-- REDIR: 0x56cada0 (__GI___rawmemchr) redirected to 0x4c2d670 (__GI___rawmemchr)
--24269-- REDIR: 0x56c1390 (__GI_strlen) redirected to 0x4c2b230 (__GI_strlen)
--24269-- REDIR: 0x56bf850 (strcmp) redirected to 0x4a24620 (_vgnU_ifunc_wrapper)
--24269-- REDIR: 0x5759bb0 (__strcmp_sse42) redirected to 0x4c2bdd0 (strcmp)
--24269-- REDIR: 0x56cafb0 (strchrnul) redirected to 0x4c2d620 (strchrnul)
==24269== 
==24269== HEAP SUMMARY:
==24269==     in use at exit: 0 bytes in 0 blocks
==24269==   total heap usage: 39,501 allocs, 39,501 frees, 973,647 bytes allocated
==24269== 
==24269== All heap blocks were freed -- no leaks are possible
==24269== 
==24269== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 3 from 3)
--24269-- 
--24269-- used_suppression:      3 dl-hack3-cond-1
==24269== 
==24269== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 3 from 3)

That suppression certainly exists for me in my default.supp: 我的default.supp中确实存在这种抑制:

$ grep dl-hack $(locate default.supp | grep /usr)
   dl-hack3-cond-0
   dl-hack3-cond-1
   dl-hack3-cond-2
   dl-hack3-cond-3
   dl-hack3-cond-4
   dl-hack4-64bit-addr-1
   dl-hack4-64bit-addr-2
   dl-hack4-64bit-addr-3
   dl-hack5-32bit-addr-1
   dl-hack5-32bit-addr-3
   dl-hack5-32bit-addr-4

And your valgrind run is passing. 你的valgrind奔跑了。 It says there were 0 errors in 0 contexts, not including the suppressed errors. 它说0个上下文中有0个错误,不包括被抑制的错误。 You shouldn't care about the errors that were suppressed, since they aren't related to your code. 您不应该关心被抑制的错误,因为它们与您的代码无关。 Typically they are issues in the system libraries, and so you would have no way to fix them anyway. 通常它们是系统库中的问题,因此无论如何您都无法修复它们。

In the case of dl-hack suppressions, they are related to the dynamic linker. 在dl-hack抑制的情况下,它们与动态链接器相关。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM