デバッグの方法 †
SAD の現状ではデバッグの道具はあまり充実していません。原始的な方法としては
- TracePrint[式1] により、エラーの発生箇所を特定する。
- Print[式1] あるいは Print[Definition[式1]] などを要所要所に挿入する。
- On[General::newsym] により新しいシンボルの生成を検出する 。
- プログラムの最上位レヴェルにシンボル end を挿入する。
などが考えられます。
しばしば発生する誤りは
- 大文字と小文字の書き誤り。
- セミコロンの書き忘れ。
- セミコロンとカンマの書き誤り。
- 関数の引き数の型、個数の違い。
などです。関数の用法が未定義の場合、いくつかの関数はその呼ばれた式そのものを結果として返すだけでメッセージを発生しないことに注意する必要があります。
TracePrint †
- TracePrint[式1] は CompoundExpression (;) のそれぞれの式を、その実行の直前に端末に表示します。
Definition †
- Definition[シンボル1] はシンボル1 に割り当てられている定義式を返します。
Out、% †
- Out[n] は端末に Out[n] := ... と既に出力された、n 番目の評価結果を再評価して返します。
- % は最後の評価結果を返します。
- %n は Out[n] と同値です。
- 最後の評価結果の番号はシンボル $Lineに割り当てられています。この番号を自分でリセットすることもできますが、その場合、新しい $Line 以前の Out[n] の値は失われます。
- $Line は式の評価が完結する度に 1 ずつ増加します。式の評価結果が Null のときは $Line は更新しません。
シンボルend †
入力プログラムの最上位の式と式の切れ目にシンボル end を挿入しておくと、SAD はそこで実行を中断し、端末からの入力待ち状態になります。そこでシンボルの状態などを対話式に確認することができます。実行を再開するには in 77 と入力します。
MemoryCheck †
- MemoryCheck[] はその時点のメモリーの使用状況を返します。また、システムのバグのためにメモリーが破壊されているかどうかをチェックし、もし破壊されていればメッセージを出力します。
- もしメッセージが出力された場合は筆者までレポートをお願いします。
STACKSIZ †
- STACKSIZ は SADScript インタープリータの実行に必要なスタックの大きさを指定するシンボルです。
- 最初の FFS セッションが始まる前に STACKSIZ = n; と指定することにより、以後のスタックの大きさを変えることができます。デフォルトは STACKSIZ = 200000 です。
- FFS セッションが開始された後は STACKSIZ を変更しても効果はありません。
SADInspect †
Packages/SADInspect.sadを用いるとSymbol,Widgetの情報が簡単に見られます。