Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

MATLAB コード ファイルのデバッグ

R2021b 以降。MATLAB プログラムのデバッグ (R2021a) およびライブ エディターでのコードのデバッグ (R2021a) から置き換え。

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 の値を表示します。

Command window showing a call to the plotRand function followed by the resulting output, the value of r

ライブ エディターでは、MATLAB は r の値と 2 行目を表示します。

plotRand live script with the semicolon removed from the end of line two and the resulting output, the value of r, displayed on the right

[ここまで実行] ボタンを使用したデバッグ

1 つの変数の状態を表示する場合は、出力を表示すると便利です。ワークスペース内のすべての変数の状態を確認するには、コード ファイルを実行し、指定のコード行を実行する前に一時停止します。

コードを指定の行まで実行してから一時停止するには、行の左側にある [ここまで実行] ボタンをクリックします。選択した行に到達できない場合、MATLAB はファイルの終わりかブレークポイントに達するまで実行を続けます。

メモ

関数とクラスでは、 [ここまで実行] ボタンはデバッグ中にのみ使用できます。

たとえば、plotRand.m の 2 行目の左側にある [ここまで実行] ボタンをクリックします。MATLAB は plotRand.m を 1 行目から実行し、2 行目を実行する前に一時停止します。

plotRand script with the Run to Here button displayed in the left margin, next to the line number for line two

MATLAB が一時停止すると、複数の変化が発生します。

  • [エディター] タブまたは [ライブ エディター] タブの [実行] ボタンが [続行] ボタンに変わります。

  • コマンド ウィンドウのプロンプトが K>> に変わり、MATLAB がデバッグ モードであり、キーボードで制御できることを示します。

  • MATLAB では、一時停止された行が緑色の矢印を使用して示され、緑色で強調表示されます。

    plotRand script with a green arrow and green highlighting on line two, indicating that MATLAB is paused at line two

ヒント

MATLAB の一時停止中にファイルを変更するのは避けることをお勧めします。MATLAB が一時停止している間に行った変更は、MATLAB がコードの実行を完了した後で再実行されるまで実行できません。

MATLAB で一時停止している行は、コードの実行を続行するまで実行されません。コードの実行を続行するには、 [続行] ボタンをクリックします。MATLAB は、ファイルの終わりかブレークポイントに達するまでファイルを実行し続けます。次に実行を一時停止する箇所のコード行の左側にある ボタンをクリックすることもできます。

コードの実行を行単位で続行するには、[エディター] タブまたは [ライブ エディター] タブの [ステップ] をクリックします。MATLAB は現在一時停止している行を実行し、次の行で一時停止します。

plotRand script with a green arrow and green highlighting on line three, indicating that MATLAB is paused at line three

デバッグ中の変数値の表示

MATLAB が一時停止している間に変数の値を表示するには、変数にカーソルを合わせます。変数の現在の値がデータ ヒントに表示されます。データ ヒントはカーソルを移動するまで表示されます。データ ヒントを無効にするには、[ビュー] タブに移動して [データヒント] ボタンをクリックします。

plotRand script paused at line two with a data tip showing the value of the variable n

コマンド ウィンドウに変数名を入力して変数の値を表示することもできます。たとえば、変数 n の値を表示するには、n と入力して Enter キーを押します。コマンド ウィンドウに変数の名前とその値が表示されます。現在のワークスペースにあるすべての変数を表示するには、ワークスペース ブラウザーを使用します。

詳細については、デバッグ中の値の検査を参照してください。

実行中のファイルの一時停止

実行時間の長いコードを実行中に一時停止して進行状況をチェックし、予期したとおりに実行されていることを確認できます。実行中のコードを一時停止するには、[エディター] タブまたは [ライブ エディター] タブに移動して [一時停止] ボタンをクリックします。MATLAB は次の実行可能行で一時停止し、 [一時停止] ボタンが [続行] ボタンに変わります。コードの実行を続けるには、 [続行] ボタンをクリックします。

メモ

[一時停止] ボタンをクリックすると、自身のコードの外部から、MATLAB をファイル内で一時停止させることができます。

関数へのステップ イン

デバッグ時には、呼び出されたファイルにステップ インして、値を調べたい点で一時停止することができます。ファイルにステップ インするには、ステップ インする関数のすぐ左側にある [ステップ イン] ボタンをクリックします。MATLAB では、別の関数の呼び出しを含む行のみにこのボタンが表示されます。ステップ インの後、ファイル先頭の [ステップ アウト] ボタンをクリックして、呼び出された関数の残りを実行し、呼び出された関数を出てから一時停止します。

既定では、 [ステップ イン] ボタンはユーザー定義の関数とスクリプトについてのみ使用できます。このボタンを MathWorks® 関数に対してアクティブにするには、[ホーム] タブの [環境] セクションで [基本設定] をクリックします。その後、[MATLAB][エディター/デバッガー] を選択し、[デバッグ] セクションで [コンテキストの [ステップ イン] ボタンをユーザー定義関数にのみ表示] オプションをオフにします。

あるいは、[エディター] タブまたは [ライブ エディター] タブの [ステップ イン] ボタンまたは [ステップ アウト] ボタンを使用して、デバッグ中に関数へのステップ インとそこからのステップ アウトを実行できます。これらのボタンは、[コンテキストの [ステップ イン] ボタンをユーザー定義関数にのみ表示] の基本設定には従わず、常にユーザー定義の関数と MathWorks 関数でステップ インとステップ アウトを実行します。

