13.3 Breakpoints

Last-modified: 2025-03-22 (土) 22:12:00

13.3 ブレークポイント

dbstop関数を使用すると、任意の m ファイル関数にブレークポイントを設定できます 。

: dbstop fcn

: dbstop fcn line

: dbstop fcn line1 line2 …

: dbstop line1 …

: dbstop in fcn

: dbstop in fcn at line

: dbstop in fcn at line if "condition"

: dbstop in class at method

: dbstop if event

: dbstop if event ID

: dbstop (bp_struct)

: rline = dbstop …

組み込みデバッガーのブレークポイントを設定します。

fcn は現在の関数の名前ですpath。デバッグモードになっている場合は、fcn引数を省略して現在の関数を使用します。サブ関数のブレークポイントは、スコープ演算子 ' で設定されます。>たとえば、ファイル.mにサブ関数がある場合 fcn2、 のブレークポイントfcn2は で指定できます file>fcn2。

行は、改行する行番号です。行が指定されていない場合は、デフォルトでファイルの最初の実行可能行になります。 fcn.m1 つのコマンドで複数の行を指定できます。関数構文を使用する場合は、行を 1 つのベクトル引数 ( ) として渡すこともできます。 [line1, line2, …]

condition は、ブレークポイントに存在するコードコンテキストで評価できる任意の Octave 式です。ブレークポイントに到達すると、 conditionが評価され、 conditionが true の場合は実行が停止します。condition が評価できない場合(たとえば、未定義の変数を参照しているため)、エラーがスローされます。副作用のある式 (などy++ > 1) は変数を変更するため、通常は使用しないでください。引用符 ('「', ''')またはコメント文字('#', '%') は引用符で囲む必要があります。(これは、エディターのコンテキスト メニューから入力された条件には適用されません。) 例:

dbstop in axis at 246 if 'any (opt == "x")'

イベントを指定するフォームは、特定の関数と行番号で特定のブレークポイントを発生させません。代わりに、予期しないイベントが発生したときにデバッグモードに入ります。可能な値は次のとおりです。

error
エラーが報告されたら停止します。これは、 と debug_on_error (true)の両方を指定するのと同じですdebug_on_interrupt (true)。

caught error
try-catch ブロックによってエラーがキャッチされたら停止します (まだ実装されていません)。

interrupt
割り込み(Ctrl-C)が発生したら停止します。

naninf
コードが非有限値を返すときに停止します (まだ実装されていません)。

warning
警告が報告されたら停止します。これは を指定するのと同じです debug_on_warning (true)。

イベントerror、caught error、 のwarning後にはすべて、エラー ID または警告 ID を指定する文字列を続けることができます。その場合、指定された ID のエラーでのみ実行が停止します。ID セットの 1 つで停止するには、複数のdbstopコマンドを発行する必要があります。

dbclearブレークポイントとイベントは、同じ構文のコマンド を使用して削除できます。

コマンドを発行することで、すべてのブレークポイントを保存し、一度に復元することができますbp_state = dbstatus; …; dbstop (bp_state)。

オプションの出力rlineは、ブレークポイントが設定された実際の行番号です。行が実行可能でない場合は、指定された行と異なる場合があります。たとえば、空白行にブレークポイントを設定しようとすると、Octave は次の実行可能な行に実際のブレークポイントを設定します。

GUI 外でファイルが変更された場合など、ファイルが再解析されると、ファイル内のすべてのブレークポイントがクリアされます。

See also: dbclear, dbstatus, dbstep, debug_on_error, debug_on_warning, debug_on_interrupt.

クラス メソッド内のブレークポイントもサポートされています (例: dbstop ("@class/method"))。ただし、組み込み関数 (例:sinなど) や動的にロードされる関数 (つまり、oct ファイル) ではブレークポイントを設定できません。

関数に入った直後にブレークポイントを設定するには、行番号 1 を使用するか、行番号を完全に省略して関数名のみを指定します。ブレークポイントを設定すると、Octave は先頭のコメント ブロックを無視し、関数内の最初の実行可能ステートメントにブレークポイントが設定されます。例:

dbstop ("asind", 1)
⇒ 29

の戻り値は、29ブレークポイントが実質的に 29 行目に設定されたことを意味することに注意してください。関数内のブレークポイントのステータスは、dbstatusを使用して照会できます。

: dbstatus

: dbstatus fcn

: bp_list = dbstatus …

アクティブなブレークポイントの場所を報告します。

入力引数または出力引数なしで呼び出されると、ブレークポイントを持つすべての関数のリストと、それらのブレークポイントが設定されている行番号を出力します。

関数名fcnが指定されている場合は、指定された関数とそのサブ関数のブレークポイントのみが報告されます。

オプションの戻り引数bp_list は、次のフィールドを持つ構造体配列です。

name
ブレークポイントのある関数の名前。fcn2 例えば、mファイル内のサブ関数などファイル.mは、 として指定されますfile>fcn2。

file
関数コードが配置されている m ファイルの名前。

line
ブレークポイントのある行番号。

cond
ブレークポイントをアクティブにするために満たす必要がある条件、または無条件ブレークポイントの場合は空の文字列。

が true であっても、明示的な ID が指定されていない場合dbstop if error、戻り値には という空のフィールドが含まれます"errs"。ID が指定されている場合、errsフィールドには ID ごとに 1 行が含まれます。 dbstop if errorが false の場合、フィールドはありません"errs"。"warn"フィールドは によって同様に設定されますdbstop if warning。

See also: dbstop, dbclear, dbwhere, dblist, dbstack.

前の例を再利用すると、dbstatus ("asind")29 が返されます。リストされているブレークポイントは、dbclear関数を使用してクリアできます 。

: dbclear fcn

: dbclear fcn line

: dbclear fcn line1 line2 …

: dbclear line …

: dbclear all

: dbclear in fcn

: dbclear in fcn at line

: dbclear if event

: dbclear ("fcn")

: dbclear ("fcn", line)

: dbclear ("fcn", line1, line2, …)

: dbclear ("fcn", line1, …)

: dbclear (line, …)

: dbclear ("all")

関数fcnの行番号lineにあるブレークポイントを削除します。

引数は

fcn
関数名を文字列変数として指定します。デバッグ モードになっている場合は、この引数を省略でき、現在の関数が使用されます。

line
ブレークポイントを削除する行番号。複数の行を個別の引数またはベクトルとして指定できます。

event
error、、interruptなどのイベントwarning (dbstop詳細については を参照してください)。

行番号を指定せずに呼び出されると、指定された関数内のすべてのブレークポイントがクリアされます。

要求された行がブレークポイントでない場合、アクションは実行されません。

特別なキーワードは、"all"すべてのファイルからすべてのブレークポイントをクリアします。

See also: dbstop, dbstatus, dbwhere.

ブレークポイントはサブ関数内に設定することもできます。たとえば、ファイルに以下の関数が含まれている場合、

function y = func1 (x)
 y = func2 (x);
endfunction
function y = func2 (x)
 y = x + 1;
endfunction

ブレークポイントはサブ関数の先頭に直接設定できます。

dbstop func1>func2
⇒ 5

ご了承ください '>' は、サブ関数とそれを含む m ファイルを区別する文字です。

Octave スクリプトでブレークポイントを設定するもう 1 つの簡単な方法は、keyboard関数を使用することです。

: keyboard ()

: keyboard ("prompt")

m ファイルの実行を停止し、デバッグ モードに入ります。

関数が実行されるとkeyboard、Octave はプロンプトを出力し、ユーザの入力を待ちます。入力された文字列は評価され、結果が出力されます。これにより、関数内の変数の値を調べ、必要に応じて新しい値を割り当てることができます。プロンプトを終了して通常の実行に戻るには、次のように入力します。戻る' または 'dbcont'。keyboard関数は終了ステータスを返しません。

引数なしで呼び出された場合keyboard、デフォルトのプロンプト「デバッグ>' が使用されます。

See also: dbstop, dbcont, dbquit.

このkeyboard関数は、ユーザーが実行を停止したいスクリプトのポイントに配置されます。実行中のスクリプトは自動的にデバッグ モードに設定されます。