2012-08-26 18 views
6

Estoy tratando de averiguar dónde hice las escrituras no válidas en un trozo de memoria usando Valgrind. Dice que existe tal problema, también en qué función, pero no en qué línea. Aunque la función es bastante pequeña, me gustaría que se muestre el número de línea en Valgrind. Lo he visto en algunos productos de Valgrind, pero actualmente no se muestran y me pregunto por qué.Valgrind no muestra números de línea

La salida es la siguiente:

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

vi salidas donde se muestra el número de línea después de un doble y coma detrás del nombre de archivo. Es decir. /home/niklas/Arbeitsfläche/spyr/bin/Debug/spyr:23 o similar.

¿Cómo puedo habilitar esto?

FYI, esta es la función 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; 
} 

Respuesta

12

Necesita incluir información de depuración en sus binarios. Pase la bandera -g si está usando gcc.

+0

OMG. Gracias hombre. : o Estaba compilando usando Code :: Blocks IDE y ejecuté la compilación en modo Debug. Pensé que usaría '-g', pero no fue así. Tal vez de alguna manera lo desactivé algún día ... También pensé que estaban habilitados ya que no reconocí que valgrind solo me muestra el nombre ejecutable, no el nombre del archivo. xD BUt ¿cómo conoció valgrind el nombre de la función sin símbolos de depuración? –

+0

@NiklasR ¿Lo arreglaste? – cnicutar

+1

Sí, habilitando la opción '-g' en la configuración lo hizo. :) –

Cuestiones relacionadas