Previous: Keyword Commands, Up: Debugging   [Contents][Index]

38.3 Functions and Variables for Debugging

オプション変数: debugmode

デフォルト値: false

もしdebugmodetrueなら、 Maximaのエラーが起こった時Maximaはデバッガーを開始します。 ユーザーはコールバックを検査したり、ブレイクポイントを設定したり、Maximaコードをステップ実行したりなど コマンドを入力することができます。 デバッガーコマンドのリストに関しては、 debuggingを参照してください。

debugmodeをイネーブルにしても、Lispのエラーは捕らえられません。

オプション変数: refcheck

デフォルト値: false

refchecktrueの時、 Maximaは 計算の中で、バイドされた変数が最初に使われる度にメッセージを印字します。

オプション変数: setcheck

デフォルト値: false

もしsetcheckが(添字付きでもよい)変数のリストに設定されているなら、 Maximaは 変数またはそれらの添字付き出現が通常の割り当て演算子:::割り当て演算子、 または関数引数バインドでバインドされた時 (しかし関数割り当て:=やマクロ割り当て::=演算子でバインドされた時以外) はいつでも、 メッセージを印字します。 メッセージは変数名とバインドされた値から構成されます。

setcheckは、 allまたはtrueに設定することができ、 それによって、すべての変数を含みます。

setcheckの新しい要素のそれぞれは、 チェックする変数の新しいリストを確立し、 以前setcheckに割り当てられたいかなる変数も忘れられます。

もし自身以外の何かに評価されるなら、 setcheckに割り当てられた名前はクォートしなければいけません。 例えば、もしx, y, zが既にバインドされているなら、 チェックする変数のリストに置くには、

