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

印刷ビューの終了

更新: 2015 年 1 月
 
 

明示的に読み込まれたライブラリにブレークポイントを設定する

dbxdlopen() または dlclose() の発生を自動的に検出し、読み込まれたオブジェクトの記号テーブルを読み込みます。dlopen() で共有オブジェクトを読み込むと、そのオブジェクトにブレークポイントを設定できます。またプログラムのその他の任意の場所で行う場合と同様にデバッグも可能です。

共有オブジェクトが dlclose() を使用してアンロードされた場合、dbx はそれに配置されていたブレークポイントを記憶しているので、たとえアプリケーションが再実行されても、dlopen() によって共有オブジェクトが再びロードされた場合に、それらを再配置します。

ただし、dlopen() で共有オブジェクトが読み込まれるのを待たなくても共有オブジェクトにブレークポイントを設定したり、その関数やソースコードを検索することはできます。デバッグするプログラムが dlopen() で読み込む共有オブジェクトの名前がわかっていれば、loadobject -load コマンドを使用してその記号テーブルをあらかじめ dbx に読み込んでおくことができます。

loadobject -load /usr/java1.1/lib/libjava_g.so

これで、dlopen() で読み込む前でも、この読み込みオブジェクト内でモジュールと関数を検索してその中にブレークポイントを設定できます。読み込みオブジェクトの読み込みが済んだら、dbx はブレークポイントを自動的に設定します。

    動的にリンクしたライブラリにブレークポイントを設定する場合、次の制約があります。

  • dlopen() によってロードされたフィルタライブラリには、その中の最初の関数が呼び出されるまでブレークポイントを設定できません。

  • dlopen() でライブラリを読み込むと、初期化ルーチン _init() が呼び出されます。このルーチンがライブラリ内のほかのルーチンを呼び出すこともあります。この初期化が終了するまで、dbx は読み込んだライブラリにブレークポイントを設定できません。そのため、dlopen() によってロードされたライブラリ内の _init()dbx を停止させることはできません。