皆さん こんにちは
ラズピコ研究員の moon です。
VSCode+ラズピコ拡張でデバッグを始めていて気になったことがあります。
ビルドでエラーが発生しても、それ以前の実行ファイルが存在するとそれらの情報でデバッグが開始されてしまいます。
これは全く意味がないと思いますので、何とかしたいと思います。
試しにC言語の malloc() と strcpy() を使ったプロジェクトを作成してみることにします。
接続
前回同様、標準出力に UART を使うので以下の通りに接続します。
これはPicoProbeのUSBシリアル機能とラズピコ(マイコンRP2040)のUARTをクロス接続するものです

新規プロジェクトを作成する
VSCodeを起動し、フォルダを開いている場合には ファイル – フォルダーを閉じる を選択します。
次にアクティビティーバーから Raspberry Pi Pico Project を選択し、サイドバーの New C/C++ Project を選択します。

Name は malloc_strcpy とし、Board type で Pico を選択します。
後は Stdio support の Console over UART にチェックを入れます。
(これにより UART を標準入出力として使うことができるようになります)
code generation options の Use project name as entry point file name にチェックを入れます。
Debugger は DebugProbe(CMSIS-DAP)[Default] を選択し、CMake Tools の Enable CMake-Tools extension integration にチェックを入れます。


(画像を参照してください)
そして右下の Create ボタンを押します。
これで標準出力として UART で printf() 出力するコードを生成してくれます。
キットの選択
malloc_strcpy のキットを選択してください と言われるので、その下に出て来る候補の一番下の 「Pico コンパイラの使用: C = C:\Users…」を選択します。
実行とデバッグ
アクティビティーバーの実行とデバッグを選択します。
メニューの 実行 – デバッグの開始を選択します。
malloc_strcpy の起動対象を選択します と言われるので、その下の候補から malloc_strcpy を選択します。
main()関数の中の stdio_init_all() のところでプログラムが停止するので、F5キーを押してプログラムが動作することを確認します。
シリアルモニター
シリアルモニターは Tera Term の簡易版と考えれば良いと思います。
Raspberry Pi Picoの拡張を入れたら自動的にインストールされるようです。
エディター下の、下部パネルの右の方にあるシリアルモニターを選択します。

ポートで正しいCOMポートを選択し、ボーレートを115200に設定します。
(歯車アイコンを選択すると、データビットやパリティを選択することができますが今回はデフォルト値のまま動くようなので設定不要です)
そして監視の開始を選択すると、1秒周期で “Hello, world! が表示されれば成功です。
ここで一旦、Shift + F5キーを押してプログラムを停止します。
malloc_strcpy.cを書き換える
malloc_strcpy.c を以下のコードに置き換えます。(コピペしてください)
私は、ほとんど malloc() や strcpy() を使わないので以下は半分それらのお試しも兼ねたコードです。
#include <stdio.h>
#include "pico/stdlib.h"
#include // strcpy()
#include // malloc()
int main()
{
stdio_init_all();
char *name = (char *)malloc(sizeof(char) * 100);
assert(name);
strcpy(name, "Memory reserved.\n");
while (true) {
printf(name);
sleep_ms(1000);
}
}
Ctrl + S でファイルを保存した後、F5キーを2回続けて押してプログラムを実行します。
シリアルモニターに、1秒間隔で Memory reserved. と表示されれば成功です。
ビルドエラーさせてみる
以下のように string.h のインクルードをコメントにします。
//#include <string.h> // strcpy()
F5キーを押してプログラムを実行させてみると、strcpy()の部分に赤の波線がひかれてエラーが出ていますが、少し待っているとプログラムが動いてしまいました。

これは何とかしたいですね。
Shift + F5キーを押して、一旦プログラムを停止します。
launch.jsonを編集する
アクティビティーバーからエクスプローラーを選択します。(ショートカットは Ctrl + Shift + E )
.vscode下の launch.json の “name”: “Pico Debug (Cortex-Debug)” の最後の項目 ”oepnOCDLaunchCommands” の ] の後に , (カンマ)を追加し、
その次の行に “preLaunchTask”: “Compile Project” を追加します。

そして Ctrl + S でファイルを保存します。
そしてF5キーを押してデバッグを開始します。
以下のメッセージが表示されれば成功です。
中止ボタンを押してプログラムの実行を中止します。

ビルドが成功した時の動作を確認しておきましょう。
先ほどコメントにした、以下の行から // を削除し、F5キーを押してプログラムが動作すれば成功です。
//#include <string.h> // strcpy()
いかがでしたか、皆さんの環境ではビルドエラー時のデバッグ動作を抑止できましたか?
お疲れさまでした。