2012-07-16 16 views
13

पर अप्रारंभीकृत मूल्यों की रिपोर्ट मैं इस सी कार्यक्रम या तो gcc test.c या clang test.c साथ तैयार की है:वेलग्रिंड खाली सी कार्यक्रम

==9232== Memcheck, a memory error detector 
==9232== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al. 
==9232== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info 
==9232== Command: ./a.out 
==9232== 
==9232== Conditional jump or move depends on uninitialised value(s) 
==9232== at 0x4017876: index (in /usr/lib/ld-2.16.so) 
==9232== by 0x4007902: expand_dynamic_string_token (in /usr/lib/ld-2.16.so) 
==9232== by 0x4008204: _dl_map_object (in /usr/lib/ld-2.16.so) 
==9232== by 0x400180D: map_doit (in /usr/lib/ld-2.16.so) 
==9232== by 0x400E785: _dl_catch_error (in /usr/lib/ld-2.16.so) 
==9232== by 0x40010DB: do_preload (in /usr/lib/ld-2.16.so) 
==9232== by 0x4004546: dl_main (in /usr/lib/ld-2.16.so) 
==9232== by 0x4014B5D: _dl_sysdep_start (in /usr/lib/ld-2.16.so) 
==9232== by 0x4004DFD: _dl_start (in /usr/lib/ld-2.16.so) 
==9232== by 0x4001627: ??? (in /usr/lib/ld-2.16.so) 
==9232== 
==9232== Conditional jump or move depends on uninitialised value(s) 
==9232== at 0x401787B: index (in /usr/lib/ld-2.16.so) 
==9232== by 0x4007902: expand_dynamic_string_token (in /usr/lib/ld-2.16.so) 
==9232== by 0x4008204: _dl_map_object (in /usr/lib/ld-2.16.so) 
==9232== by 0x400180D: map_doit (in /usr/lib/ld-2.16.so) 
==9232== by 0x400E785: _dl_catch_error (in /usr/lib/ld-2.16.so) 
==9232== by 0x40010DB: do_preload (in /usr/lib/ld-2.16.so) 
==9232== by 0x4004546: dl_main (in /usr/lib/ld-2.16.so) 
==9232== by 0x4014B5D: _dl_sysdep_start (in /usr/lib/ld-2.16.so) 
==9232== by 0x4004DFD: _dl_start (in /usr/lib/ld-2.16.so) 
==9232== by 0x4001627: ??? (in /usr/lib/ld-2.16.so) 
==9232== 
==9232== 
==9232== HEAP SUMMARY: 
==9232==  in use at exit: 0 bytes in 0 blocks 
==9232== total heap usage: 0 allocs, 0 frees, 0 bytes allocated 
==9232== 
==9232== All heap blocks were freed -- no leaks are possible 
==9232== 
==9232== For counts of detected and suppressed errors, rerun with: -v 
==9232== Use --track-origins=yes to see where uninitialised values come from 
==9232== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0) 

जीसीसी संस्करण 4.7.1 और बजना संस्करण:

int main (void) { 
    return 0; 
} 

valgrind ./a.out मुझे इस देता है 3.1। इसके साथ क्या हो रहा है? क्या मेरी याद में कुछ गड़बड़ है? कुछ समय है क्योंकि मैंने पिछली बार वाल्ग्रिंड का उपयोग किया था, लेकिन मुझे लगता है कि यह सामान्य व्यवहार नहीं है। Yelp?


समाधान: यह है कि मैं क्या एक valgrind .supp फ़ाइल का उपयोग कर इन लिंकर त्रुटियों को दबाने के लिए @Shawn से सीखा से संभव है।

valgrind --gen-suppressions=all ./a.out 

तब मैं कोष्ठक में नया हिस्सा निकालें और उन्हें एक फ़ाइल my.supp में सीधे डाल:

{ 
    <linker> 
    Memcheck:Cond 
    fun:index 
    fun:expand_dynamic_string_token 
    fun:_dl_map_object 
    fun:map_doit 
    fun:_dl_catch_error 
    fun:do_preload 
    fun:dl_main 
    fun:_dl_sysdep_start 
    fun:_dl_start 
    obj:/usr/lib/ld-2.16.so 
} 

अब मैं चला सकते हैं क्या मैंने किया था --gen-suppressions=all विकल्प का उपयोग कर मेरी कार्यक्रम पर valgrind चल रहा था --suppressions विकल्प के साथ valgrind मेरी नई फ़ाइल को इंगित करने और संदेश दबा दिया जाएगा:

valgrind --suppressions=/home/foo/my.supp ./a.out 
+2

जैसा कि @ypnos ने बताया है, जीसीसी द्वारा संकलित एक "खाली" सी प्रोग्राम खाली से बहुत दूर है। एक अच्छा समय के लिए 'ldd a.out' आज़माएं। – msw

+0

@msw - हर दिन कुछ सीखना :) –

उत्तर

9

यह knowissue वाल्ग्रिंड के साथ आमतौर पर addressed using valgrind suppressions है। इस मुद्दे को मानते हुए आपके डिस्ट्रो के लिए रिपोर्ट की गई है, दमन सूची जल्द ही अपडेट की जानी चाहिए और अगले अपडेट में गायब हो जाएगी।

अभी के लिए, संदेश को अनदेखा करना सुरक्षित है।

यदि यह आपको परेशान करता है, तो आप your own suppressions file बनाए रख सकते हैं और इसका उपयोग तब तक कर सकते हैं जब तक आपका डिस्ट्रो डिफ़ॉल्ट फ़ाइल (आमतौर पर /var/lib/valgrind/default.supp) अपडेट नहीं करता है।

+0

वाह यह एक पुरानी बग (2007) है। याद दिलाने के लिए शुक्रिया –

5

यह एक "पी है रॉबलेम "गतिशील लिंकर में और यह आम है। यह main() से पहले प्रकट होता है। आप संदेश को अनदेखा कर सकते हैं।

+1

आह, मैं देखता हूं। जब भी मुझे लगता है कि मुझे कुछ सही नहीं है, तो मुझे पागल हो जाता है; कोई valgrind के साथ बहस नहीं कर सकता .. –

संबंधित मुद्दे