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