鳥なき里のマイコン屋(81) VS Code, Remote, makeしてgdb

JosephHalfmoon
JosephHalfmoon

前回、VS CodeからRemoteでJetson Nanoに接続しました。cupyモジュールを使ってGPU呼び出しているPythonコードについては、編集も、デバッグ実行も上手く行きました。けれど、cudaの「.cu」拡張子のソースプログラムについては編集はOKだったですけれど、VS Codeからのビルドがうまくできず、尻切れトンボでした。Makefileはあるので、ターミナルから make と打てば事は済むのですが。でもカッコよくVS Codeからショートカット一発でmake起動したい。今回は、.cuのビルドをし、返す刀でRaspberry Piに「横展開」。そして、ちょいと先までやってみたいと思います。

今回は、覚えたばかりの tasks.json で make してしまおうと思います。もっとカッコイイ方法ありそうなもんですが知りませぬ。できる方法でやってしまいます。

VS Codeは、各階層に設定ファイルを置けるので、今回は開いている「フォルダ」配下にのみ適用されるよう、該当フォルダ配下の.vscodeフォルダ内のtasks.jsonを編集します。(といって、taskをconfigureしようとすれば勝手に雛形を作ってくれますが。)

make用に設定したのはこんな感じ。とりあえず、いくつかのサブディレクトリの中に .cuのソースやそれぞれのMakefileが点在しているので、ターゲットの.cu拡張子のソースを開いている状態で呼び出すことを想定しました。それで、options の中に cwd設定、変数置換${fileDirname}で、該当ファイル格納ディレクトリに入って処理する、という目論見です。コマンドはシンプルに “make” で最初のターゲットを生成、make debugとか make cleanとかいろいろ作るのは以下同文でしょう。problemMatcherは、エラーが起きた時にクリック一発で該当部位に飛ばしてくれる優れものですが、今回はとりあえず設定なし。(gcc設定?でいける?)

さてtaskの定義は出来たですが、いちいちコマンドパレットから起動するのでは、ターミナルウインドウからmakeとうつ方がよっぽどましです。それで左下の管理ボタンからキーボード・ショートカットを設定してみました。

私の環境では、CTRL+ALT+M (MakeのMのつもり)は「まだ」使われていなかったので、それに設定してみました。また、いつ(when)は、ターゲットのファイル(該当のMakefileのあるフォルダのファイルなら何でもよい筈)にフォーカスがあるときとしてみました。

やってみましょう。CTRL+ALT+M えい。CudaをMakeするための長い長いオプションがずらずら出力されているので、とても小さくて見ずらいですが、ちゃんとMakeされました。

しかし、よく考えてみると、

  • tasks.jsonはリモートのJetson Nanoのフォルダの中
  • キーボード・ショートカットは、リモートアクセスしているPC側の設定

であるので、キーボード・ショートカットはこのPCから接続している限り「どこでも有効」状態の筈。であれば、

ラズパイにも同じtasks.jsonを置いたならば CTRL+ALT+Mでmakeできる筈

やってみましょう。前々回で設定済のラズパイのフォルダをVS Codeのリモートで開き、フォルダのtasks.jsonを書き込みました。

CTRL+ALT+M えい。(えいは入力しませんよ。。。)

こちらのmake fileはシンプルなものなので、大きな文字で良く読めます。

ビルドできました。目出度し。しかし、お気づきでしょう、makeといいつつ、

-g オプション

がついております。

デバッグ・ビルド

といって良いでしょう。リモートでgdbも起動したい。だって、VS Codeにはちゃんと「デバッガ」のボタンがあるのだもの。使わない手はないでしょう。そこでどうするか、ちと迷ったのですが、Native DebugというExtensionを利用させてもらうことにいたしました。これをリモートにインストール。そして、今度は、configureすればリモートの.vscodeディレクトリ内に用意される

launch.json

をちょっと編集いたしました。targetとcwdのところだけ直しました。こんな感じ。

さて、設定ができたので、適当なところ(といって2行しかないHelloプログラムですが)にブレークポイントを置き、デバッグ開始してみます。御馴染みのデバッグ用のツールバーが出現し、変数表示ウインドウも開きます。そして、実行開始すればちゃんとブレークして止まりました。こんな感じ。

ラズパイにVS Codeでリモート接続して、デバッグできそうです。よかった。

鳥なき里のマイコン屋(80) VS CodeでJetson Nano へ戻る

鳥なき里のマイコン屋(82) VS CodeでESP32 DevKitC へ進む