在基本的单线程程序中,当未处理错误情况时将调用调试器。但是,在多线程程序中,调试器将打印错误,但该程序将继续使用其他正在运行的线程。我希望能够在错误处中断/停止检查相关线程中的堆栈框架等。 SBCL手册讨论使用sb-ext:*invoke-debugger-hook*
。有人可以解释如何使用此方法,或者以其他方式解释如何有效地解决多线程代码中的运行时错误吗?
编辑:我看过Handling an exception in a thread上的另一篇相关文章,但是我遇到的问题有些不同。该程序实际上不会进入调试器,尽管它确实会打印出相关的错误消息,指出调试器在继续之前已被调用:
debugger invoked on a SB-INT:INVALID-ARRAY-INDEX-ERROR in thread
#<THREAD "lparallel" RUNNING {1006B183D3}>:
Invalid index -1 for (SIMPLE-VECTOR
0), should be a non-negative integer below 0.
(立即)中断后续处理的唯一方法是使用CTRL-C给出:
restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Return from SB-WIN32::SIGINT.
1: [ABORT ] Exit debugger, returning to top level.
然后继续处理,并且从这一点开始唯一可服务的继续是1 = ABORT(忽略0)。我正在寻找一种进入调试器的方法。