私は現在 Common Lisp を学ぼうとしており、sbcl を使用しています (これが適切な実装の選択であることを願っています)。
ruby と irb から来た私は、現時点では、間違いごとにデバッガーに自動的に移動するのが少し面倒だと思います。遊んでいるときに一時的にオフにする方法はありますか?
私は現在 Common Lisp を学ぼうとしており、sbcl を使用しています (これが適切な実装の選択であることを願っています)。
ruby と irb から来た私は、現時点では、間違いごとにデバッガーに自動的に移動するのが少し面倒だと思います。遊んでいるときに一時的にオフにする方法はありますか?
CommonLispには変数*debugger-hook*があり、これを関数にバインド/設定できます。
* (aref "123" 10)
debugger invoked on a SB-INT:INVALID-ARRAY-INDEX-ERROR:
Index 10 out of bounds for (SIMPLE-ARRAY CHARACTER
(3)), should be nonnegative and <3.
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
(SB-INT:INVALID-ARRAY-INDEX-ERROR "123" 10 3 NIL)
0] 0
* (defun debug-ignore (c h) (declare (ignore h)) (print c) (abort))
DEBUG-IGNORE
* (setf *debugger-hook* #'debug-ignore)
#<FUNCTION DEBUG-IGNORE>
* (aref "123" 10)
#<SB-INT:INVALID-ARRAY-INDEX-ERROR {1002A661D1}>
*
--disable-debugger
コマンドラインオプションがあります。たとえば、次のとおりです。
$ sbcl --disable-debugger
マニュアルページから:
デフォルトでは、SBCL がエラーに遭遇すると、ビルトイン デバッガーに入り、インタラクティブな診断と介入が可能になります。このオプションはデバッガーを無効にし、エラーがバックトレースを出力し、代わりにステータス 1 で終了します。これは、バッチ処理により適した操作モードです。詳細については、SB-EXT:DISABLE-DEBUGGER のユーザー マニュアルを参照してください。
便利な CL オプションも--noinform
あります。--noprint