/ / ¿Cómo rastrear bibliotecas cargadas dinámicamente con Valgrind? - bibliotecas compartidas, valgrind

¿Cómo rastrear bibliotecas cargadas dinámicamente con Valgrind? - bibliotecas compartidas, valgrind

Tengo un proceso que usa dlopen y dlclose cargar / descargar una biblioteca La biblioteca tiene algunas pérdidas de memoria que quiero rastrear con Valgrind. Intenté lo siguiente:

LD_PRELOAD=libmylibrary.so valgrind --leak-check=full myprogram

No funciona. Me sale un error de símbolo indefinido porque la biblioteca depende de algunos símbolos del programa principal. ¿Hay alguna otra manera de hacer que la biblioteca permanezca cargada al final del programa?

Respuestas

0 para la respuesta № 1

Simplemente omita el dlclose () en su programa de pruebapara que el segmento de código del objeto compartido se mantenga en la tabla de asignación de memoria de su proceso. Luego, cuando valgrind "s encuentre cualquier fuga causada por este objeto compartido, podría encontrar los nombres de los símbolos de la tabla de mapeo de memoria del proceso.

Si llama a dlclose (), la biblioteca dl puede descargar el objeto compartido del espacio de memoria del proceso, entonces valgrind no resolverá la dirección con un nombre de símbolo significativo.

Además, use LD_PRELOAD = para cargar la biblioteca con información de depuración.