在多线程代码(SBCL)中有效使用调试器

时间:2019-04-16 20:47:10

标签: multithreading debugging common-lisp

在基本的单线程程序中,当未处理错误情况时将调用调试器。但是,在多线程程序中,调试器将打印错误,但该程序将继续使用其他正在运行的线程。我希望能够在错误处中断/停止检查相关线程中的堆栈框架等。 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)。我正在寻找一种进入调试器的方法。

0 个答案:

没有答案