2012-08-26 17 views
6

Ich versuche herauszufinden, wo ich mit Valgrind ungültige Schreibvorgänge in ein Stück Speicher gemacht habe. Es besagt, dass es ein solches Problem gibt, auch in welcher Funktion, aber nicht in welcher Zeile. Obwohl die Funktion ziemlich klein ist, möchte ich die Zeilennummer in Valgrind anzeigen lassen. Ich habe das auf einigen Ausgaben von Valgrind gesehen, aber derzeit werden sie nicht gezeigt, und ich frage mich warum.Valgrind zeigt keine Zeilennummern

Der Ausgang ist die folgende:

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

Ich sah Ausgänge, bei denen die Zeilennummer nach einem Doppeldoppelpunkt hinter dem Dateinamen angezeigt wird. I.e. /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr:23 oder ähnlich.

Wie kann ich dies aktivieren?

FYI, das ist die sp_ParticleBuffer_init Funktion.

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

Antwort

12

Sie müssen Debuginformationen in Ihre Binärdateien aufnehmen. Übergeben Sie die -g Flagge, wenn Sie gcc verwenden.

+0

OMG. Danke, Mann. : o Ich kompilierte mit der IDE von Code :: Blocks und führte die Kompilierung im Debug-Modus durch. Dachte, es würde '-g' verwenden, aber es tat es nicht. Vielleicht habe ich es irgendwann deaktiviert. Ich dachte auch, dass sie aktiviert sind, da ich nicht erkannte, dass Valgrind mir nur den ausführbaren Namen anzeigt, nicht den Dateinamen. xD BUt Wie wusste Valgrind den Namen der Funktion, ohne Symbole zu debuggen? –

+0

@NiklasR Hast du es repariert? – cnicutar

+1

Ja, die Option '-g' in den Einstellungen wurde aktiviert. :) –