2016-07-06 8 views
1

私はdlopendlcloseを使ってライブラリをロード/アンロードするプロセスを持っています。ライブラリにはValgrindでトレースしたいメモリリークがいくつかあります。私は以下を試した:Valgrindで動的に読み込まれたライブラリをトレースする方法は?

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

これは動作しません。ライブラリはメインプログラムのいくつかのシンボルに依存するため、未定義のシンボルエラーが発生します。プログラムの終わりに図書館をロードしたままにする方法はありますか?

+0

どのようなOSをお使いですか?あなたが*プリロードしていない場合、あなたは何を観察しますか? –

答えて

0

テストプログラムでdlclose()をスキップするだけで、共有オブジェクトのコードセグメントがプロセスのメモリマッピングテーブルに保持されます。 valgrindがこの共有オブジェクトに起因するリークを検出すると、プロセスのメモリマッピングテーブルからシンボル名を見つけることができます。

dlclose()を呼び出すと、dlライブラリはプロセスのメモリ空間から共有オブジェクトをアンロードし、valgrindはそのアドレスを意味のあるシンボル名に解決できません。

さらに、デバッグ情報を使用してライブラリをロードするには、LD_PRELOAD =を使用します。

関連する問題