Previous: Files, Up: GDB Files


12.2 シンボル・ファイル読み込み時のエラー

シンボル・ファイルの読み込み中に、 GDBはときどき問題にぶつかることがあります。 例えば、 認識できないシンボル・タイプを見つけたり、 コンパイラの出力に既知の問題を発見することがあります。 デフォルトでは、 このようなエラーがあったことを、 GDBはユーザに知らせません。 なぜなら、 このようなエラーは比較的よく見られるものであり、 コンパイラのデバッグをしているような人々だけが関心を持つようなものだからです。 もし、 正しく構築されていないシンボル・テーブルに関する情報を見ることに関心があれば、 set complaintsコマンドを使用することで、 何回問題が発生しようと個々のタイプの問題について1回だけメッセージを出力するよう指示することができますし、 また、 何回問題発生したかを見るためにより多くのメッセージを表示するよう指示することもできます (see Optional warnings and messages)。

現在のバージョンで表示されるメッセージとその意味を以下に記します。

inner block not inside outer block in symbol
シンボル情報は、 シンボルのスコープの先頭と末尾の位置を示します (例えば、 ある関数の先頭、 あるいは、 ブロックの先頭など)。 このエラーは、 内側のスコープのブロックが、 外側のスコープのブロックに完全に包含されていないことを意味しています。

GDBは、 内側のブロックが外側のブロックと同一のスコープを持つものとして扱うことで、 この問題を回避します。 外側のブロックが関数でない場合には、エラー・メッセージの symbolの部分が‘(don't know)’のように表示されることがあります。

block at address out of order
シンボルのスコープとなるブロックに関する情報は、 アドレスの低い方から昇順に並んでいなければなりません。 このエラーは、 そうなっていないということを示しています。

GDBはこの問題を回避することはせず、 読み込もうとしているソース・ファイルのシンボルを見つけるのに支障が出ます (set verbose onを指定することで、 どのソース・ファイルが関係しているかを知ることができます。 See Optional warnings and messages)。

bad block start address patched
シンボルのスコープとなるブロックに関する情報の中の開始アドレスが、 1つ前のソース行のアドレスより小さい値です。 これは、 SunOS 4.1.1 (および、 それ以前のバージョン) のCコンパイラで発生することが分かっています。

GDBは、 シンボルのスコープとなるブロックが1つ前のソース行から始まるものとして扱うことによって、 この問題を回避します。

bad string table offset in symbol n
シンボル番号nのシンボルが持っている文字列テーブルへのポインタが、 文字列テーブルのサイズを超える値です。

GDBは、 このシンボルがfooという名前を持つものとみなすことによって、 この問題を回避します。 この結果、 多くのシンボルがfooという名前を持つことになってしまうと、 他の問題が発生する可能性があります。

unknown symbol type 0xnn
シンボル情報の中に、 どのようにして読み取ればよいのかGDBには分からないような、 新しいデータ型が含まれています。 0xnnは理解できなかったシンボルの型を16進数で表わしたものです。

GDBは、 このようなシンボル情報を無視することによって、 このエラーを回避します。 通常、 プログラムのデバッグを行うことは可能になりますが、 ある特定のシンボルにアクセスすることができなくなります。 このような問題にぶつかり、 それをデバッグしたいのであれば、 gdb自身を使ってgdbをデバッグすることができます。 この場合、 シンボルcomplainにブレイクポイントを設定し、 関数read_dbx_symtabまで実行してから、 *bufpによってシンボルを参照します。

stub type has NULL name
GDBは、 ある構造体 またはクラス に関する完全な定義を見つけることができませんでした。
const/volatile indicator missing (ok if using g++ v1.x), got...
あるC++のメンバ関数に関するシンボル情報に、 より新しいコンパイラを使用した場合には生成されるいくつかの情報が欠けています。
info mismatch between compiler and debugger
GDBは、 コンパイラが生成した型の指定を解析できませんでした。