setcheck: ['x, 'y, 'z]$

をタイプしてください。

setcheckリスト上の変数が、例えば、X: 'Xのように、 それ自身に割り当てられた時は、なにも印字されません。

オプション変数: setcheckbreak

デフォルト値: false

setcheckbreaktrueの時、 setcheckリスト上の変数が新しい値を割り当てられた時はいつでも Maximaはブレイクプロンプトを出します。 ブレイクは、割り当てが実行される前に起こります。 この時点で、setvalが変数が割り当てられようとしている値を保持します。 ゆえに、 setvalに割り当てることで、違う値を割り当てることができます。

setchecksetvalも参照してください。

システム変数: setval

setcheckbreakが起こった時、変数が設定されようとしている値を保持します。 ゆえに、 setvalに割り当てることで、違う値を割り当てることができます。

setchecksetcheckbreakも参照してください。

関数: timer (f_1, …, f_n)
関数: timer (all)
関数: timer ()

timerは、 タイミング統計が収集される関数のリストに与えられた関数f_1, …, f_n それぞれを入れます。 timer(f)$ timer(g)$は、リストにfを入れ、その後gを入れます; リストはあるコールから次へ累積されます。

timer(all)は、計測される関数のリストに (グローバル変数functionsで指名されたように) ユーザー定義関数すべてを入れます。

引数なしでは、 timerは計測される関数のリストを返します。

Maximaは、計測される関数のリストに関して、 関数それぞれを実行するのに費やされる時間を記録します。 timer_infoは、タイミング統計を返します。 関数コール毎に経過した平均時間、コール回数、総経過時間を含みます。 untimerは、計測される関数のリストから関数を削除します。

timerは引数をクォートします。 f(x) := x^2$ g:f$ timer(g)$は、fをタイマーリストに入れません。

もしtrace(f)が有効なら、timer(f)は有効ではないです; tracetimerが同時に有効にはできません。

timer_devalueも参照してください。

関数: untimer (f_1, …, f_n)
関数: untimer ()

untimerはタイマーリストから 与えられた関数f_1, …, f_nそれぞれを削除します。

引数なしの時、 untimerは、現在、タイマーリスト上の関数すべてを削除します。

untimer (f)が実行された後、 timer_info() (引数なし)は、 現在タイマーリスト上にない関数についての情報を返しませんけれども、 timer_info (f)は、まだ以前に集計されたタイミング統計を返します。 timer (f)は、 タイミング統計すべてをゼロに再設定し、 fをタイマーリストに再び入れます。

オプション変数: timer_devalue

デフォルト値: false

timer_devaluetrueの時、 Maximaは、計られる関数から 他の計測される関数で費やされた時間を引きます。 そうでなければ、関数それぞれについて報告された時間は、 他の関数で計測される時間を含みます。 計測されない関数で費やされた時間は、総時間から引かれないことに注意してください。

timertimer_infoも参照してください。

関数: timer_info (f_1, ..., f_n)
関数: timer_info ()

与えられた関数f_1, ..., f_n, timer_infoは、 関数それぞれのタイミング情報を含む 行列を返します。 引数なしでは、 timer_infoは、 現在タイマーリスト上の関数すべてについての タイミング情報を返します。 The matrix returned by timer_infoが返す行列は、関数名、 関数コール毎の時間、関数コールの回数、総時間、 gctime を含みます。 gctimeは、元のMacymaの「ガーベッジコレクション時間」を意味しましたが、 今はいつもゼロです。

timer_infoが戻り値を構成するデータは、 get関数によっても得られることができます:

get(f, 'calls);  get(f, 'runtime);  get(f, 'gctime);

timerも参照してください。

関数: trace (f_1, …, f_n)
関数: trace (all)
関数: trace ()

関数 f_1, …, f_nが与えられたとして、 traceは、Maximaに、 それらの関数がコールされたときはいつでも デバッグ情報を印字するよう指示します。 trace(f)$ trace(g)$は、トレースする関数のリストに fを、それからgを入れます; リストは1回のコールから次へ累積します。

trace(all)は、(グローバル変数functionsで指名されたように) ユーザー定義関数すべてをトレースする関数のリストに入れます。

引数なしでは、 traceは、現在とレースする関数すべてのリストを返します。

untrace関数はトレースをディセーブルします。 trace_optionsも参照してください。

traceは引数をクォートします。 例えば、 f(x) := x^2$ g:f$ trace(g)$は、 fをトレースリストに入れません。

関数が再定義された時、 タイマーリストから削除されます。 例えば、 timer(f)$ f(x) := x^2$の後、 関数fはもはやタイマーリストにありません。

もしtimer (f)が有効なら、 trace (f)は有効ではありません; tracetimerは、同じ関数で同時には有効にできません。

関数: trace_options (f, option_1, …, option_n)
関数: trace_options (f)

関数fについてトレースオプションを設定します。 いかなる以前のオプションも破棄されます。 trace_options (f, ...)は、 もし(trace_optionsの前でも後でも). trace (f)もコールされないなら、 有効になりません。

trace_options (f)は、 オプションすべてをデフォルト値に再設定します。

オプションキーワードは以下の通りです:

トレースオプションは、2つの形式で指定されます。 オプションキーワード単体の存在は、 オプションを無条件に実行します。 (foo: trueか似た形式を指定することでは、 オプションfooは実行されないことに注意してください; キーワードはクォートする必要はないことにも注意してください。) オプションキーワードを述語論理関数で指定することは、 オプションを述語論理上の条件付きにします。

述語論理関数の引数リストは、いつも [level, direction, function, item]です。 ここで、levelは関数の再帰レベルで、 directionenterexitfunctionは、 関数名、 name of the function, and itemは(入るときの)引数リストか(出るときの)戻り値です。

以下は無条件とレースオプションの例です:

(%i1) ff(n) := if equal(n, 0) then 1 else n * ff(n - 1)$

(%i2) trace (ff)$

(%i3) trace_options (ff, lisp_print, break)$

(%i4) ff(3);

以下は述語論理上の条件のbreakオプションを持つ同じ関数です:

(%i5) trace_options (ff, break(pp))$

(%i6) pp (level, direction, function, item) := block (print (item),
    return (function = 'ff and level = 3 and direction = exit))$

(%i7) ff(6);
関数: untrace (f_1, …, f_n)
関数: untrace ()

untraceは、 与えられた関数f_1, …, f_nについて、 trace関数でイネーブルされたトレースをディセーブルします。 引数なしでは、untraceは関数すべてのトレースをディセーブルします。

untraceはトレースをディセーブルした関数のリストを返します。


Previous: Keyword Commands, Up: Debugging   [Contents][Index]