Как выйти из отладчика LispWorks REPL, вернувшись на верхний уровень, набрав просто число, как SBCL? - PullRequest
0 голосов
/ 03 июля 2019

В настоящее время я использую LispWorks, и я хотел бы настроить REPL так, чтобы я мог выйти из отладчика, просто набрав число, соответствующее (abort) Return to top loop level 0, так же, как можно использовать SBCL.

Обычно, используя LispWorks, нужно набрать :c + [abort option number].

Посмотрите тривиальный пример, используя LispWorks:

CL-USER 1 > a

Error: The variable A is unbound.
  1 (continue) Try evaluating A again.
  2 Return the value of :A instead.
  3 Specify a value to use this time instead of evaluating A.
  4 Specify a value to set A to.
  5 (abort) Return to top loop level 0.

Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.

CL-USER 2 : 1 > :c 5

CL-USER 3 >

При использовании SBCL будет достаточно только числа:

* a

debugger invoked on a UNBOUND-VARIABLE in thread
#<THREAD "main thread" RUNNING {10012E0613}>:
  The variable A is unbound.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [CONTINUE   ] Retry using A.
  1: [USE-VALUE  ] Use specified value.
  2: [STORE-VALUE] Set specified value and use it.
  3: [ABORT      ] Exit debugger, returning to top level.

(SB-INT:SIMPLE-EVAL-IN-LEXENV A #<NULL-LEXENV>)
0] 3

*

В документации по командам отладчика REPL , по-видимому, нет такой возможности.

Если возможно, как можно выйти из отладчика LispWorks REPL, вернувшись на верхний уровень, набрав только число, напримерс SBCL?

Ответы [ 2 ]

3 голосов
/ 03 июля 2019

В принципе, вы не можете.Это также более согласованно:

* a

debugger invoked on a UNBOUND-VARIABLE in thread
#<THREAD "main thread" RUNNING {10005004F3}>:
  The variable A is unbound.

    Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

    restarts (invokable by number or by possibly-abbreviated name):
      0: [CONTINUE   ] Retry using A.
      1: [USE-VALUE  ] Use specified value.
      2: [STORE-VALUE] Set specified value and use it.
      3: [ABORT      ] Exit debugger, returning to top level.

    (SB-INT:SIMPLE-EVAL-IN-LEXENV A #<NULL-LEXENV>)
    0] 4

    4
    0] 3
    * 

В приведенном выше примере с SBCL числа 0 ... 3 выбирают эту опцию отладчика, а все остальные числа оценивают ... это немного странно.

LispWorks: простая отмена в отладчике

В LispWorks, если вы хотите использовать abort перезапуск, используйте :a:

CL-USER 1 > a

Error: The variable A is unbound.
  1 (continue) Try evaluating A again.
  2 Return the value of :A instead.
  3 Specify a value to use this time instead of evaluating A.
  4 Specify a value to set A to.
  5 (abort) Return to level 0.
  6 Return to top-level loop.
  7 Return from multiprocessing.

Type :b for backtrace or :c <option number> to proceed.
Type :bug-form "<subject>" for a bug report template or :? for other options.

CL-USER 2 : 1 > :a

CL-USER 3 > 

Естьтакже команда клавиатуры meta-shift-a в среде LispWorks для отмены в отладчике.Кроме того, перезагрузки доступны в меню и в контекстном меню, вызываемом правой кнопкой мыши.Также можно использовать значок прерывания в панели значков прослушивателя / отладчика /...

Преимущество: вам не нужно запоминать номер перезапуска, поскольку он может отличаться от ошибки к ошибке.

0 голосов
/ 03 июля 2019

То, что вы видите в REPL LispWorks при возникновении ошибки, генерируется функцией error , как это реализовано в Lispworks. Чтобы изменить способ обработки опций, вы должны будете изменить эту функцию, для чего у вас нет документации, поскольку она взаимодействует с REPL LispWorks определенным образом. Короче говоря, вы не можете. (Кстати, «c» в: c означает «продолжить».)

...