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

印刷ビューの終了

更新: 2015 年 1 月
 
 

修正後の継続

cont コマンドを使用して実行を継続できます。プログラムの実行を再開する前に、このセクションで説明されている、変更の効果を決定する次の条件に注意してください。

実行された関数への変更

すでに実行された関数内で変更を行なった場合、それらの変更は、プログラムを再度実行するか、またはその関数が次回呼び出されるまで効果がありません。

変数への単純な変更以上のことを修正した場合は、fix コマンドに続けて run コマンドを使用してください。run コマンドを使用すると、プログラムの再リンクが行われないため処理が速くなります。

呼び出されていない関数への変更

まだ呼び出されていない関数内で変更を行なった場合、それらの変更は、その関数が呼び出されたときに有効になります。

現在実行中の関数への変更

    現在実行中の関数に対して変更を行なった場合、fix コマンドの影響は、その変更が停止した関数のどの場所に関連しているかによって異なります。

  • 実行済みのコードを変更しても、そのコードは再実行されません。現在の関数をスタックからポップし、変更された関数が呼び出された位置から続行することによってそのコードを実行します。 その関数に元に戻せない副作用 (ファイルを開く操作など) が含まれているかどうかを判断できるほど十分にコードを理解している必要があります。

  • 変更内容がまだ実行されていないコードにある場合は、新しいコードが実行されます。

現在スタック上にある関数への変更

停止した関数にではなく、現在スタック上にある関数に対して変更を行なった場合、変更されたコードは、その関数の現在の呼び出しには使用されません。 停止した関数から戻ると、スタック上の古いバージョンの関数が実行されます。

    この問題は、いくつかの方法で解決できます。

  • pop コマンドを使用して、変更されたすべての関数がスタックから削除されるまでスタックをポップします。 コードを実行して問題が発生しないか確認する。

  • cont at コマンドを使用して、別の行から続行します。

  • 続行する前に、assign コマンドを使用してデータ構造を手動で修復します。

  • run コマンドを使用してプログラムを再び実行する。

スタック上の変更された関数内にブレークポイントがある場合、それらのブレークポイントは新しいバージョンの関数に移動されます。古いバージョンが実行される場合、プログラムはこれらの関数で停止しません。