MATLABでのデバッグ方法(デバッガの使い方まとめ)

MATLAB

MATLABプログラムのバグ取りを行う際、次のように思うことはありませんか?

計算途中の変数の値を手軽に確認できたらいいのに…

デバッガは、まさにそれを叶える機能です!

この記事では、MATLABデバッガの基本的な使い方をまとめます。

スポンサーリンク

デバッグの流れ

デバッガを用いたデバッグの基本的な流れは、次の通りです。

  1. 気になる所でプログラムを一時停止させる
  2. 変数の詳細を確認する
  3. 次の気になる所までプログラムを走らせる
  4. 以降2,3の繰り返し

順に操作方法を見ていきましょう。以降、次の漸化式を解くデモプログラムを使用して、説明します。

$$x_{k+1}=\cos^2(x_k)$$

num_of_data = 100; % データ数設定
x = zeros(1,num_of_data); % 変数初期化

for num = 1 : num_of_data-1
    x(num+1) = sqcos(x(num)); % 漸化式解く
end

function output = sqcos(input) % 漸化式関数
    output = cos(input)^2;
end

基本の使い方

気になる所でプログラムを一時停止させる

まず、プログラムにブレークポイントと呼ばれる停止ポイントを設定します。

forループの中にブレークポイントを設定してみましょう。該当行の左の「-」をクリックすることで、ブレークポイントが設定されます。

設定したブレークポイントをもう一度クリックすると、削除されます。

ブレークポイントが設定された状態でプログラムを実行すると、ブレークポイントに差し掛かった時点で処理が一時停止され、デバッグモードに入ります。

変数の詳細を確認する

デバッグモードに入りました。矢印の行はまだ実行されていない状態です。

デバッグモード中は、コマンドウィンドウの「>>」が「K>>」に変わります。ワークスペースタブにその時点での変数一覧が表示されるので、それぞれの値を確認することができます。便利ですね!

エディタ上の変数にマウスホバーしても変数値が表示されます。また、コマンドウィンドウから命令を打ち込むことも可能です。変数の詳細を確認するのに便利です。

コマンドウィンドウからplot関数を呼び出してデータをプロットすることも可能ですが、デバッグ中はGUIのプロット機能を用いると便利です。方法はこちらの記事で紹介していますので、興味があれば合わせてご参照ください。

スポンサーリンク

次の気になる所までプログロムを走らせる

エディタ上部の「デバッグ」タブより、再びプログラムを走らせることができます。

それぞれのボタンの機能を説明していきます。

続行

次のブレークポイントまでプログラムが走ります。

ステップ

プログラムが一行ずつ走ります。変数の変化をじっくり追うときに便利です。

ステップイン

これもプログラムが一行ずつ走りますが、その行に関数があるとその関数の中に入ります。

例えば今回の例で「ステップイン」を押すと、関数sqcosに入った状態で処理が一時停止します。ワークスペースに表示される変数は、その関数から見える変数(ローカル変数)に変わります。

この状態から関数外の変数を見たいときは、「関数呼び出しスタック」プルダウンから関数呼び出し元の視点に戻ればOKです。視点が変わるだけで、プログラム処理の現在位置は変わりません。

ステップアウト

現在の関数を出るまでプログラムが走ります。

カーソル行まで実行

エディタ上のカーソル位置までプログラムが走ります。「ちょっとそこまで」走らせるときに便利です。

デバッガの基本的な操作方法は以上です。思ったより簡単ですね!

その他便利な使い方

ブレークポイント全消去

「ブレークポイント」ボタンより可能です。

スポンサーリンク

条件付きブレークポイント

「もしこうなったら一時停止」という条件付きブレークポイントも設定できます。

ブレークポイントを右クリックし、「条件の設定/変更」を選択します。

条件設定ウィンドウが表示されるので、条件式を入力します。

あとは通常と同じくプログラムを実行するだけです。

設定した条件付きブレークポイントをクリックすると、ブレークポイントが一時的に無効化されます。無効化した状態でもう一度クリックすると、ブレークポイントが条件ごと消去されてしまうので注意してください。再び有効にするには、右クリックから「ブレークポイントを有効にする」を選択します。

停止ポイントをコードで記述

keyboard

とプログラム中に記述すると、その行でコードが一時停止し、デバッグモードに入ります。

ブレークポイントと違ってMATLABを終了させても消えませんが、代わりに一括削除ができないので多用は避けたほうが無難です。

とりあえずマズいことになったら停止

「実行」ボタン下より、エラー・警告・数値発散が発生した時点で停止し、デバッグモードに移行するよう設定できます。 具体的にブレークポイントを設定する必要がないので便利です。

もちろん、error関数/warning関数によって自分で実装したエラー・警告に対しても、一時停止してくれます。これらの関数を使い、望ましくない挙動を事前にマークしておくと、より柔軟にデバッグすることができます。

試しに今回のプログラムのforループに、ラストループにて警告を出す処理を入れてみます。(何の意味もない警告なので、あまりいい例ではないですが)

for num = 1 : num_of_data-1
    x(num+1) = sqcos(x(num)); % 漸化式解く
    if num == num_of_data-1
        warning('ラスト1回だよ'); % 警告追加
    end
end

「警告で一時停止」オプションを設定して実行すると、warning関数が呼ばれた時点で一時停止し、デバッグモードに移行します。

以上、MATLABデバッガの使い方まとめでした。デバッガを使って快適なMATLABライフを!

コメント