Oracle® Solaris Studio 12.4: dbx コマンドによるデバッグ

印刷ビューの終了

更新: 2015 年 1 月
 
 

動的にロードされたライブラリにブレークポイントを設定する

    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() を使用して閉じられた場合でも記憶しています。そのため、プログラムの最初の実行後に、ブレークポイントを正しく設定できるようになります。

    (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