デバッグ セッションを実行するには、次の手順に従います。
- 作成した新しいイメージでボード (または QEMU) をブートします。
- QEMU ブートでホスト ポートをリダイレクトするには、次の qemu-args を実行します。
petalinux-boot --qemu --kernel --qemu-args "-net nic -net nic -net nic -net nic,netdev=gem3 -netdev user,id=gem3,hostfwd=tcp::1534-:1534"
注記: gem 番号に基づいて、-net nic
オプションを指定します。gem 番号は、<plnx-proj-root>/components/plnx_workspace/device-tree/device-tree/pcw.dtsi ファイルにあります。 - ターゲット システム コンソールでユーザー アプリケーションに対して
gdbserver
を実行します (ポート 1534 をリッスンするように設定)。root@plnx_aarch64:~# gdbserver :1534 /usr/bin/myapp Process /bin/myapp created; pid = 73 Listening on port 1534
1534 は
gdbserver
ポートです。未使用ポートであればほかのポートでもかまいません。 - ワークステーションで、コンパイル済みユーザー アプリケーションのディレクトリに移動します。
cd <<TMPDIR>/work/cortexa72-cortexa53-xilinx-linux/myapp/1.0-r0/image/usr/bin/
- GDB クライアントを実行します。
petalinux-util --gdb myapp
GDB コンソールが開始します。
... GNU gdb (crosstool-NG 1.18.0) 7.6.0.20130721-cvs ... (gdb)
- GDB コンソールで次のコマンドを実行し、ターゲット マシンに接続します。
- ターゲット システムの IP アドレスを使用する (例:192.168.0.10)。IP アドレスがわからない場合は、ターゲット コンソールで
ifconfig
を実行して確認します。 - ポート 1534 を使用する。前の手順で GDB サーバーのポート番号を変更している場合は、その値を使用します。
重要: QEMU でデバッグを実行する場合、非ルート (デフォルト) またはルート モードでテストする際の IP およびポート リダイレクトの詳細は、「QEMU 仮想ネットワーク モード」を参照してください。たとえば非ルート モードでテストする場合、以降の手順でターゲット IP としてローカル ホストを使用する必要があります。(gdb) target remote 192.168.0.10:1534
GDB コンソールがリモート ターゲットに接続します。ターゲット コンソールの GDB サーバーにより、ホスト IP の確認情報が表示されます。
Remote Debugging from host 192.168.0.9
- ターゲット システムの IP アドレスを使用する (例:192.168.0.10)。IP アドレスがわからない場合は、ターゲット コンソールで
- プログラムの実行を始める前に、ブレークポイントをいくつか作成します。GDB コンソールでは、関数名と行番号を使用してコードの任意の場所にブレークポイントを作成できます。たとえば
main
関数にブレークポイントを作成するには、次のコマンドを使用します。(gdb) break main Breakpoint 1 at 0x10000444: file myapp.c, line 10.
- GDB コンソールで continue コマンドを実行し、プログラムを実行します。GDB はプログラムの実行を開始します。
(gdb) continue Continuing. Breakpoint 1, main (argc=1, argv=0xbffffe64) at myapp.c:10 10 printf("Hello, PetaLinux World!\n");
- 現在のプログラム実行位置のコード リストを出力するには、
list
コマンドを実行します。(gdb) list 5 */ 6 #include <stdio.h> 7 8 int main(int argc, char *argv[]) 9 { 10 printf("Hello, PetaLinux World!\n"); 11 printf("cmdline args:\n"); 12 while(argc--) 13 printf("%s\n",*argv++); 14
-
step
、next
、およびcontinue
コマンドを実行できます。ブレークポイントの設定と削除には、break
コマンドを使用します。コマンドの詳細は、GDB コンソールでhelp
コマンドを実行すると確認できます。 - プログラムの実行が完了すると、ターゲット システムの GDB サーバー アプリケーションが終了します。コンソールには次のようなメッセージが表示されます。
Hello, PetaLinux World! cmdline args: /usr/bin/myapp Child exited with status 0 GDBserver exiting root@plnx_aarch64:~#
ヒント: ライブラリへのパスを設定する .gdbinit ファイルが自動的に作成されます。このファイルの末尾に、独自の GDB 初期化コマンドを追加できます。