皆さん こんにちは
ラズピコ研究員の moon です。
この記事は「初心者必見! Raspberry Pi Picoの C/C++デバッグ環境を容易に構築する」によって環境構築していることを前提にしています。
前回は プロジェクト名を変更する作業について説明しました。
今回はデバッグの基本操作である、変数の値を参照する方法について説明します。
プロジェクト名を led に変更した、そのプロジェクトを VSCode で立ち上げます。
実行とデバッグ(Ctrl + Shift + D)を操作した後、F5キーを押すと以下の画面のようにmain関数のところでプログラムが停止します。

pico_led_init()関数の戻り値はmain()関数内のローカル変数 rc で受け取るコードになっています。
この状態でサイドバーにはデバッグビューが表示されていて緑色で囲った部分では変数 rc = <optimized out> と表示されています。
プログラムがmain関数の外にあるため、関数内のローカル変数の値を見ることができないようです。
F10キーでステップ実行を2回繰り返し pico_led_init()関数を実行し終えたところで rc = 0 になりました。
もう一度F10キーでステップ実行すると、また rc = <optimized out> と表示されてしまいました。
最適化オプションをはずしてみる
rc 自体を main関数の外で宣言するとスコープがプログラム全体に渡るので、最適化の具合によらずに rc の内容を常に見ることができます。
でもできれば、このようなグローパル変数を使いたくはないですね。
その場合、最適化のオプションをなしにする選択肢があります。
最適化は私たちが書いたコードの通に動かなくなることも良くあり、デバッグのじゃまになることもあります。
ですから私個人としては、できるだけ最適化=なしでデバッグすることをお薦めします。
Ctrl + Shift + E でサイドバーにエクスプローラーを表示し、CMakeLists.txt を選択します。
CMakeLists.txt は CMakeのスクリプトファイルです。
CMakeLists.txt については以前 こちら に記事を書いていますので、参考になさってください。
add_executable()の下に次の一行を追加した後、Ctrl + S でファイルを保存します。
target_compile_options(led PRIVATE -O0)
-O0 がコンパイラに対して最適化なしを指示してくれます。
この後、ビルドして実行するとプログラムが while(true)文の中に入っても rc の値を見ることができるようになるはずです。
非常に基本的なおことですが最適化をなしにすることでデバッグしやすくなることがわかりました。
いかがでしたか、うまく変数の値を確認できるようになりましたか。
お疲れさまでした。