私は現在、SBCL が提供するsb-thread APIで遊んでいます。開始されたスレッド内でエラーがスローされた場合にどうなるか、また、そのプロセスのみが影響を受け (そして停止し)、他のプロセスが影響を受けないようにする方法を考えています。メインスレッドがエラーをスローしなくても、デバッガーに入ります。
* (handler-case
(sb-thread:join-thread (sb-thread:make-thread #'(lambda()
(error 'simple-error))))
(sb-thread:join-thread-error (err)
(sb-thread:thread-error-thread err)
(FORMAT t "allemeineentchen~%")))
(A SIMPLE-ERROR was caught when trying to print *DEBUG-CONDITION* when entering
the debugger. Printing was aborted and the SIMPLE-ERROR was stored in
SB-DEBUG::*NESTED-DEBUG-CONDITION*.)
;after this sbcl just yields until str-c enters the debugger
私の提案は、各スレッド関数本体を an で始まるようにすること(handler-case (body) (error (err) err)
ですが、これは非常に非標準/不正行為のようであり、関数本体が私によって作成されたスレッドでのみ機能します。デバッガー。
このトピックに関するガイドライン/(非公式)標準はありますか?