2016-07-06 7 views
1

Ich habe einen Prozess, der dlopen und dlclose verwendet, um eine Bibliothek zu laden/entladen. Die Bibliothek hat einige Speicherlecks, die ich mit Valgrind verfolgen möchte. Ich habe folgendes versucht:Wie können dynamisch geladene Bibliotheken mit Valgrind verfolgt werden?

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

Es funktioniert nicht. Ich bekomme einen undefinierten Symbolfehler, weil die Bibliothek von einigen Symbolen aus dem Hauptprogramm abhängt. Gibt es eine andere Möglichkeit, die Bibliothek am Ende des Programms geladen zu halten?

+0

Welches Betriebssystem verwenden Sie? Was beobachtest du, wenn du * nicht * vorlädst? –

Antwort

0

Überspringen Sie einfach die dclclose() in Ihrem Testprogramm, so dass das Codesegment des gemeinsamen Objekts in der Speicherzuordnungstabelle Ihres Prozesses verbleibt. Wenn Valgrinds durch dieses gemeinsame Objekt verursachte Lecks findet, kann es die Symbolnamen aus der Speicherzuordnungstabelle des Prozesses finden.

Wenn Sie dlclose() aufrufen, löscht die DLL-Bibliothek möglicherweise das freigegebene Objekt aus dem Speicherbereich des Prozesses, und das Valgrind kann die Adresse nicht in einen sinnvollen Symbolnamen auflösen.

Verwenden Sie außerdem LD_PRELOAD = zum Laden der Bibliothek mit Debugging-Informationen.

Verwandte Themen