2012-08-26 28 views
6

Valgrind kullanarak bir bellekte geçersiz yazım yaptığım yeri bulmaya çalışıyorum. Bu, hangi fonksiyonda, hangi fonksiyonda olduğunu, ancak hangi satırda olmadığını söyler. Fonksiyon oldukça küçük olmasına rağmen, Valgrind'de gösterilen satır numarasına sahip olmak isterim. Bunu Valgrind'in bazı çıktılarında gördüm, ama şu anda gösterilmiyorlar ve nedenini merak ediyorum.Valgrind satır numaralarını göstermiyor

[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) 
[...] 

Satır sayısı dosya adı da bir çift kolon sonra gösterilmiştir çıkışları gördü

çıkış aşağıdaki gibidir. Yani /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr:23 veya benzerleri.

Bunu nasıl etkinleştirebilirim? Bu bir sp_ParticleBuffer_init işlevidir.

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; 
} 

cevap

12

Hata ayıklama bilgilerini ikili dosyalarınıza eklemeniz gerekir. gcc kullanıyorsanız, -g bayrağını geçirin.

+0

OMG. Teşekkürler dostum. : Code :: Blocks IDE'yi kullanarak derledim ve Debug modunda derlemeyi çalıştırdım. '-g' kullanacağını düşündüm, ama yapmadı. Belki bir gün onu bir şekilde etkisiz hale getirdim. Ayrıca, etkinliğin sadece dosya isminin değil, yürütilebilir isminin gösterildiğini fark etmediğim için etkin olduklarını düşündüm. xD BUt valgind, hata ayıklama sembolleri olmadan fonksiyonun adını nasıl biliyor? –

+0

@NiklasR Düzeltdiniz mi? – cnicutar

+1

Evet, ayarlarda '-g' seçeneğinin etkinleştirilmesi bunu yaptı. :) –

İlgili konular