dbx コマンドによるデバッグ

デバッグ実行の保存と復元

dbx には、デバッグ実行の全部または一部を保存して、それを後で再現するためのコマンドが 3 つあります。

save

save コマンドは、直前に実行された runrerun、または debug コマンドから save コマンドまでに発行されたデバッグコマンドをすべてファイルに保存します。このデバッグセッションのセグメントは、デバッグ実行と呼ばれます。

save コマンドは、発行されたデバッグコマンドのリスト以外のものも保存します。実行開始時のプログラムの状態に関するデバッグ情報、つまり、ブレークポイント、表示リストなども保存されます。保存された実行を復元するとき、dbx は、保存ファイル内にあるこれらの情報を使用します。

デバッグ実行の一部、つまり、入力されたコマンドのうち指定する数だけ最後から除いたものを保存することもできます。次の例 A は、すべて保存された実行を示しています。例 B は、保存された同じ実行から、最後の 2 ステップを除いたものを示しています。

Graphic

保存する実行の終了位置がわからない場合は、history コマンドを使用して、セッション開始以降に発行されたデバッグコマンドのリストを確認してください。

save コマンドまでのデバッグ実行すべてを保存するには、次のように入力します。


(dbx) save

デバッグ実行の一部を保存するには、次のように入力します。


(dbx) save -number

number は、save コマンドの直前の、保存したくないコマンドの数を示します。

一連のデバッグ実行をチェックポイントとして保存する

ファイル名を指定しないでデバッグ実行を保存すると、情報は特殊な保存ファイルに書き込まれます。保存のたびに、dbx はこの保存ファイルを上書きします。しかし、ファイル名引数を save コマンドに指定すると、あるデバッグ実行をこのファイル名に保存後別のデバッグ実行を保存しても、前の内容を復元することができます。

一連の実行を保存すると、1 組のチェックポイントが与えられます。各チェックポイントは、セッションのさらに後から始まります。保存されたこれらの実行は任意に復元して続行し、さらに、以前の実行で保存されたプログラム位置と状態に dbx をリセットすることができます。

デバッグ実行を、デフォルトの保存ファイル以外のファイルに保存するには、次のように入力します。


(dbx) save filename

保存された実行の復元

実行を保存したら、restore コマンドを使用して実行を復元できます。dbx は、保存ファイル内の情報を使用します。実行を復元すると、dbx は、まず内部状態をその実行の開始時の状態にリセットしてから、保存された実行内の各デバッグコマンドを再発行します。


注 -

source コマンドは、ファイル内に保存された一連のコマンドを再発行しますが、dbx の状態をリセットはしません。これは、現在のプログラム位置からコマンドの一覧を再発行するだけです。


保存された実行の正確な復元に必要な条件

保存されたデバッグ実行を正確に復元するには、run タイプコマンドへの引数、手動入力、およびファイル入力などの、実行での入力すべてが正確に同じでなければなりません。


注 -

セグメントを保存してから、restore を実行する前に runrerun、または debug コマンドを発行すると、restore は 2 番目の引数を使用して、runrerun、または debug コマンドを後で保存します。これらの引数が異なる場合、正確な復元が得られない可能性があります。


保存されたデバッグ実行を復元するには、次のように入力します。


 

(dbx) restore

デフォルトの保存ファイル以外のファイルに保存されたデバッグ実行を復元するには、次のように入力します。


(dbx) restore filename

replay を使用した保存と復元

replay コマンドは組合せのコマンドで、save -1 に続けて restore を発行するのと同じです。replay コマンドは負の number_of_commands 引数をとります。これは、コマンドの save 部分に渡されるものです。デフォルトにより、-number の値は -1 になるため、replay は取り消しコマンドとして働き、直前に発行されたコマンドにいたるまで (ただしこのコマンドは除く) の前回の実行を復元します。

現在のデバッグ実行から、最後に発行されたデバッグコマンドを除くものを再現するには、次のように入力します。


(dbx) replay

現在のデバッグ実行を再現して、最後から 2 番目のコマンド以前で実行を停止するには、dbx replay コマンドを使用します。ここで、number は、最後のデバッグコマンドから数えていくつ目のコマンドで停止するかその数を示します。


(dbx) replay -number