変更後にソースファイルを再リンクするとき fix コマンドを使用すればプログラム全体を再コンパイルしなくて済みます。引き続きプログラムの実行を続けることができます。
変更をソースファイルに保存します。
dbx プロンプトで fix と入力します。
修正は無制限に行うことができますが、1 つの行でいくつかの修正を行なった場合は、プログラムを作成し直すことを考えてください。fix コマンドは、メモリー内のプログラムのイメージを変更しますが、ディスク上のイメージは変更しません。また修正を行うと、メモリーのイメージは、ディスク上のイメージと同期しなくなります。
fix コマンド は、実行可能ファイル内での変更ではなく、.o ファイルとメモリーイメージの変更だけを行います。プログラムのデバッグを終了したら、プログラムを作成し直して、変更内容を実行可能ファイルにマージする必要があります。デバッグを終了すると、プログラムを作成し直すように指示するメッセージが出されます。
-a 以外のオプションを指定し、ファイル名引数なしで fix コマンドを実行すると、現在変更を行なったソースファイルだけが修正されます。
fix を実行すると、コンパイル時にカレントであったファイルの現在の作業ディレクトリが検索されてからコンパイル行が実行されます。したがってコンパイル時とデバッグ時とでファイルシステム構造が変化すると正しいディレクトリが見つからなくなることがあります。 これを防ぐには、pathmap コマンドを使用します。これは 1 つのパス名から別のパス名までのマッピングを作成するコマンドです。マッピングはソースパスとオブジェクトファイルパスに適用されます。
プログラムの実行を継続するには、cont コマンドを使用します (「cont コマンド」を参照)。
プログラムの実行を再開するには、変更による影響を判断するための次の条件に注意してください。
すでに実行された関数に変更を加えた場合、その変更内容は次のことが起こるまで無効です。
プログラムが再び実行される
その関数が次に呼び出される
変数への単純な変更以上のことを修正した場合は、fix コマンドに続けて run コマンドを使用してください。run コマンドを使用すると、プログラムの再リンクが行われないため処理が速くなります。
呼び出されていない関数に変更を加えた場合、変更内容は、その関数が呼び出されたときに有効になります。
現在実行中の関数に変更を加えた場合、fix コマンドの影響は、変更内容が停止した関数のどの場所に関連しているかによって異なります。
実行済みのコードを変更しても、そのコードは再実行されません。コードを実行するには、現在の関数をスタックからポップし (「pop コマンド」を参照)、変更した関数を呼び出した位置から処理を続けます。取り消すことのできない副作用 (ファイルのオープンなど) が発生しないか、コードの内容をよく理解しておく必要があります。
変更内容がまだ実行されていないコードにある場合は、新しいコードが実行されます。
停止された関数ではなく、現在スタック上にある関数に変更を加えた場合、変更されたコードは、その関数の現在の呼び出しでは使用されません。停止した関数から戻ると、スタック上の古いバージョンの関数が実行されます。
この問題を解決する方法はいくつかあります。
変更したすべての関数がスタックから削除されるまで pop コマンドを実行する。コードを実行して問題が発生しないか確認する。
データ構造を手作業で修正してから (assign コマンドを使用)、実行を続ける。
run コマンドを使用してプログラムを再び実行する。
スタック上の修正された関数にブレークポイントがある場合、このブレークポイントは、新しいバージョンの関数に移動します。古いバージョンが実行される場合、プログラムはこれらの関数で停止しません。