今回はMPLAB X IDEの主なデバッグ機能を確認します。
今回の説明内容
前回の記事では、MPLAB X IDEのデバッグ機能の典型的な使い方を説明しました。
ところで、MPLAB X IDEのデバッグには他にも色々な機能があります。
今後ご自身でプログラムをデバッグするときのためにも、MPLAB X IDEの主なデバッグ機能を説明します。
プログラムは、前回の記事のSPI通信の動作確認用プログラムを使用します。
それでは、デバッグできるように準備しましょう!
ブレークポイントを設定しない方法
前回の記事では、プログラムにプレークポイントを設定して処理を止めて、そのときの変数の値を確認しました。
ところで、プログラムがうまく動作しない場合、最初から順番に実行して、処理がどのように進んでいるのか確認したいケースもあります。
このような場合は、プログラム先頭にブレークポイントを設定すれば良いですが、他の方法もありますのでご紹介します。
最初に、プログラムにブレークポイントが設定されていないことを確認してください。もしブレークポイントが設定されている場合、その行の行番号を一度クリックしてブレークポイントを解除します。
次に、デバッグ開始ボタンをクリックしてデバッグを開始します。

デバッグ開始前にPICマイコン電圧の確認やコンフィグレーション設定確認のダイアログか表示されますので、前回と同様にOKボタンをクリックしてデバッグに入りましょう。
と、ここまではいいのですが、その後は何も変化はないですよね。
今回はブレークポイントを設定していませんので、どこかで止まることなく処理が進み、おそらく今頃はwhile文を実行しているに違いありません。
と、実況中継している場合じゃないですよね。
これから、いったん動作を止めて、プログラムの先頭から順番に処理を実行してもらうことにします。
最初はPICマイコンの動作を止める方法です。
次の一時停止ボタンをクリックすると、処理が一時的に止まります。

一時停止すると、次の(リセットボタンが有効になりますので、リセットボタンをクリックします。

もしリセットボタンが見当たらないようでしたら、ボタンが隠れている状態です。ウィンドウサイズを大きくするか、次のように隠れているメニューを表示します。

リセットすると次のようにmain関数の最初の行で処理が停止している状態になります。

このように、デバッグ開始 → 一時停止 → リセットという操作で、プログラムの先頭からデバッグすることができます。
それでは、ここから1行ずつPICマイコンに処理を実行してもらい、変数の値を確認してみましょう!
緑色の行は、これから実行する処理になります。この行を実行するには以下の「ステップオーバーボタン」をクリックします。(クリックすると拡大できます)

この「ステップオーバー」という言葉、よく意味がわかりませんよね。
「ステップ」は1ステップずつ実行する、というような意味合いで、「1行ずつ実行」というような意味です。
「オーバー」とは、「この1行を1度で実行する」というような意味になります。
???
「このこの1行を1度で実行する」って当たり前ですよね。
実はこのあと説明する機能と対比する形で「ステップオーバー」という言葉があります。
その機能を理解すると、「このこの1行を1度で実行する」という意味が明確になりますので、この時点では「とにかく1行を実行する」という意味で進めましょう。(強引ですみません…)
それでは、「ステップオーバーボタン」を1回クリックしてみてください。
クリックすると、緑色の行が次に進みます。

この状態は、ひとつ上の行のOSCCON1bits.NDIV = 0b0000;
が実行され、今の緑色の行はこれから実行される行になることを意味しています。
さらにこの行をステップオーバーで実行してみましょう。
実行後、OSCFRQbits.HFFRQ
の値を確認してみます。プログラムでは0b010
、つまり2を代入しています。
プログラムのHFFRQ
という文字にカーソルを合わせると、次のようにツールチップが表示されてHFFRQ
の値が確認できます。正しく2が代入されていることがわかりますね。(クリックすると拡大できます)

このような操作で、プログラムの最初から1行1行処理を進め、変数の中身を確認していくことができます。
特定の行まで実行する方法
これまで説明した手順でプログラムの先頭から1行ずつ実行していくことができます。
でもプログラムが長い場合、処理の先頭から1行1行実行していくのではなく、特定のところまで処理を進めてもらいたいケースもあります。
例えば今回のプログラムでは、最初の動作周波数設定やピンの属性設定などは、単にレジスタに値を設定するだけの処理で問題が発生することはあまり考えられません。
そこで、特定の行までまとめて実行する方法を確認します。
処理をまとめて実行する場合は、「カーソル行まで実行」という機能を使用します。
例えば、SPI信号の初期設定まで処理を進めたい場合、次のように止めたい行にカーソルを移動します。

次に、「カーソル行まで実行」ボタンをクリックすると、カーソル行まで実行して一時停止します。

このようにカーソル行まで実行する機能を利用すると、プログラムの最初から効率的に処理を追うことができます。
関数の中身を実行する方法
次に、処理を進めてchipid = spiRead1ByteData(0xD0);
の行で一時停止してください。(ステップオーバーでもいいですし、カーソル行まで実行でも大丈夫です)
このあと、しばらく操作を行わないで説明を先にお読みください
この状態でステップオーバーボタンをクリックすると、この行が実行されてchipid
にセンサーのIDが格納されますよね。
ところで、処理する行が関数の場合、関数の中身に処理を進めたいことがあります。
ステップオーバーボタンは、実行する行が関数の場合でも、1回クリックすると関数全体をいっぺんに処理してしまいます。
一方で、関数の中身に処理を進めたい場合は、次の「ステップイントゥー」ボタン(処理を関数の中身に進めるボタン)を使用します。

それでは、これからは説明に沿って操作してみてください。
chipid = spiRead1ByteData(0xD0);
の行で、「ステップイントゥー」ボタンをクリックします。
クリックすると、先ほどのステップオーバーボタンと異なり、次のように関数の中に処理が進みます。

このように関数内部の処理も確認したい場合は、Step Intoボタンを使えば関数内部に処理を進めることができます。
ここで用語について確認しておきます。
ステップオーバーの「オーバー」とは「越える」というような意味合いがあります。その行を関数内部に入らずに越えていくようなイメージです。
これに対し、ステップイントゥーの「イントゥー(into)」は「中に」というような意味合いで、関数の中に入っていく、というようなイメージです。
ボタンもそのようなイメージになっていますよね。

状況に応じてステップオーバーとステップイントゥーを使い分けてみてください。
以上がMPLAB X IDEの主なデバッグ機能です。
前回と今回ご説明したデバッグ機能を使用すれば、ほとんどのケースに対応できると思います。
MPLAB X IDEのデバッグには他にもいろいろありますが、残りの機能についてはPICマイコンの内部動作の理解が必要になります。
PICマイコンの理解が進んだら他のデバッグ機能についても確認してみてください。
更新履歴
日付 | 内容 |
---|---|
2018.5.12 | 新規投稿 |
2025.8.3 | MPLAB X IDE Version6.25対応 |