BeagleBoneBlackで学ぶYoctoLinuxの基礎 (4) ~VSCodeを使ったリモートデバッグ~


あらまし

BeagleBoneBlackで学ぶYoctoLinuxの基礎 (3)にて、CMakeを使ったHelloWorldのビルドまで完了したため、次はVSCodeを利用したリモートデバッグの仕組みを作成する。

大まかには以下の手順となる。scp及びsshはターミナルエミュレータからも可能だが、すべてをVSCodeで完結させるため、tasks.jsonを定義し、ビルド後のイメージの転送とgdbserverの起動をVSCode上から実施できるようにした。

大まかには以下の手順でデバッグが可能となる。

  • scpを使ってa.outをBBBに転送
  • sshを使って、BBB上でa.outのgdbserverを起動する
  • VSCodeからgdbを使って接続する

振り返り

BeagleBoneBlackで学ぶYoctoLinuxの基礎 (2) より、BBBはipアドレス:192.168.100.19を利用していることがわかっている。

tasks.jsonの作成

.vscode.内部に、以下の通りtasks.jsonを作成した。

  • bbb-downloadにてa.outをBBBに転送
  • bbb - rungdbにてBBB上でgdbserverを起動

scp及び、ssh実行時にパスワード認証が必要となるが、毎回入力する必要があり煩わしく感じたため、sshpassを利用した。また、仮に、転送先: /home/user及び、ポート番号1234を設定した。

tasks.json
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "bbb - download",
            "type": "shell",
            "command": "sshpass -p user scp -r ${workspaceFolder}/build/a.out [email protected]:/home/user"
        },
        {
            "label": "bbb - rungdb",
            "type": "shell",
            "command": "sshpass -p user ssh [email protected] \"gdbserver localhost:1234 /home/user/a.out\""
        }
    ]
}

これにより、VSCodeのコマンドパレット(Ctrl-p)より、Tasks: Run Taskを実行することにより各タスクを呼び出すことが可能となる。また、呼び出し時にVSCodeのTerminalにその結果が出力される。

bbb - downloadbbb - rungdbを順に実行すると、Terminal上にgdbserverが1234ポートをListenしていることが表示される。

launch.jsonの作成

デバッグ環境を定義するために、.vscode内に以下の通りlaunch.jsonを作成した。

項目 説明
name お好みで
program デバッグ対象の実行ファイル
miDebuggerServerAddress 接続先のgdbserverのIPアドレスとポート番号
miDebuggerPath sdkに含まれるgdb
launch.json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) bbb - Remote",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/build/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "miDebuggerServerAddress": "192.168.100.19:1234",
            "miDebuggerPath": "/opt/poky/3.1.6/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux/arm-poky-linux-gdb",
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

VSCode上でデバッグマークを選択すると、デバッグ環境の選択に(gdb)bbb - remoteが選択可能となり、RUN AND DEBUGの右側の緑矢印を選択すればデバッグが可能となる。

まとめ

  • BBB上で動作するLinuxに対するリモートデバッグ環境を作成した
  • すべてVSCode上で実行するため、taskを利用した
  • Local変数、Callstack等も見れていい感じ