`x' というコマンド (`examine' からの由来) は、プログラムのデータ 型を参照せずにメモリを調べるときに使うことができます。あなたが調べたい メモリのフォーマットは、系統だった方法で記述されます。許可されている フォーマットは、以前の章で述べてきたフォーマットのスーパーセットに なっています。
`x' はスラッシュの後にフォーマットに関する記述、そしてその後に アドレスに関する記述を受け付けます。式には (もし通したとしても) ポインタ 値が使えないので; そこにはメモリのバイト列の整数値やアドレスが使われます。 式の詳細は、See section 式。 例えば、`x/4xw $sp' はスタックポインタ上のメモリを4ワードの 16進数で表示します。
このケースにおける出力フォーマットでは、調査するメモリの大きさと、 そのユニットの内容をどのように表示するのかということを記述します。 これには、この後に説明する1つか2つの文字で指定します:
次に示す文字は、まさに調査対象のユニットのサイズを記述します:
次の文字は内容を表示する方法を記述するためのものです:
表示方法やユニットサイズの指定がなかった場合、使用されるデフォルト値は 最後に使用されたのと同じものです。もし、あなたがスラッシュの後に何の 文字も使用したくないという場合は、スラッシュもまた省略できます。
あなたは、また、調査対象アドレスも省略可能です。この場合、ユニットが 最後に調査されたアドレスが使用されます。これは、データをベースとして ユニットサイズが計算されるような、文字列とインストラクション・ フォーマットのためのものです: というのも、次の文字列やインストラクションは正しい位置から調査を 開始しなければならないからです。`print' コマンドは、時折 `x' コマンドのためのデフォルトアドレスを設定します; メモリ上に位置する値が表示された時、デフォルトで同一の 位置が設定されています。`info line' はまた `x' と同様に 指定された行のマシンコードの開始アドレスにデフォルトを設定し、 `info breakpoints' は、最後に表示されたブレークポイントの アドレスにデフォルトを設定します。
RET により `x' コマンドがリピートされた時は全く同様の内容を リピートしません: 指定されたアドレスは (もしあれば) 無視され、リピートされたコマンドは 同一の場所のかわりに連続したメモリ位置を調査します。
あなたは、更に、コマンドに対してスラッシュの後に (また、もしあれば フォーマット文字の前に) 繰り返し回数を書くことで、いくつかの連続的な メモリユニットを調査することができます。繰り返し回数は10進数の整数で なければなりません。これは、`x' コマンドがリピートされた時と 同様な効果を持ち、出力は行ごとのいくつかのユニットに対して、より コンパクトになります。例えば、
x/10i $pc
は、選択されているフレームにおいて次に実行されるインストラクションから 10個のインストラクションを表示します。この後、あなたは、次のように入力 することで、更に10個のインストラクションを表示できます。
x/10
これは、フォーマットとアドレスにおいてデフォルト値が使われるからです。
`x' コマンドによって表示されるアドレスとその内容は、それらが
あまりにも多すぎ、それらを記録するのが邪魔なので、変数履歴に代入
されません。そのかわりに、GDB は、簡易変数 $_
と $__
の
値を式で使うという別な手段を提供しています。
`x' コマンドの後、最後に調査されたアドレスは、
式内の簡易変数 $_
によって参照可能となります。そのアドレスの
内容は、調査されたならば、簡易変数 $__
においても有効です。
もし、`x' コマンドが繰り返されたならば、アドレスと内容は最後に 表示されたメモリユニットの形態として保存されます; これは、最後の行の出力においていくつかのユニットが表示された時の 最後のアドレス表示の内容とは異なります。
`disassemble' という特別なコマンドは、与えられたメモリレンジを マシン・インストラクションとしてダンプします。デフォルトのメモリ レンジは、選択されているフレーム上のプログラムカウンタを取り囲む 関数の範囲です。このコマンドへ一つの引数を渡した場合、これは、 プログラムカウンタ値となります; この値を取り囲む関数がダンプされます。2つの引数を渡した場合は、 ダンプするアドレスの範囲を示します。(最初が包括的、2つ目が排他的。)