大規模な C アプリケーションで、次のようにメモリ アドレスにハードウェア ウォッチポイントを設定しました。
(gdb) watch *0x12F5D58
Hardware watchpoint 3: *0x12F5D58
ご覧のとおり、これはソフトウェアではなくハードウェアのウォッチポイントであり、速度の遅さを説明しています。
現在、デバッガーでのアプリケーションの実行時間は、10 秒未満から 1 時間に変わりました。ウォッチポイントはこれまでに 3 回トリガーされました。1 回目は、アドレスを含むメモリ ページが によって読み取り可能になった 15 分後sbrk
です。この 15 分間はメモリ ページにアクセスできなかったので、ウォッチポイントは効率的だったはずです。そして、それはまだ説明していません。なぜ後で遅いのですか。
プラットフォームは x86_64 で、GDB のバージョンは Ubuntu 9.10 パッケージです。
$ gdb --version
GNU gdb (GDB) 7.0-ubuntu
[...]
ソースからビルドされたストック GDB 7.1:
$ gdb-7.1 --version
GNU gdb (GDB) 7.1
何が原因であるか、またはそれを修正/回避する方法についてのアイデアを事前に感謝します.
編集:キャストを削除
編集:gdb 7.1