デバッグ セッションの実行手順 - 2023.1 日本語

PetaLinux ツール資料: リファレンス ガイド (UG1144)

Document ID
UG1144
Release Date
2023-05-16
Version
2023.1 日本語
デバッグ セッションを実行するには、次の手順に従います。
  1. 作成した新しいイメージでボード (または QEMU) をブートします。
  2. 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 ファイルにあります。
  3. ターゲット システム コンソールでユーザー アプリケーションに対して gdbserver を実行します (ポート 1534 をリッスンするように設定)。
    root@plnx_aarch64:~# gdbserver :1534 /usr/bin/myapp
    Process /bin/myapp created; pid = 73
    Listening on port 1534

    1534 は gdbserver ポートです。未使用ポートであればほかのポートでもかまいません。

  4. ワークステーションで、コンパイル済みユーザー アプリケーションのディレクトリに移動します。
    cd <<TMPDIR>/work/cortexa72-cortexa53-xilinx-linux/myapp/1.0-r0/image/usr/bin/
    
  5. GDB クライアントを実行します。
    petalinux-util --gdb myapp

    GDB コンソールが開始します。

    ...
    GNU gdb (crosstool-NG 1.18.0) 7.6.0.20130721-cvs
    ...
    (gdb)
  6. 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
  7. プログラムの実行を始める前に、ブレークポイントをいくつか作成します。GDB コンソールでは、関数名と行番号を使用してコードの任意の場所にブレークポイントを作成できます。たとえば main 関数にブレークポイントを作成するには、次のコマンドを使用します。
    (gdb) break main
    Breakpoint 1 at 0x10000444: file myapp.c, line 10.
  8. GDB コンソールで continue コマンドを実行し、プログラムを実行します。GDB はプログラムの実行を開始します。
    (gdb) continue
    Continuing.
    Breakpoint 1, main (argc=1, argv=0xbffffe64) at myapp.c:10
    10  printf("Hello, PetaLinux World!\n");
  9. 現在のプログラム実行位置のコード リストを出力するには、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
  10. stepnext、および continue コマンドを実行できます。ブレークポイントの設定と削除には、break コマンドを使用します。コマンドの詳細は、GDB コンソールで help コマンドを実行すると確認できます。
  11. プログラムの実行が完了すると、ターゲット システムの GDB サーバー アプリケーションが終了します。コンソールには次のようなメッセージが表示されます。
    Hello, PetaLinux World!
    cmdline args:
    /usr/bin/myapp
    Child exited with status 0
    GDBserver exiting
    root@plnx_aarch64:~#
ヒント: ライブラリへのパスを設定する .gdbinit ファイルが自動的に作成されます。このファイルの末尾に、独自の GDB 初期化コマンドを追加できます。