fix と continue の各機能を使用すると、ソースファイルを修正して再コンパイルし、プログラム全体を作成しなおすことなく実行を続けることができます。.o ファイルを更新して、それらをデバッグ中のプログラムに組み込むことにより、再リンクの必要がなくなります。
この機能を使用する利点は次のとおりです。
プログラムをリンクしなおす必要がない。
プログラムを dbx に再読み込みする必要がない。
修正した位置からプログラムの実行を再開できる。
構築が進行中の場合は、fix を使用しないでください。
fix コマンドを適用する前に、エディタでソースを編集する必要があります。ソースファイルを変更した後、fix と入力します。
fix が実行されると、dbx は適切なコンパイラオプションでコンパイラを呼び出します。変更後のファイルがコンパイルされ、一時共有オブジェクト (.so) ファイルが作成されます。古いファイルと新しいファイルとを比較することによって、修正の安全性を検査する意味上のテストが行われます。
実行時リンカーを使用して新しいオブジェクトファイルが動作中のプロセスにリンクされ、プログラムカウンタが古い関数から新しい関数の同じ行に移動します (その関数が修正中のスタックの 1 番上にある場合)。さらに、古いファイルのブレークポイントがすべて新しいファイルに移動します。
対象となるファイルがデバッグ情報つきでコンパイルされているかどうかに関わらず、fix と continue を実行できます。ただし、デバッグ情報なしでコンパイルされているファイルの場合には多少の機能制限があります。詳細はコンパイラの -g オプションの説明を参照してください。
共有オブジェクト (.so) ファイルの修正は可能ですが、その場合、そのファイルを特別なモードでオープンする必要があります。dlopen の呼び出しで、RTLD_NOW|RTLD_GLOBAL または RTLD_LAZY|RTLD_GLOBAL のどちらかを使用します。
fix と continue を使用すると、ソースを次の方法で変更できます。
関数の各行を追加、削除、変更する。
関数を追加または削除する。
大域変数および静的変数を追加または削除する。
関数が古いファイルから新しいファイルにマップされているときに dbx で問題が起きることがあります。ソースファイルの編集時にそのような問題ができるだけ起きないように、次のことを守ってください。
関数の名前を変更しない。
関数に渡す引数の型を追加、削除、または変更しない。
スタック上で現在アクティブな関数の局所変数の型を追加、削除、または変更しない。
テンプレートの宣言やテンプレートインスタンスを変更しない。C++ テンプレート関数定義の本体でのみ修正可能です。
進行中に上記の変更のいずれかを行う必要がある場合は、プログラムを構築しなおしてください。