2012-08-26 17 views
6

नहीं दिखाता है, मैं यह पता लगाने की कोशिश कर रहा हूं कि मैंने Valgrind का उपयोग करके स्मृति के एक टुकड़े को अमान्य बना दिया था। यह बताता है कि इस तरह की एक समस्या है, यह भी किस काम में है, लेकिन किस लाइन में नहीं। हालांकि समारोह काफी छोटा है, मैं वैलग्रींड में दिखाया गया लाइन-नंबर रखना चाहता हूं। मैंने इसे वालग्रिंड के कुछ आउटपुट पर देखा है, लेकिन वर्तमान में वे नहीं दिखाए जाते हैं, और मुझे आश्चर्य है कि क्यों।वालग्रिंड लाइन-नंबर

[email protected]:~/Arbeitsfläche/spyr/bin/Debug$ valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./spyr 
[...] 
==4404== Invalid write of size 4 
==4404== at 0x8048849: sp_ParticleBuffer_init (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
==4404== by 0x8048BFC: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
==4404== by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
==4404== Address 0x422a0a0 is 4 bytes after a block of size 4 alloc'd 
==4404== at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) 
==4404== by 0x8048BC1: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
==4404== by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
==4404== 
==4404== Invalid write of size 4 
==4404== at 0x8048865: sp_ParticleBuffer_init (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
==4404== by 0x8048BFC: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
==4404== by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
==4404== Address 0x422a09c is 0 bytes after a block of size 4 alloc'd 
==4404== at 0x402BE68: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) 
==4404== by 0x8048BC1: sp_ParticleSystem_createParticle (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
==4404== by 0x8048691: main (in /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr) 
[...] 

मैं आउटपुट जहां लाइन नंबर फ़ाइल-नाम के पीछे एक डबल कोलन के बाद दिखाया गया है देखा:

उत्पादन निम्नलिखित है। अर्थात। /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr:23 या इसी तरह के।

मैं इसे कैसे सक्षम कर सकता हूं?

एफवाईआई, यह sp_ParticleBuffer_init फ़ंक्शन है।

int sp_ParticleBuffer_init(sp_ParticleBuffer* buffer, sp_Uint32 buffer_size, int init_zero) { 
    size_t size = sizeof(sp_Particle) * buffer_size; 
    buffer->next = null; 
    buffer->array = (sp_Particle*) malloc(size); 
    buffer->alive_count = 0; 

    if (!buffer->array) return SPYR_ALLOCFAILED; 
    if (init_zero) memset((void*) buffer->array, 0, size); 
    return SPYR_NOERR; 
} 

उत्तर

12

आपको अपनी बाइनरी में डीबग जानकारी शामिल करने की आवश्यकता है। यदि आप gcc का उपयोग कर रहे हैं तो -g ध्वज पास करें।

+0

ओएमजी। धन्यवाद दोस्त। : ओ मैं कोड :: ब्लॉक आईडीई का उपयोग करके संकलित कर रहा था और डीबग मोड में संकलन चलाया। सोचा था कि यह '-g' का उपयोग करेगा, लेकिन ऐसा नहीं हुआ। हो सकता है कि मैंने इसे किसी दिन किसी दिन निष्क्रिय कर दिया .. मैंने यह भी सोचा कि वे सक्षम थे क्योंकि मुझे यह नहीं पता था कि वाल्ग्रिंड केवल मुझे निष्पादन योग्य नाम दिखाता है, फ़ाइल नाम नहीं। एक्सडी ब्यूट वाल्ग्रिंड को डिबगिंग प्रतीकों के बिना फ़ंक्शन का नाम कैसे पता था? –

+0

@NiklasR क्या आपने इसे ठीक किया? – cnicutar

+1

हां, सेटिंग्स में '-g' विकल्प को सक्षम करने से यह किया गया। :) –

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