Controls blocking of multiprocessing in the terminal debugger.
dbg
t
When the debugger is entered on the terminal, multiprocessing is blocked if the value of the variable *terminal-debugger-block-multiprocessing*
is t
. This is the default value.
If you set this variable to nil
then other processes, including timers, will continue to run in parallel to the process that entered the terminal debugger (as they did before the debugger was entered). Beware that this will make it more difficult to debug multi-process activities.
The other allowed value is :maybe
. This means that multiprocessing is blocked in the terminal debugger unless the debugger was entered from the CAPI environment.
The value of *terminal-debugger-block-multiprocessing*
affects the behavior of a REPL started by start-tty-listener.
This listener session illustrates the effect of *terminal-debugger-block-multiprocessing*
.
Firstly we see the default behavior whereby a call to print in another process is blocked by the debugger.
CL-USER 1 > dbg:*terminal-debugger-block-multiprocessing* T CL-USER 2 > unbound Error: The variable UNBOUND is unbound. 1 (continue) Try evaluating UNBOUND again. 2 Specify a value to use this time instead of evaluating UNBOUND. 3 Specify a value to set UNBOUND to. 4 (abort) Return to level 0. 5 Return to top-level loop. 6 Return from multiprocessing. Type :b for backtrace, :c <option number> to proceed, or :? for other options CL-USER 3 : 1 > (setq *timer* (mp:make-timer 'print 10)) Warning: Setting unbound variable *TIMER* #<Time Event : PRINT> CL-USER 4 : 1 > (mp:schedule-timer-relative *timer* 1) #<Time Event : PRINT> CL-USER 5 : 1 > :a
On leaving the debugger the output 10
from the call to print appears. Then we set *terminal-debugger-block-multiprocessing*
to nil
and repeat the commands:
CL-USER 6 > 10 (setf dbg:*terminal-debugger-block-multiprocessing* nil) NIL CL-USER 7 > unbound Error: The variable UNBOUND is unbound. 1 (continue) Try evaluating UNBOUND again. 2 Specify a value to use this time instead of evaluating UNBOUND. 3 Specify a value to set UNBOUND to. 4 (abort) Return to level 0. 5 Return to top-level loop. 6 Return from multiprocessing. Type :b for backtrace, :c <option number> to proceed, or :? for other options CL-USER 8 : 1 > (setq *timer* (mp:make-timer 'print 10)) #<Time Event : PRINT> CL-USER 9 : 1 > (mp:schedule-timer-relative *timer* 1) #<Time Event : PRINT> CL-USER 10 : 1 > 10
Notice above that the output 10
from the call to print appears after 1 second, in the debugger. Multiprocessing was not blocked.
LispWorks® User Guide and Reference Manual - 01 Dec 2021 19:30:32