Go to the first, previous, next, last section, table of contents.


Calc のデバッグ

Calc コマンドのデバッグを支援するコマンドがいくつかあります。 ユーザーが自身のコマンドを定義する種々の方法は、Programming 参照 。

Z T (calc-timing) コマンドは、 遅いコマンドのタイミングをトレイルに報告するモードを ON/OFF します。 2秒以上かかる Calc コマンドは何でも、何秒かかったかをトレイルに書込みます。 この値の精度はせいぜい 1秒以下です。

測定時間にはコマンド実行の全ての段階が含まれます。 特に、スタックやトレイルでの表示のために結果をフォーマットする 時間がカウントされます。 あるプロンプトは返事待ちにかかった時間も数えるし、そうでないのもあります。 これはコマンドの細かいインプリメンテーションに依存します。 この上手な使い方は、 もしプロンプトや複数のコマンドを含む計算手順の時間を測定するのなら、 その手順全体を一度に走らせるようにキーボードマクロを定義してください。 Calc の X コマンド (Programming with Keyboard Macros 参照 ) は マクロ全体を実行するのにかかった時間を報告するでしょう。

X コマンドのもうひとつの利点は、 その実行中にスタックやトレイルがいちいちステップ毎に更新されないということです。 もしテストする計算手順の出力のフォーマットに長時間を要するような可能性があり、 そのフォーマット時間を測定に入れたくなければ、 スタックから結果をクリアするために計算手順の最後は DEL キーストロークで 終わらせてください。 そうすれば X でその計算手順を走らせるとき、 Calc は大きな結果のフォーマットに煩わされることはないでしょう。

Z T がもう 1つやることは、 各コマンドの実行期間中に Emacs 変数 gc-cons-threshold を ずっと高い値 (2,000,000; Calc のデフォルトは 25,000)に増やすことです。 一般にこれは、コマンド実行中のガーベジコレクションを妨げます。 Emacs プロセスを異常に大きくさせるかもしれませんが。 (Emacs オペレーションの時間測定における外乱要素で大きいのが ガーベジコレクション時間です。)

Calc へのユーザー自身の Lisp 拡張をデバッグするとき、 有用なもう 1つのコマンドは M-x calc-pass-errors です。 これは "max-lisp-eval-depth exceeded" メッセージを、 もっと友好的な「計算が動かなくなったか、あるいはあまりにも長くなった」に変える エラーハンドラを禁止します。 このハンドラは Emacs Lisp デバッガの debug-on-error モードを妨害します。 エラーは本当の場所ではなくハンドラ内部で報告されます。 calc-pass-errors を実行した後、 Lisp エラーは正確に報告されるようになりますが、 ユーザフレンドリーなメッセージは出なくなります。


Go to the first, previous, next, last section, table of contents.     利用度数