[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

10. シンボル・テーブルの検査

ここで説明するコマンドによって、 ユーザ・プログラムの中で定義されているシンボル情報 (変数名、 関数名、 型名) に関する問い合わせを行うことができます。 この情報はユーザ・プログラムのテキストに固有のもので、 プログラムの実行時に変わるものではありません。 GDBはこの情報を、 ユーザ・プログラムのシンボル・テーブルの中、 または、 GDB起動時に指定されたファイル (see section Choosing files) の中で見つけるか、 ファイル管理コマンド (see section Commands to specify files) の実行によって見つけます。

ときには、 参照する必要のあるシンボルの中に、 GDBが通常は単語の区切り文字として扱う文字が含まれていることがあるかもしれません。 特に多いのが、 他のソース・ファイルの中の静的変数を参照する場合です (see section Program variables)。 ファイル名は、 オブジェクト・ファイルの中にデバッグ・シンボルとして記録されていますが、 GDBは通常、 典型的なファイル名、 例えば`foo.c'を解析して、 3つの単語 `foo'、 `.'(ピリオド)、 `c'であるとみなします。 GDBが`foo.c'を単一のシンボルであると認識できるようにするには、 それを単一引用符で囲みます。 例えば、

 
p 'foo.c'::x

は、 xの値をファイル`foo.c'のスコープの中で検索します。

info address symbol

symbolで指定されるシンボルのデータがどこに格納されているかを示します。 レジスタ変数の場合は、 それがどのレジスタに入っているかを示します。 レジスタ変数ではないローカル変数の場合は、 その変数が常に格納されている位置の、 スタック・フレーム内におけるオフセット値を表示します。

`print &symbol'との相違に注意してください。 `print &symbol'はレジスタ変数に対しては機能しませんし、 スタック内のローカル変数に対して実行すると、 その変数のカレントなインスタンスの存在するアドレスそのものが表示されます。

whatis exp

expのデータ型を表示します。 expは実際には評価されず、 exp内の副作用を持つ操作 (例えば、代入や関数呼び出し) は実行されません。 See section Expressions

whatis

値ヒストリの最後の値である $のデータ型を表示します。

ptype typename

データ型typenameの説明を表示します。 typenameは型の名前です。 Cで記述されたコードの場合は、 `class class-name'、 `struct struct-tag'、 `union union-tag'、 `enum enum-tag'という形式を取ることができます。

ptype exp
ptype

expの型に関する説明を表示します。 単に型の名前を表示するだけではなく、 詳細な説明も表示するという点で、 ptypewhatisと異なります。

例えば、 変数宣言

 
struct complex {double real; double imag;} v;

に対して、 whatisptypeはそれぞれ以下のような出力をもたらします。

 
(gdb) whatis v
type = struct complex
(gdb) ptype v
type = struct complex {
    double real;
    double imag;
}

whatisと同様、 引数なしでptypeを使用すると、 値ヒストリの最後の値である$の型を参照することになります。

info types regexp
info types

その名前がregexpで指定される正規表現にマッチするすべての型 (あるいは、 引数を指定しなければ、 ユーザ・プログラム中のすべての型) の簡単な説明を表示します。 個々の型の完全な名前は、 それ自体が1つの完全な行を構成するものとみなして、 マッチされます。 したがって、 `i type value'は、 ユーザ・プログラムの中で、 その名前が文字列valueを含むすべての型に関する情報を表示し、 `i type ^value$'は、 名前がvalueそのものである型に関する情報だけを表示します。

このコマンドはptypeとは2つの点で異なります。 まず第1にwhatisと同様、 詳細な情報を表示しません。 第2に、 型が定義されているすべてのソース・ファイルを一覧表示します。

info source

カレントなソース・ファイル、 すなわち、 カレントな実行箇所を含む関数のソース・ファイルの、 ファイル名とそれが記述された言語の名前を表示します。

info sources

ユーザ・プログラムのソース・ファイルのうち、 デバッグ情報の存在するものすべての名前を、 2つの一覧にして表示します。 2つの一覧とは、 シンボルが既に読み込まれたファイルの一覧と、 後に必要なときにシンボルが読み込まれるファイルの一覧です。

info functions

すべての定義済み関数の名前とデータ型を表示します。

info functions regexp

その名前がregexpで指定される正規表現にマッチする部分を持つすべての定義済み関数の名前とデータ型を表示します。 したがって、 `info fun step'は、 その名前が文字列stepを含むすべての関数を見つけ、 `info fun ^step'は、 名前が文字列stepで始まるすべての関数を見つけます。

info variables

関数の外部で宣言されているすべての変数 (つまり、 ローカル変数を除く変数) の名前とデータ型を表示します。

info variables regexp

その名前が正規表現regexpにマッチする部分を持つすべての (ローカル変数を除く) 変数の名前とデータ型を表示します。

いくつかのシステムにおいては、 ユーザ・プログラムの停止・再起動を伴うことなく、 そのユーザ・プログラムを構成する個々のオブジェクト・ファイルを更新することができます。 例えば、 VxWorksでは、 欠陥のあるオブジェクト・ファイルを再コンパイルして、 実行を継続することができます。 このようなマシン上でプログラムを実行しているのであれば、 自動的に再リンクされたモジュールのシンボルをGDBに再ロードさせることができます。

set symbol-reloading on

ある特定の名前を持つオブジェクト・ファイルが再検出されたときに、 対応するソース・ファイルのシンボル定義を入れ替えます。

set symbol-reloading off

同じ名前を持つオブジェクト・ファイルを再検出したときに、 シンボル定義を入れ替えません。 これがデフォルトの状態です。 モジュールの自動再リンクを許しているシステム上でプログラムを実行しているのでない場合は、 symbol-reloadingの設定はoffのままにするべきです。 さもないと、 (異なるディレクトリやライブラリの中にある) 同じ名前を持ついくつかのモジュールを含むような大きなプログラムをリンクする際に、 GDB はシンボルを破棄してしまうかもしれません。

show symbol-reloading

symbol-reloadingのカレントな設定 (onまたはoff) を表示します。

maint print symbols filename
maint print psymbols filename
maint print msymbols filename

デバッグ・シンボル・データのダンプをファイルfilenameの中に書き込みます。 これらのコマンドは、 GDBのシンボル読み込みコードをデバッグするのに使われています。 デバッグ・データを持つシンボルだけがダンプに含まれます。 `maint print symbols'を使用すると、 GDBは、 完全な詳細情報を入手済みのすべてのシンボルの情報をダンプに含めます。 つまり、 ファイルfilenameには、 GDBがそのシンボルを読み込み済みのファイルに対応するシンボルが反映されます。 info sourcesコマンドを使用することで、 これらのファイルがどれであるかを知ることができます。 代わりに`maint print psymbols'を使用すると、 GDB が部分的にしか知らないシンボルに関する情報もダンプの中に含まれます。 これは、 GDBがざっと読みはしたものの、 まだ完全には読み込んでいないファイルに定義されているシンボルに関する情報です。 最後に`maint print msymbols'では、 GDBが何らかのシンボル情報を読み込んだオブジェクト・ファイルから、 最小限必要とされるシンボル情報がダンプされます。 GDBがどのようにしてシンボルを読み込むかについては、 Commands to specify files (のsymbol-fileの説明の部分) を参照してください。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.