2010-10-25 15 views
5

He intentado ejecutar valgrind (memcheck y macizo) en una aplicación que escribí, pero todo lo que obtengo son direcciones para las funciones que se ejecutaron.¡Valgrind no devolverá las líneas de origen!

--------------------------------- 
Context accounted for 0.6% of measured spacetime 
    0x805F29A: (within prog_name) 
    0x8141740: (within prog_name) 

Called from: 
    0.6% : 0x812E077: (within prog_name) 

--------------------------------- 
Context accounted for 0.5% of measured spacetime 
    0x805F29A: (within prog_name) 
    0x81418FB: (within prog_name) 

Called from: 
    0.5% : 0x812E077: (within prog_name) 

compilé mi aplicación con la bandera -g para poner los símbolos de depuración en. ¿Hay alguna otra razón por la cual valgrind no mostraría la línea de fuente?

EDIT: valgrind version 3.2.1-Debian; g ++ 4.3.1

+1

No estoy seguro, pero si Usted 'gdb prog_name' su aplicación y prueba algo como' break 0x812E077', ¿'gdb' muestra los números de línea? (No debería necesitar siquiera 'ejecutar 'el programa, solo tiene' gdb' cargarlo.) – aschepler

+0

@aschepler - Lo intenté. Cada vez que trato de hacer eso, gdb no puede encontrar la función llamada "0x812E077" y pregunta si está en una biblioteca que se cargará más tarde ... así que eso no funcionó. –

+1

Vaya, debería haber sido 'break * 0x812E077'. Pero me alegro de que hayas encontrado una solución. – aschepler

Respuesta

8

descubrí que pasé en las banderas -g y -ggdb a g++ en tiempo de compilación. Omitir la marca -g provocó que este problema desapareciera.

1

Supongo que no está mencionando banderas correctas y yendo con banderas predeterminadas.

--show-alcanzatable es una de esas banderas que debe habilitarse, por favor mire otras banderas y habilítelas.

--Cheers

2

Hay un par de razones posibles:

  • que puede tener inadvertidamente despojado de su ejecutable (explicación más probable),
  • es posible que se ejecute código compilados JIT (aunque la dirección no parece que eso es el caso).

¿Qué significa file prog_name decir? Si dice "despojado", es un problema. También es posible que desee comprobar si otras herramientas, p. BGF sabe qué símbolo está en la dirección 0x805F29A:

gdb prog_name 
(gdb) info symbol 0x805F29A 
+0

Nunca recibí un mensaje eliminado. No estoy seguro, pero sospecho que mezclar las banderas '-g' y '-ggdb' lo estropeó. –

+0

@sheepsimulator Puede sospechar todo lo que quiera, pero si desea que lo ayudemos, proporcione la información que solicitamos: ¿qué * exactamente * dice 'file prog_name'? ¿Qué dice exactamente 'símbolo de información' de GDB? –

+0

Agradezco su demostración de soporte, pero este problema desapareció cuando omití el indicador -g en el momento de la compilación. Considero que mi pregunta fue respondida. –

1

Para otros lectores con un problema similar (que tenía el mismo pero mis opciones del compilador estaban bien): Resulta que valgrind necesita la ruta al ejecutable, si no le dé esto, entonces funcionará bien, pero no le dará los números de línea. En mi caso fue el ejecutable en un directorio diferente, que estaba en mi camino, pero para obtener la información de la línea que tenía que ejecutar

valgrind --leak-check = full path_to_myprogram/miprograma

Cuestiones relacionadas