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

修正継続機能の使用

fix と cont の各機能を使用すると、ソースファイルを修正して再コンパイルし、プログラム全体を作成し直すことなく実行を続けることができます。.o ファイルを更新して、それらをデバッグ中のプログラムに組み込むことにより、再リンクの必要がなくなります。

この機能を使用する利点は次のとおりです。

fix と cont の働き

fix コマンドを使用するには、エディタウィンドウでソースを編集する必要があります。(コードの変更方法については、「fix と cont によるソースの変更」を参照)。変更結果を保存して fix と入力します。fix コマンドについては、fix コマンド」を参照してください。

fix が実行されると、dbx は適切なコンパイラオプションでコンパイラを呼び出します。変更後のファイルがコンパイルされ、一時共有オブジェクト (.so) ファイルが作成されます。古いファイルと新しいファイルとを比較することによって、修正の安全性を検査する意味上のテストが行われます。

実行時リンカーを使用して新しいオブジェクトファイルが動作中のプロセスにリンクされ、プログラムカウンタが古い関数から新しい関数の同じ行に移動します (その関数が修正中のスタックの一番上にある場合)。さらに、古いファイルのブレークポイントがすべて新しいファイルに移動します。

対象となるファイルがデバッグ情報付きでコンパイルされているかどうかにかかわらず、fix コマンドと cont コマンドを実行できます。ただし、デバッグ情報なしでコンパイルされているファイルの場合には多少の機能制限があります。fix コマンド」-g オプションの解説を参照してください。

共有オブジェクト (.so) ファイルの修正は可能ですが、その場合、そのファイルを特別なモードでオープンする必要があります。dlopen 関数の呼び出しで、RTLD_NOW|RTLD_GLOBALまたは RTLD_LAZY|RTLD_GLOBAL のどちらかを使用します。

Oracle Solaris Studio C および C++ コンパイラのプリコンパイル済みヘッダー機能では、再コンパイル時にコンパイラオプションが同じである必要があります。fix コマンドによって、コンパイラオプションがわずかに変更されるため、プリコンパイル済みヘッダーを使用して作成されたオブジェクトファイルでは fix コマンドを使用しないでください。

fix と cont によるソースの変更

fix と cont を使用すると、ソースを次の方法で変更できます。

古いファイルから新しいファイルに関数をマップすると問題が起きることがあります。ソースファイルの編集時にこのような問題の発生を防ぐには、次のことを守ってください。

前述の変更を行う場合は、fix と cont で処理するよりプログラム全体を作り直す方が簡単です。