GDB は、特に Linux 開発者の間で人気のあるデバッガーです。ザイリンクスでは、システム デバッガーを使用することをお勧めしますが、GDB はベアメタル エンベデッド フローでもサポートされます。ただし、システム デバッガーとは異なり、GDB のサポートは単一のアプリケーション デバッグに限定されます。
エンベデッド ターゲットの GDB には gdbserver が必要です。GDB はフロントエンドを担当し、デバッグ、ブレークポイントの設定、プログラムの停止/再開などのプログラムを指定できます。各ユーザー コマンドは gdbserver に送信され、ターゲットを設定してコマンドを実行します。たとえば、GDB にライン ブレークポイントを追加すると、GDB は ELF 内のデバッグ情報を読み取り、そのラインに対応するアドレスをデコードします。GDB は次に 'plant breakpoint at address' コマンドを gdbserver に発行し、gdbserver はターゲット プロセッサのレジスタに書き込んで、ブレークポイントを配置します。同様のロジックは、ユーザーが発行したすべてのデバッグ コマンドに適用されます。
ザイリンクス エンベデッド フローの場合、hw_server が異なるポート上の各プロセッサ アーキテクチャにごとに gdbserver を起動します。次は、サポートされるアーキテクチャおよびデフォルトの gdbserver をリストしています。
アーキテクチャ | gdbserver ポート |
---|---|
Arm® | 3000 |
AARCH64 | 3001 |
MicroBlaze | 3002 |
MicroBlaze64 | 3003 |
hw_server の起動中に -p<port> を指定すると、ベース ポートを変更できます。たとえば、hw_server -p2345 と指定すると 2345 で Arm の gdbserver を開始し、2346 では AARCH64、2347 では MB、2348 では MB64 の gdbserver を起動します。