関数呼び出しスタック

呼び出された関数またはファイルにステップ インすると、現在の行で一時停止する前に実行した関数のリストが MATLAB に表示されます。"関数呼び出しスタック" とも呼ばれるこのリストはファイルの先頭に表示され、関数が順番に並んでいます。最初に呼び出されたスクリプトまたは関数が左に、MATLAB によって一時停止された現在のスクリプトまたは関数が右に表示されます。

Function call stack for plotRand showing plotRand as the first called script and mean as the current function

関数呼び出しスタック内の各関数には、対応するワークスペースがあります。ワークスペースは、MATLAB 内で作成した変数、またはデータ ファイルや他のプログラムからインポートした変数を格納します。コマンド ウィンドウから代入される変数やスクリプトを使用して作成される変数は、ベース ワークスペースに属します。関数内に作成される変数は、それ自身の関数ワークスペースに属します。

現在のワークスペースの外にある変数の値を確認するには、別のワークスペースを選択します。詳細については、デバッグ中の値の検査を参照してください。

ブレークポイントを追加してコードを実行

コード実行のたびに一時停止するコード行がファイルに含まれている場合、それらの行にブレークポイントを追加します。ブレークポイントは、エディターおよびライブ エディター上で対話的に追加したり、コマンド ウィンドウで関数を使ってプログラムによって追加したり、またはその両方の方法で追加したりできます。

ブレークポイントには、標準、条件付き、エラーの 3 種類があります。エディターまたはライブ エディターで標準ブレークポイントを追加するには、ブレークポイントを設定する実行可能な行の左側にある、グレーの領域をクリックします。たとえば、plotRand.m の 3 行目の横にある領域をクリックして、その行にブレークポイントを追加します。

plotRand script with a red breakpoint at line three

ファイルを実行すると、MATLAB は、ブレークポイントによって示されたコード行で一時停止します。MATLAB で一時停止している行は、コードの実行を続行するまで実行されません。

たとえば、エディターで plotRand.m ファイルを開いた状態で、[エディター] タブの [実行] ボタンをクリックします。MATLAB は plotRand.m を 1 行目から実行し、3 行目を実行する前に一時停止します。

MATLAB が一時停止すると、複数の変化が発生します。

  • [エディター] タブまたは [ライブ エディター] タブの [実行] ボタンが [続行] ボタンに変わります。

  • コマンド ウィンドウのプロンプトが K>> に変わり、MATLAB がデバッグ モードであり、キーボードで制御できることを示します。

  • MATLAB では、一時停止された行が緑色の矢印を使用して示され、緑色で強調表示されます。

    plotRand script with a breakpoint at line three and a green arrow and green highlighting on line three, indicating that MATLAB is paused at line three

ヒント

MATLAB の一時停止中にファイルを変更するのは避けることをお勧めします。MATLAB が一時停止している間に行った変更は、MATLAB がコードの実行を完了した後で再実行されるまで実行できません。

コードの実行を続行するには、 [続行] ボタンをクリックします。MATLAB は、ファイルの終わりかブレークポイントに達するまでファイルを実行し続けます。コードの実行を行単位で続行するには、[エディター] タブまたは [ライブ エディター] タブの [ステップ] をクリックします。MATLAB は現在一時停止している行を実行し、次の行で一時停止します。

さまざまなタイプのブレークポイントとその設定方法、クリア方法および無効化方法の詳細については、ブレークポイントを設定するを参照してください。

デバッグ セッションの終了

問題を特定した後、デバッグ セッションを終了するには、[エディター] タブまたは [ライブ エディター] タブに移動し、 [停止] をクリックします。デバッグを終了すると、K>> プロンプトの代わりに通常のプロンプト >> がコマンド ウィンドウに再表示されます。関数呼び出しスタックへはアクセスできなくなります。

混乱を避けるため、デバッグを完了したら、毎回必ずデバッグ セッションを終了してください。デバッグ中にファイルに変更を加えて保存すると、MATLAB はデバッグ セッションを終了します。MATLAB が一時停止しているときに応答しなくなる場合は、Ctrl + C キーを押してデバッグを終了します。

キーボード ショートカットまたは関数を使用したデバッグ

ほとんどのデバッグ操作は、キーボード ショートカットを使用するか、コマンド ウィンドウで関数を使用して実行できます。次の表に、デバッグ操作と、それらを実行するために使用できる関連するキーボード ショートカットおよび関数を示します。

アクション説明キーボード ショートカット関数

続行

ファイルの終わりか別のブレークポイントに達するまでファイルの実行を続けます。

F5

dbcont

ステップ

現在のコード行を実行します。

F10

(macOS システムでは Shift + Command + O)

dbstep

ステップ イン

現在のコード行を実行し、実行した行に別の関数の呼び出しが含まれている場合は、その関数に入りステップ実行します。

F11

(macOS システムでは Shift + Command + I)

dbstep in

ステップ アウト

ステップ インの後、呼び出された関数の残りを実行し、呼び出された関数を出てから一時停止します。

Shift + F11

(macOS システムでは Shift + Command + U)

dbstep out

停止

デバッグ セッションを終了します。

Shift + F5

dbquit

ブレークポイントの設定

ブレークポイントが存在しない場合、現在の行にブレークポイントを設定します。

F12

dbstop

ブレークポイントのクリア

現在の行のブレークポイントをクリアします。

F12

dbclear

関連するトピック