我目前正在使用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)
但这似乎非常不标准/不当行为,并且只适用于函数体由我创建的线程,我不确定这是否会在任何情况下阻止进入调试器。
是否有关于这个主题的一些指南/(非官方)标准?