MATLAB コード ファイルのデバッグ
MATLAB® コード ファイルの問題を診断するには、コードをエディターおよびライブ エディターで対話的にデバッグするか、コマンド ウィンドウでデバッグ関数を使用してプログラムによってデバッグします。
コードをデバッグする方法はいくつかあります。
セミコロンを削除して出力を表示する。
[ここまで実行] ボタン をクリックして、コードを特定の行まで実行して一時停止する。
[ステップ イン] ボタン をクリックして、一時停止中に関数およびスクリプトにステップ インする。
ファイルにブレークポイントを追加して、コードの実行時に特定の行で一時停止できるようにする。
デバッグを開始する前に、予期しない結果を避けるため、コード ファイルを保存して、コード ファイルとそれが呼び出すファイルがすべて検索パス上または現在のフォルダーに存在することを確認してください。MATLAB による未保存の変更の処理は、デバッグを行う場所によって異なります。
エディター — ファイルに未保存の変更が含まれている場合、MATLAB はファイルを保存してから実行します。
ライブ エディター — MATLAB は、ファイル内のすべての変更を、保存されているかどうかに関係なく実行します。
コマンド ウィンドウ — ファイルに未保存の変更が含まれている場合、MATLAB はそのファイルの保存されたバージョンを実行します。変更の結果は反映されません。
出力の表示
MATLAB コード ファイルで問題が発生する箇所を特定する方法の 1 つとして、出力を表示します。行の出力を表示するには、その行の終わりからセミコロンを削除します。エディターでは、MATLAB はコマンド ウィンドウに出力を表示します。ライブ エディターでは、MATLAB は出力とその作成元のコード行を表示します。
たとえば、乱数データのベクトルをプロットし、プロット上に平均値を示す水平線を描画する plotRand.m
というスクリプトがあるとします。
n = 50; r = rand(n,1); plot(r) m = mean(r); hold on plot([0,n],[m,m]) hold off title("Mean of Random Uniform Data")
2 行目の関数 rand
の出力を表示するには、その行の終わりにあるセミコロンを削除します。MATLAB はコマンド ウィンドウに r
の値を表示します。
ライブ エディターでは、MATLAB は r
の値と 2 行目を表示します。
[ここまで実行] を使用したデバッグ
ワークスペース内のすべての変数の状態をコードの特定のポイントで確認するには、コード ファイルを実行し、一時停止します。コードを指定の行まで実行してから一時停止するには、行の左側にある [ここまで実行] ボタン をクリックします。選択した行に到達できない場合、MATLAB はファイルの終わりかブレークポイントに達するまで実行を続けます。
デバッグ時に、[ここまで実行] ボタン は [ここまで続行] ボタン になります。関数とクラスでは、[ここまで続行] ボタン を使用したデバッグ時にのみ、指定の行まで実行してから一時停止できます。R2021a 以前のリリースでは、デバッグ時にカーソル位置まで実行してから一時停止するには、[エディター] タブに移動し、[カーソルまで実行] ボタン をクリックします。
たとえば、plotRand.m
の 2 行目の左側にある [ここまで実行] ボタン をクリックします。MATLAB は plotRand.m
を 1 行目から実行し、2 行目を実行する前に一時停止します。
MATLAB が一時停止すると、複数の変化が発生します。
[エディター] タブまたは [ライブ エディター] タブの [実行] ボタンが [続行] ボタンに変わります。
コマンド ウィンドウのプロンプトが
K>>
に変わり、MATLAB がデバッグ モードであり、キーボードで制御できることを示します。MATLAB では、一時停止された行が緑色の矢印を使用して示され、緑色で強調表示されます。
ヒント
MATLAB の一時停止中にファイルを変更するのは避けることをお勧めします。MATLAB が一時停止している間に行った変更は、MATLAB がコードの実行を完了した後で再実行されるまで実行できません。
MATLAB で一時停止している行は、コードの実行を続行するまで実行されません。コードの実行を続行するには、 [続行] ボタンをクリックします。MATLAB は、ファイルの終わりかブレークポイントに達するまでファイルを実行し続けます。次に実行を一時停止するコード行の左側にある [ここまで続行] ボタン もクリックできます。
コードの実行を行単位で続行するには、[エディター] タブまたは [ライブ エディター] タブの [ステップ] をクリックします。MATLAB は現在一時停止している行を実行し、次の行で一時停止します。
デバッグ中の変数値の表示
MATLAB が一時停止している間に変数の値を表示するには、変数にカーソルを合わせます。変数の現在の値がデータ ヒントに表示されます。データ ヒントはカーソルを移動するまで表示されます。
コマンド ウィンドウに変数名を入力して変数の値を表示することもできます。たとえば、変数 n
の値を表示するには、n
と入力して Enter キーを押します。コマンド ウィンドウに変数の名前とその値が表示されます。現在のワークスペースにあるすべての変数を表示するには、ワークスペース ブラウザーを使用します。
詳細については、デバッグ中の値の検査を参照してください。
実行中のファイルの一時停止
実行時間の長いコードを実行中に一時停止して進行状況をチェックし、予期したとおりに実行されていることを確認できます。実行中のコードを一時停止するには、[エディター] タブまたは [ライブ エディター] タブに移動して [一時停止] ボタンをクリックします。MATLAB は次の実行可能行で一時停止し、 [一時停止] ボタンが [続行] ボタンに変わります。コードの実行を続けるには、 [続行] ボタンをクリックします。
メモ
[一時停止] ボタンをクリックすると、自身のコードの外部から、MATLAB をファイル内で一時停止させることができることがあります。また、MATLAB が一時停止して [一時停止] ボタンが [続行] ボタンに変わるまでに大幅な遅延が発生する場合があります。場合によっては、MATLAB が一時停止しないこともあります。その理由は、一部の組み込みコードで MATLAB が一時停止できないためです。
関数へのステップ イン
デバッグ時には、呼び出されたファイルにステップ インして、値を調べたい点で一時停止することができます。ファイルにステップ インするには、ステップ インする関数またはスクリプトのすぐ左側にある [ステップ イン] ボタン をクリックします。MATLAB では、別の関数またはスクリプトの呼び出しを含む行のみにこのボタンが表示されます。ステップ インの後、ファイル先頭の [ステップ アウト] ボタン をクリックして、呼び出された関数の残りを実行し、呼び出された関数を出てから一時停止します。
既定では、[ステップ イン] ボタン はユーザー定義の関数とスクリプトについてのみ表示されます。すべての関数とスクリプトに対してボタンを表示するには、[ホーム] タブの [環境] セクションで [基本設定] をクリックします。その後、[MATLAB] 、 [エディター/デバッガー] を選択し、[デバッグ] セクションで [インラインの [ステップ イン] ボタンを表示] オプションを [常に行う] に設定します。ボタンを表示しない場合は、[インラインの [ステップ イン] ボタンを表示] オプションを [行わない] に設定します。
あるいは、[エディター] タブまたは [ライブ エディター] タブの [ステップ イン] ボタンまたは [ステップ アウト] ボタンを使用して、デバッグ中に関数へのステップ インとそこからのステップ アウトを実行できます。これらのボタンは、[インラインの [ステップ イン] ボタンを表示] の基本設定には従わず、常にユーザー定義の関数と MathWorks® 関数でステップ インとステップ アウトを実行します。
関数呼び出しスタック
呼び出された関数またはファイルにステップ インすると、現在の行で一時停止する前に実行した関数のリストが MATLAB に表示されます。"関数呼び出しスタック" とも呼ばれるこのリストはファイルの先頭に表示され、関数が順番に並んでいます。最初に呼び出されたスクリプトまたは関数が左に、MATLAB によって一時停止された現在のスクリプトまたは関数が右に表示されます。
関数呼び出しスタック内の各関数には、対応するワークスペースがあります。ワークスペースは、MATLAB 内で作成した変数、またはデータ ファイルや他のプログラムからインポートした変数を格納します。コマンド ウィンドウから代入される変数やスクリプトを使用して作成される変数は、ベース ワークスペースに属します。関数内に作成される変数は、それ自身の関数ワークスペースに属します。
現在のワークスペースの外にある変数の値を確認するには、別のワークスペースを選択します。詳細については、デバッグ中の値の検査を参照してください。
ブレークポイントを追加してコードを実行
コード実行のたびに一時停止するコード行がファイルに含まれている場合、それらの行にブレークポイントを追加します。ブレークポイントは、エディターおよびライブ エディター上で対話的に追加したり、コマンド ウィンドウで関数を使ってプログラムによって追加したり、またはその両方の方法で追加したりできます。
ブレークポイントには、標準、条件付き、エラーの 3 種類があります。エディターまたはライブ エディターで標準ブレークポイントを追加するには、ブレークポイントを設定する実行可能な行の左側にある行番号 (行番号が表示されていない場合は、グレーの領域) をクリックします。たとえば、plotRand.m
の行番号 3 をクリックして、その行にブレークポイントを追加します。
ファイルを実行すると、MATLAB は、ブレークポイントによって示されたコード行で一時停止します。MATLAB で一時停止している行は、コードの実行を続行するまで実行されません。
たとえば、エディターで plotRand.m
ファイルを開いた状態で、[エディター] タブの [実行] ボタンをクリックします。MATLAB は plotRand.m
を 1 行目から実行し、3 行目を実行する前に一時停止します。
MATLAB が一時停止すると、複数の変化が発生します。
[エディター] タブまたは [ライブ エディター] タブの [実行] ボタンが [続行] ボタンに変わります。
コマンド ウィンドウのプロンプトが
K>>
に変わり、MATLAB がデバッグ モードであり、キーボードで制御できることを示します。MATLAB では、一時停止された行が緑色の矢印を使用して示され、緑色で強調表示されます。
ヒント
MATLAB の一時停止中にファイルを変更するのは避けることをお勧めします。MATLAB が一時停止している間に行った変更は、MATLAB がコードの実行を完了した後で再実行されるまで実行できません。
コードの実行を続行するには、 [続行] ボタンをクリックします。MATLAB は、ファイルの終わりかブレークポイントに達するまでファイルを実行し続けます。コードの実行を行単位で続行するには、[エディター] タブまたは [ライブ エディター] タブの [ステップ] をクリックします。MATLAB は現在一時停止している行を実行し、次の行で一時停止します。
さまざまなタイプのブレークポイントとその設定方法、クリア方法および無効化方法の詳細については、ブレークポイントを設定するを参照してください。
デバッグ セッションの終了
問題を特定した後、デバッグ セッションを終了するには、[エディター] タブまたは [ライブ エディター] タブに移動し、 [停止] をクリックします。デバッグを終了すると、K>>
プロンプトの代わりに通常のプロンプト >>
がコマンド ウィンドウに再表示されます。関数呼び出しスタックへはアクセスできなくなります。
混乱を避けるため、デバッグを完了したら、毎回必ずデバッグ セッションを終了してください。デバッグ中にファイルに変更を加えて保存すると、MATLAB はデバッグ セッションを終了します。MATLAB が一時停止しているときに応答しなくなる場合は、Ctrl + C キーを押してデバッグを終了します。
MATLAB Online における [デバッガー] パネルを使用したデバッグ
MATLAB Online™ では、[デバッガー] パネルを使用してブレークポイントを管理し、デバッグ中に関数呼び出しスタックをナビゲートできます。
既定では、MATLAB がデバッグ モードになると、[デバッガー] パネルが自動的に開きます。[デバッガー] パネルを手動で開くには、[エディター] タブまたは [ライブ エディター] タブに移動し、[解析] セクションで [デバッガー] をクリックします。あるいは、サイドバーの [パネルをさらに開く] ボタン () を使用してパネルを開くこともできます。既定では、[デバッガー] パネルはデスクトップの右側に開きます。[デバッガー] パネルを非表示にするには、サイドバーの [デバッガー] アイコン をクリックします。
パネルの [ブレークポイント] セクションには、すべての MATLAB コード ファイルのブレークポイントがリストされます。このセクションの最初の 4 つのブレークポイント [エラーで一時停止]、[警告で一時停止]、[NaN または Inf で一時停止] および [抑制されていない出力で一時停止] はエラー ブレークポイントです。これらのブレークポイントのいずれかを有効にすると、指定されたエラー条件が発生した場合に MATLAB は任意のファイルの任意の行で一時停止します。残りのブレークポイントはファイル別にグループ化されます。
リスト内のブレークポイントごとに、次のアクションを実行できます。
ブレークポイントを有効/無効にする — ブレークポイントを有効にするにはブレークポイントの横のチェック ボックスをオンにし、ブレークポイントを無効にするにはチェック ボックスをオフにします。
ブレークポイントをクリアする — ブレークポイントを選択し、[デバッガー] パネルの上部にある [クリア] ボタン をクリックしてブレークポイントをクリアします。すべてのブレークポイントをクリアするには、[クリア] ボタン の横にある をクリックし、[すべてのブレークポイントのクリア] を選択します。エラー ブレークポイントをクリアすることはできません。
ファイル内のブレークポイントに移動する — ブレークポイントの右側にあるハイパーリンク付きの行番号をクリックしてファイルを開き、ブレークポイントを含むコード行に移動します。
ブレークポイント条件を設定または変更する — ブレークポイントを右クリックし、[条件の設定/変更] を選択して、選択したブレークポイントの条件を入力または変更します。
ブレークポイントの詳細については、ブレークポイントを設定するを参照してください。
[関数呼び出しスタック] セクションには、現在の行で一時停止する前に MATLAB で実行された関数のリストが表示されます。関数は順序付けられて表示されます。MATLAB が一時停止された現在のスクリプトまたは関数がリストの一番上に表示され、最初に呼び出されたスクリプトまたは関数がリストの一番下に表示されます。関数呼び出しスタック内の各関数には、対応するワークスペースがあります。関数呼び出しスタック内の関数のワークスペースを表示するには、リストからその関数を選択します。関数呼び出しスタックの詳細については、関数呼び出しスタックを参照してください。
[デバッガー] パネルが自動的に開かないようにするには、[デバッガー] パネルの左上にある [デバッガーの構成] ボタンをクリックし、[[デバッガー] パネルを自動で開く] オプションをクリアします。あるいは、[基本設定] ウィンドウの [MATLAB] 、 [エディター/デバッガー] ページでこのオプションを無効にすることもできます。
キーボード ショートカットまたは関数を使用したデバッグ
ほとんどのデバッグ操作は、キーボード ショートカットを使用するか、コマンド ウィンドウで関数を使用して実行できます。次の表に、デバッグ操作と、それらを実行するために使用できる関連するキーボード ショートカットおよび関数を示します。
アクション | 説明 | キーボード ショートカット | 関数 |
---|---|---|---|
続行 | ファイルの終わりか別のブレークポイントに達するまでファイルの実行を続けます。 | F5 | |
ステップ | 現在のコード行を実行します。 | F10 (macOS システムでは Shift + Command + O) | |
ステップ イン | 現在のコード行を実行し、実行した行に別の関数の呼び出しが含まれている場合は、その関数に入りステップ実行します。 | F11 (macOS システムでは Shift + Command + I) |
|
ステップ アウト | ステップ インの後、呼び出された関数の残りを実行し、呼び出された関数を出てから一時停止します。 | Shift + F11 (macOS システムでは Shift + Command + U) |
|
停止 | デバッグ セッションを終了します。 | Shift + F5 | |
ブレークポイントの設定 | ブレークポイントが存在しない場合、現在の行にブレークポイントを設定します。 | F12 | |
ブレークポイントのクリア | 現在の行のブレークポイントをクリアします。 | F12 |