dbx は、次のタイプの共有ライブラリと連動します。
プログラムの実行開始時点で暗黙的にロードされたライブラリ。
dlopen(2)() を使用して明示的 (動的) にロードされたライブラリ。これらのライブラリにある名前は実行中にライブラリがロードされたあとにわかるため、debug または attach コマンドを使用してデバッグセッションの開始したあとに、それらにブレークポイントを配置することはできません。
dlopen(2)() を使用して明示的にロードされたフィルタライブラリ。これらのライブラリにある名前は、ライブラリがロードされて、その中の最初の関数が呼び出されたあとにのみわかります。
明示的 (動的) にロードされたライブラリにブレークポイントを設定するには、次の 2 つの方法があります。
たとえば、mylibrary.so という名前で関数 myfunc()() を含むライブラリがある場合、ライブラリの記号テーブルを dbx へあらかじめロードし、その後、次のようにブレークポイントを関数に設定します。
(dbx) loadobject -load fullpathto/mylibrary.so (dbx) stop in myfunc |
別のより簡単な方法は、プログラムを dbx の下で完了まで実行することです。dbx は、dlopen(2)() を使用してロードされたすべての共有ライブラリの記録を、それらが dlclose()() を使用して閉じられた場合でも保持します。そのため、プログラムを 1 度実行したあと、ブレークポイントを正常に設定できるようになります。
(dbx) run execution completed, exit code is 0 (dbx) loadobject -list u myprogram (primary) u /lib/libc.so.1 u p /platform/sun4u-us3/lib/libc_psr.so.1 u fullpathto/mylibrary.so (dbx) stop in myfunc |