ブレークポイントを設定する
R2021b 以降。ブレークポイントを設定する (R2021a) およびライブ エディターでのコードのデバッグ (R2021a) から置き換え。
ブレークポイントを設定すると MATLAB® プログラムの実行が一時停止し、問題が発生していると思われる箇所の値を調べることができます。ブレークポイントは、エディターまたはライブ エディターで対話的に設定したり、コマンド ウィンドウで関数を使用したりして設定できます。
3 種類のブレークポイントがあります。
標準
条件付き
エラー
ブレークポイントは、現在のフォルダーまたは検索パス上のフォルダーに保存したファイルの実行可能な行にのみ設定することができます。ブレークポイントは、MATLAB がアイドル状態でも、ファイル実行中のビジー状態でも、いつでも設定できます。
既定では、MATLAB はブレークポイントに到達すると、そのブレークポイントが含まれているファイルを開きます。このオプションを無効にするには、次のようにします。
[ホーム] タブの [環境] セクションで [基本設定] をクリックします。
[基本設定] ウィンドウで [MATLAB] 、 [エディター/デバッガー] を選択します。
[MATLAB がブレークポイントに達したらファイルを自動的に開く] オプションをオフにして、[OK] をクリックします。
標準ブレークポイント
標準ブレークポイントでは、ファイルの特定の行で一時停止します。標準ブレークポイントを設定するには、ブレークポイントを設定する実行可能な行の左側にある、グレーの領域をクリックします。あるいは、F12 キーを押すと現在の行にブレークポイントを設定できます。コメント行や空行などの実行可能ではない行にブレークポイントを設定しようとすると、MATLAB によって次の実行可能な行にブレークポイントが設定されます。
標準ブレークポイントをプログラムによって設定するには、関数 dbstop
を使用します。たとえば、plotRand.m
という名前のファイル内の 3 行目にブレークポイントを追加するには、以下を入力します。
dbstop in plotRand at 3
ループを含むファイルをデバッグする場合は、ブレークポイントをループ内に設定して、ループの各インクリメントの値を調べます。一方で、ループの開始点にブレークポイントを設定すると、MATLAB はループ ステートメントで 1 回のみ一時停止します。たとえば、次のコードは 10 個の 1 で構成された配列を作成し、for
ループを使用してその配列の項目 2 ~ 6 で計算を実行します。
x = ones(1:10); for n = 2:6 x(n) = 2 * x(n-1); end
for
ループの各インクリメント (合計 5 回) で一時停止するには、ブレークポイントを 4 行目に設定します。条件付きブレークポイント
条件付きブレークポイントでは、指定された条件が満たされたときのみファイル内の特定の行で MATLAB が一時停止します。たとえば、条件付きブレークポイントは、ループ内で数回の反復が行われた後の結果を確認する場合に使用できます。
条件付きブレークポイントを設定するには、ブレークポイントを設定する実行可能な行の左側にあるグレーの領域を右クリックし、[条件付きブレークポイントの設定] を選択します。その行にブレークポイントが既に存在する場合は、[条件の設定/変更] を選択します。開いたダイアログ ボックスで、条件を入力して [OK] をクリックします。条件は、logical スカラー値を返す任意の有効な MATLAB 式です。
コードを実行すると、MATLAB は行を実行する前に条件を評価します。条件が満たされる場合に MATLAB はデバッグ モードになり、その行で一時停止します。たとえば、次のコードは 10 個の 1 で構成された配列を作成し、for
ループを使用してその配列の項目 2 ~ 6 で計算を実行します。
x = one(1:10) for n = 2:6 x(n) = 2 * x(n-1); end
条件 n >= 4
を使用して、条件付きブレークポイントを 4 行目に設定します。コードを実行すると、n
が 4
のときに MATLAB は for
ループを 2 回実行し、3 回目の反復時に 4 行目で停止します。コードの実行を続けると、n
が 5
のときに MATLAB は 4 回目の反復時に 4 行目で停止し、n
が 6
のときにもう一度停止します。
条件付きブレークポイントは、関数 dbstop
を使用してプログラムにより設定することもできます。たとえば、myprogram.m
の 6 行目に条件付きブレークポイントを追加するには、以下を入力します。
dbstop in myprogram at 6 if n>=4
エラー ブレークポイント
エディターでエラー ブレークポイントを設定すると、MATLAB で問題が発生した場合に MATLAB が一時停止してデバッグ モードになります。エラー ブレークポイントの設定はライブ エディターではサポートされていません。
標準ブレークポイントや条件付きブレークポイントとは異なり、エラー ブレークポイントは特定の行または特定のファイルには設定しません。エラー ブレークポイントを設定すると、指定されたエラー条件が発生した場合に MATLAB は任意のファイルの任意の行で一時停止します。次に、MATLAB はデバッグ モードに入り、エラーを含むファイルを、エラーを含む行に実行矢印を表示して開きます。
エラー ブレークポイントを設定するには、[エディター] タブの [実行] をクリックし、以下のオプションから選択します。
[エラーで一時停止] を選択すると、すべてのエラーで一時停止します。
[警告で一時停止] を選択すると、すべての警告で一時停止します。
[NaN または Inf で一時停止] を選択すると、
NaN
(非数) またはInf
(無限大) の値で一時停止します。
あるいは、関数 dbstop
を特定の condition
と共に使用することで、プログラム的にエラー ブレークポイントを設定できます。たとえば、すべてのエラーで一時停止するには、次のように入力します。
dbstop if error
MATLAB:ls:InputsMustBeStrings
である try/catch
ブロックの try
部分の最初の実行時エラーで実行を停止するには、次のように入力します。dbstop if caught error MATLAB:ls:InputsMustBeStrings
無名関数のブレークポイント
無名関数を含む MATLAB コードの行には、複数のブレークポイントを設定できます。ブレークポイントは、その行自体と、行内の各無名関数に設定することができます。
無名関数を含む行にブレークポイントを設定するには、その行の左側にあるグレーの領域をクリックします。MATLAB はその行にブレークポイントを追加し、行内の各無名関数には無効化されたブレークポイントを追加します。無名関数のブレークポイントを有効にするには、その関数の無効化されたブレークポイントをクリックします。
行にあるすべてのブレークポイントの情報を表示するには、ブレークポイント アイコンにカーソルを合わせます。ツールヒントに利用可能な情報が表示されます。次のコード例では、7 行目に無名関数が 2 つあり、それぞれにブレークポイントがあります。
無名関数にブレークポイントを設定すると、MATLAB は無名関数が呼び出されるときに一時停止します。緑で強調表示された行が、コードで無名関数が定義される場所です。グレーで強調表示された行が、コードで無名関数が呼び出される場所です。たとえば次のコードでは、MATLAB は、7 行目で定義され 8 行目で呼び出される無名関数 g
に設定されたブレークポイントでプログラムを一時停止します。
無効なブレークポイント
濃いグレーのブレークポイントは無効なブレークポイントを意味します。
ブレークポイントは以下の理由で無効になります。
変更内容がファイルに保存されていない。ブレークポイントを有効にするには、ファイルを保存します。グレーのブレークポイントは赤になり、有効になったことを示します。
ファイル内に構文エラーがある。ブレークポイントを設定すると、構文エラーが生じた場所を示すエラー メッセージが表示されます。ブレークポイントを有効にするには、構文エラーを修正してファイルを保存します。
ブレークポイントの無効化
選択したブレークポイントを無効化すると、プログラムがそれらのブレークポイントを一時的に無視し、中断せずに実行できるようになります。たとえば、問題が特定されて修正されたと考えた後や、条件付きブレークポイントの使用時に、ブレークポイントを無効化することがあります。
ブレークポイントを無効にするには、ブレークポイント アイコンを右クリックし、コンテキスト メニューから [ブレークポイントを無効にする] を選択します。
ブレークポイントが薄いグレーになり、無効であることが示されます。
ブレークポイントを再び有効にするには、ブレークポイント アイコンを右クリックし、コンテキスト メニューから [ブレークポイントを有効にする] を選択します。
グレーのブレークポイントは赤になり、プログラムの実行がこの行で一時停止します。
ファイル内のすべてのブレークポイントを有効または無効にするには、実行可能な行の左側にあるグレーの領域を右クリックし、[ファイル内のすべてのブレークポイントを有効にする] または [ファイル内のすべてのブレークポイントを無効にする] を選択します。これらのオプションは、有効または無効にするブレークポイントが少なくとも 1 つ存在する場合のみ利用できます。
ブレークポイントのクリア
すべてのブレークポイントは、手動でクリア (削除) するか、MATLAB セッションの終了時に自動的にクリアされるまでファイル内に残ります。
ブレークポイントをクリアするには、ブレークポイント アイコンを右クリックし、コンテキスト メニューから [ブレークポイントのクリア] を選択します。あるいは、F12 キーを押すとブレークポイントをクリアできます。
ブレークポイントをプログラムによってクリアするには、関数 dbclear
を使用します。たとえば、myprogram.m
というファイルの 6 行目のブレークポイントをクリアするには、以下を入力します。
dbclear in myprogram at 6
ファイル内のすべてのブレークポイントをクリアするには、ブレークポイント アレーを右クリックし、[ファイル内のすべてのブレークポイントのクリア] を選択します。dbclear
all
コマンドを使うこともできます。たとえば、myprogram.m
というファイルのすべてのブレークポイントをクリアするには、以下を入力します。
dbclear all in myprogram
"すべての" ファイルからすべてのブレークポイント (エラー ブレークポイントを含む) をクリアするには、ブレークポイント アレーを右クリックし、[すべてのブレークポイントのクリア] を選択します。dbclear all
コマンドを使うこともできます。
ブレークポイントは、MATLAB セッションを終了すると自動的にクリアされます。今後のセッションのためにブレークポイントを保存するには、関数 dbstatus
を使用します。