dlopen()で読み込んだ共有ライブラリ内の関数にブレークポイントを設定する方法.
gdb では,dlopen()してdlsym()した関数には通常の方法でブレークポイントが設定できない.これは,共有ライブラリ中のシンボル情報が自動で読み込まれないため.
手動でシンボル情報を読み込ませる方法としては,たとえば以下の方法がある.
http://lists.gnu.org/archive/html/bug-gdb/2001-05/msg00061.html
具体的には,まず
(gdb) info shared 0x3000104a080 0x30002820c00 No /usr/lib/mylib.so
でシンボルが読み込まれた領域(text)の先頭アドレス(0x300104a080)をしらべる.
次に,add-symbol-file コマンドでシンボル情報を持つ共有ライブラリ(mylib.so)を読み込ませる.この時,先ほど調べたアドレスを指定する.
(gdb) add-symbol-file /usr/lib/mylib.so 0x3000104a080 add symbol table from file "/usr/lib/mylib.so" at .text_addr = 0x3000104a080 (y or n) y Reading symbols from /usr/lib/mylib.so...done.
面倒だが,以上でシンボル情報が読み込まれるので普通にブレークポイントが設定できるようになる.