2011-10-24 16 views
2

x86では、GDBは特別なハードウェアリソース(デバッグレジスタ?)を使用してウォッチポイントを設定します。状況によっては、そのリソースが十分にない場合、GDBはウォッチポイントを設定しますが、動作しません。 Linux上でこのリソースの可用性をプログラムで監視する方法はありますか?たぶん、procfsなどの情報があるかもしれません。私はデバッグのためにプール内のマシンを選択するためにこの情報が必要です。 GDBの内部からgdbでウォッチポイントを設定するために必要なリソースを監視する方法は?

「彼らはハードウェアリソースに依存するため、ハードウェアブレークポイントの数が制限される場合があり、ユーザーはより多くのを要求する場合、GDBは、ソフトウェアブレークポイントを設定しようとして開始します(いくつかのアーキテクチャでは、特に。 32ビットx86プラットフォームでは、gdbはすべてのハードウェアブレークポイントとウォッチポイントを挿入するのに十分なハードウェアリソースがあるかどうかを常に知ることはできません。 (いくつかのアーキテクチャでは、デバッグされたプログラムが再開されるまで、この状況を検出することは不可能です)。x86デバッグ・レジスタは、hハードウェアブレークポイントをあまりに多く設定すると、ウォッチポイントの挿入が失敗する可能性があります。

"32ビットIntel x86プロセッサには、デバッグを容易にする特別なデバッグレジスタがあります.gdbは、x86ベースのポートがウォッチポイントとハードウェア支援ブレークポイントのサポートを実装するために使用できる汎用ライブラリを提供します。

答えて

1

この情報は、デバッグ用にマシンを選択する際に必要です。

いいえ、ありません。 x86デバッグレジスタ(4つあります)は、プロセス単位のリソースであり、マシン単位のリソースではありません[1]。デバッグしているすべてのプロセスに対して最大4つのハードウェアウォッチポイントを設定できます。他の誰かが同じマシンでデバッグしている場合は、お互いに干渉することはありません。

[1]より正確には、レジスタは、カーネルによって多重化されます。 EAXレジスタ。システム上のすべてのプロセスとカーネル自体はEAXを使用していますが、(シングルコア)CPUにはEAXというレジスタが1つしかありませんが、すべてタイムスライスの魔法によってうまく動作します。

関連する問題