こんにちは、ENGかぴです。
Raspberry Pi Debug Probeを使用するとソースコードの1行ごとにブレークポイントを張って動作確認ができるため、効率の良い開発が行えます。Pico SDKを使用したDebug Probeを使い方の例をまとめました。
下記記事のソースコードを使ってDebug Probeのデバッグ方法を説明しています。
Raspberry Pi PicoのI2CでRTCの時刻を表示する
Raspberry Pi Pico(以下Picoとする)と拡張基板のGrove Shield for Pi Picoを使用しています。
VSCodeのダウンロードとインストールの方法やVSCodeにPicoの開発環境を追加する方法は下記記事を参考にしてください。
Raspberry Pi Picoの開発をVSCodeで行う方法
Picoを使用してArduino IDEやVSCodeで動作確認したことをまとめています。
Debug Probeを使用する

Debug Probeの説明や接続例は下記リンクに記載されていますが、ここではデバッグするソフトに合わせた回路図にDebug Probeを接続した例を示しています。
Raspberry Pi Debug Probe – Raspberry Pi Documentation
Debug Probeの接続方法はPicoのDEBUGピンを使用しますが、シリアルモニターを使用する場合はUART Port(UARTを使用)を追加することができます。
基本的にデバッグはDEBUGピン(SWCLK・SWDIO・GNDの3ピン)を使いますが、シリアルモニターからデータを送信/受信してデバッグを行う場合は、UART portをPicoのUARTのピン(例ではUART0に配線)を使用します。
デバッグ(以下ではPico SDKに倣ってPico Debugと表記)の目的はソースコードを一時的にストップするブレークポイントを張って1行ずつステップ実行しながら演算の結果や変数・レジスタの値を確認し、想定通りの動作になっているかの確認することです。
シリアルモニターにprint()関数を使って表示しながらデバッグする方法もありますが、確認のためにコンパイルとソフトの書き込みを繰り返す必要があり面倒です。
Pico Debugを使用するとブレークポイントを張ってピンポイントでバグの調査ができるのがメリットです。
本記事では、シリアルモニターを外部機器と想定して電文を送信し、ブレークポイントを張って受信したデータを確認します。
PR:わからないを放置せず、あなたにあった最低限のスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
デバッグ方式の選択

VSCodeの左の欄に「実行とデバッグ」のアイコンがあるのでクリックすると実行とデバッグを行う方式が選択できます。デフォルトでPico Debug(Cortex-Debug)が選択されています。
Debug ProbeはOpenOCDを起動した環境下で動作するように設計されていますが、VSCodeの拡張機能がOpenOCDを起動するためデフォルトの設定でデバッグすることができます。
Pico Debug(Cortex-Debug with external OpenOCD)は自分でインストールしたOpenOCDを起動して使用する方式でVSCodeに設定を追加する必要がありますが、OpenOCDの設定を調整できるなど上級者向けの設定です。
デバッグの開始

デバッグの方式を選択した後、横の▷ボタンをクリックしてデバッグを開始します。デバッグはコンパイルに成功するとスタートします。コンパイルエラーの場合はデバッグを開始することができません。
デバッグを開始するとデバッグツールが表示されます。デバッグツールはCPUのリセット、ステップイン、ステップオーバーなどのアイコンが表示されています。
デバッグを開始するとmain()関数の先頭にカーソルが移動しているので続行を選択すると処理がスタートします。ブレークポイントを張っていない場合は、通常の動作になります。デバッグツールの内容は以下の通りです。
| 項目 | 内容 | ショートカット |
|---|---|---|
| Reset Device | DEBUGピンを使ってCPUの初期化する。 | なし |
| 続行 | ブレークポイントまで処理を進める。 | F5 |
| 停止 | 続行を一時停止する。 | F6 |
| ステップイン | 関数の内部に入って1行ずつ処理する。 | F11 |
| ステップオーバー | 関数の処理を飛び越えて次の行に進む。 | F10 |
| ステップアウト | ステップインやブレークポイントで関数内に入った後、関数を抜けるまで処理を進めて次の行に進む。 | Shift+F10 |
| 再起動 | 電源の入/切によって再起動する。(BOOTモードに遷移できる) | Ctrl+Shift+F5 |
| 停止 | デバッカーの接続を切断する。 | Shift+F5 |
実行(R)から選択してデバッグすることもできますが、アイコンを使用しながらショートカットを使っていくとデバッグの効率がよくなります。
PR:スキマ時間で自己啓発!スマホで学べる人気のオンライン資格講座【スタディング】まずは気になる講座を無料で体験しよう!
ブレークポイントを張る

ブレークポイントを張って一時停止すると内部のレジスタや変数の状態を確認することができます。
ブレークポイントを張る方法は行番号横の空白を左クリックするだけです。例では113行目にブレークポイントを張っています。ブレークポイントまで処理が進むと一時停止します。
timledなど変数の値を確認する方法はウォッチ式を使います。Debug Probeが接続している状態で追加する変数を選択(左ダブルクリックで文字列を選択)し、右クリックから「ウォッチに追加」を選択するとウォッチ式に追加できます。
ウォッチ式の欄横の+アイコンを選択して入力する方法で追加することもできるので上記の方法と合わせて好みで使い分けすることができます。
例ではtimled変数は50になっていることが確認できます。
本記事ではtimledの変数の値が変更できませんでしたが、タイマ管理で値を確認すると問題なく動作しているので特に気になりませんでした。
今後Debug Probeを使う際に本件について深堀してみたいと考えています。
PR:(即戦力のスキルを身に着ける:DMM WEBCAMP 学習コース(はじめてのプログラミングコース))
動作確認
動作確認は下記記事のソースコードで行います。
Raspberry Pi PicoのI2CでRTCの時刻を表示する
Picoの電源を入れデバッグを開始します。ブレークポイントをRTCから時刻を読み出してLCD用の文字列を生成した後の箇所(ソースコードの124行目)にブレークポイントを張って文字列を確認します。

生成した文字列は配列のdatestr[]に格納されているためこれをウォッチ式に追加して確認しました。文字列で2025/08/10・・が生成されている様子がわかります。
次にシリアルモニターから電文を送信して受信したデータを確認します。ソースコードの226行目にブレークポイントを張ってデータを確認します。

シリアルモニターから受信したデータは一時的にu0_rcvdata.buf[]配列に格納されるのでウォッチ式に追加してデータを確認します。
シリアルモニターから送信した自作の電文はRTCの書き込みを行うもので「RTC2026-01-24-06-12-45-30」のように電文のフォーマットに合うように送信しました。
データを確認すると「RTC2026-・・・」のように文字列を受信している様子が確認できました。
今回の例では変数の内容を確認しましたが、Debug Probeを使用すると電文のフォーマットに合っているかを確認したり、演算の結果が合っているかを確認したりできるためデバッグが効率よく行えます。
関連リンク
Arduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。
Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方
Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方
ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方
PR:企業で求められる即戦力技術を身に付ける テックキャンプエンジニア転職
最後まで、読んでいただきありがとうございました。

OpenOCDの詳細設定しなくても手軽にデバッグができるため、デフォルトのPico Debug(Cortex-Debug)を使用することを推奨します。