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

ブレークポイントへの到達

到達する予定のブレークポイントに到達しない場合は、次の可能性があります。

この場合、while に設定したブレークポイントは、外部 if でのみブレークポイントになります。これは、dbx が、複数の異なるアドレスにマップするソース行を処理できないためです。

C++ メンバーと whatis コマンド

C++ メンバーの型は、whatis の出力で失われる場合があります。次の例では、メンバー stackcount の型が失われます。


(dbx) whatis stack
class stack {
...
static stackcount;       /* 未定義あるいは未割り当て */
...
};

クラスメンバーが定義されていないか、あるいは割り当てられていない場合、dbx はその型を判別できないため、型は印刷されません。

実行時検査の 8 Mバイト制限

アクセス検査だけにこの制限があります。リーク検査はこの制限による影響を受けません。

アクセス検査の場合、RTC は各ロード命令とストア命令を、パッチ領域に分岐する分岐命令によって置き換えます。この分岐命令は 8Mバイトの範囲を持っています。デバッグされたプログラムが、置換されたロード命令またはストア命令の 8Mバイト内のアドレススペースをすべて使用してしまった場合、パッチ領域を入れる余地はありません。RTC が、メモリーへのロード命令とストア命令の一部を横取りできない場合、正確な情報を提供できないため、アクセス検査は完全に無効になります。

dbx は、この制限に遭遇するといくつかの方針を内部的に適用し、問題を解決できる場合は実行を続けます。場合によっては dbx を続けることができません。この場合は、エラーメッセージが出されて、アクセス検査はオフになります。対策については、第 9 章「実行時検査」を参照してください。