2017-01-06 4 views
1

Один из моих потоков вошел в отладчик. Я хочу переключиться на него, ожидать, что stacktrace, выбрать перезапуск и т. Д. Как я могу это сделать?Обработка исключения в потоке

Я использую bordeaux-threads.

+1

Если вы используете SLIME, он должен работать автоматически. В противном случае это зависит от вашей реализации. В SBCL '(SB-THREAD: RELEASE-FOREGROUND)' должен позволить другому потоку использовать терминал. – jkiiski

+0

'(SB-THREAD: RELEASE-FOREGROUND)' работал красиво. Я полагаю, что «бордо-нити» не имеют портативного способа сделать это. Вы можете отправить свой комментарий в качестве ответа. – tsikov

ответ

4

Если вы используете SLIME, он должен работать автоматически. В противном случае это зависит от вашей реализации. В SBCL (SB-THREAD:RELEASE-FOREGROUND) должен использовать другой поток, используя терминал.

SBCL manual, 12.8 Sessions/Debugging

В пределах одной сессии, темы арбитража между собой за внимание пользователя. Нить может находиться в одном из трех условных состояний: переднем плане, фону или остановлена. Когда фоновый процесс пытается распечатать приглашение на замену или ввести отладчик, он остановится и распечатает сообщение о том, что оно остановлено. Пользователь в свободное время может переключиться на эту тему, чтобы узнать, что ей нужно. Если фоновый поток входит в отладчик, выбор любого перезапуска вернет его обратно в фоновый режим до его возобновления. Арбитраж для входного потока управляется вызовами sb-thread: get-foreground (который может блокироваться) и sb-thread: release-foreground.