with most lost leak kinds definitely debug common check all macos debugging gcc valgrind

macos - lost - valgrind most common options



¿Depuración de símbolos perdidos al vincular? (2)

Estoy tratando de compilar un programa con símbolos de depuración para que valgrind me dé los números de línea. Descubrí que si compilo un programa de prueba simple de una sola vez (con -g), entonces contiene los símbolos. Sin embargo, si compilo en dos pasadas (es decir, compilación y luego enlace), entonces no contiene los símbolos de depuración.

Aquí está el comando de compilación para el caso de paso único:

g++ -g file.c -o file

Y por dos pases

g++ -g -c file.c -o file.o g++ -g file.o -o file

El programa actual tiene este aspecto y contiene una escritura no válida simple

int main(){ int* x = new int[10]; x[10]=1;

}

Si compilo con una pasada, valgrind da lo siguiente (note el número de línea al final)

==24114== 40 bytes in 1 blocks are definitely lost in loss record 2 of 9 ==24114== at 0xB823: malloc (vg_replace_malloc.c:266) ==24114== by 0x5768D: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib) ==24114== by 0x576DA: operator new[](unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib) ==24114== by 0x100000F09: main (file.c:3)

mientras que si compilo en dos pasadas obtengo esto (sin número de línea):

==24135== 40 bytes in 1 blocks are definitely lost in loss record 2 of 9 ==24135== at 0xB823: malloc (vg_replace_malloc.c:266) ==24135== by 0x5768D: operator new(unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib) ==24135== by 0x576DA: operator new[](unsigned long) (in /usr/lib/libstdc++.6.0.9.dylib) ==24135== by 0x100000F09: main (in ./file)

Cualquier idea sobre esto sería muy apreciada. Estoy usando la versión 4.2.1 de gcc en OS X 10.7.3


Comentario final: de hecho, fue una ''característica'' específica de OS X relacionada con la forma en que OS X vincula la información de depuración. Valgrind ayuda al usuario a evitar el problema con el comando --dsymutil=yes .

Puedes leer más sobre esto aquí: http://valgrind.org/docs/manual/manual-core.html#manual-core.erropts

Gracias a Dave Goodell, que me envió la solución en el foro de usuarios de valgrind.


Solo por marcar esta pregunta como "contestada" (para que no sea innecesariamente abierta y leída por otros).

=> La respuesta se encuentra como el comentario de "user1288111" a la pregunta inicial.