【问题标题】:Is there a fast way to exit the debugger in MIT Scheme's REPL?MIT Scheme REPL 中是否有快速退出调试器的方法?
【发布时间】:2021-03-11 16:21:55
【问题描述】:

假设我尝试在 MIT Scheme 的 REPL 中使用未定义的变量:

1 ]=> blablabla

;Unbound variable: blablabla
;To continue, call RESTART with an option number:
; (RESTART 3) => Specify a value to use instead of blablabla.
; (RESTART 2) => Define blablabla to a given value.
; (RESTART 1) => Return to read-eval-print level 1.

2 error> 

这会自动将我带入调试器。要退出调试器,我必须输入(restart 1)。是否有另一种不涉及键入 11 个字符来退出调试器的替代方法?这三个选项都需要输入 11 个字符,这有点傻。

【问题讨论】:

  • 只要输入 ctrl+c ctrl+c
  • @ÓscarLópez 感谢您提供的信息。我正在使用 rlwrap (rlwrap mit-scheme) 运行 MIT Scheme。 rlwrap 以某种方式导致第二个 ctrl-c 被忽略。

标签: scheme mit-scheme rlwrap


【解决方案1】:

根据 Flux 的回答,按 CTRLC 两次将与 mit-scheme 一起使用,但当它在 rlwrap 内运行时不是 /p>

为了使rlwrapCTRLCCTRLG 更加“透明”

  • 使用-W (--polling) 选项:rlwrap -W 将使rlwrap 每 40 毫秒唤醒一次,以检查客户端是否已更改其终端设置(在您的情况下为 interrupt character)李>
  • 在您的.inputrc 中添加几行:
$if mit-scheme
  "\C-c" rlwrap-direct-keypress
  "\C-g" rlwrap-direct-keypress
$endif

这些行将告诉rlwrap(包装mit-scheme时)传递CTRLCCTRLG 即使在行编辑的中间。

通过这两个调整,我无法再区分 rlwrapped 和 unwrapped mit-scheme 之间的中断行为@

-W 需要 rlwrap >= 0.41,rlwrap-direct-keypress >= 0.43

如需更深入的解释为什么这有效(以及为什么选项和.inputrc 条目是必要的)请参阅 Github 上的this rlwrap issue

【讨论】:

  • 是否应将~/.inputrc 条目包含在$if mit-scheme ... $endif 中?
  • 错字:-w 应该是 -Wrlwrap -w 应该是 rlwrap -W
  • (我纠正了错别字,谢谢!!)。是的,最好将这些行括在$if..$endif 中,即使你不这样做可能会没事(因为终端会在rlwrap 之前捕获CTRL+C,并且很少使用CTRL+G。
  • 我注意到我什至不需要将那些 rlwrap-direct-keypress 行添加到 ~/.inputrcrlwrap -W mit-scheme 似乎单独解决了 Ctrl-c Ctrl-c 问题。这正常吗?
  • -W 是更重要的设置。如果没有rlwrap-direct-keypress,对我来说,有时 first CTRL+C 似乎会失灵。除此之外,-W 本身就可以。
【解决方案2】:

根据 MIT Scheme 用户手册中关于 interrupting the REPL 的部分:

  • C-c C-c
  • C-g

中止当前正在运行的任何 Scheme 评估并返回到顶级 REPL。如果没有运行评估,这相当于评估(cmdl-interrupt/abort-top-level)

所以有两种方法可以快速退出调试器:

  • CtrlcCtrlc — 不幸的是,这种方法在使用带有 rlwrap 的 MIT Scheme 时不合适(即rlwrap mit-scheme)。在调试器中时,rlwrap 会以某种方式导致第二个 Ctrlc 被忽略。

  • Ctrlg — 这与 rlwrap 配合得很好,并且需要的按键次数比上面的要少。

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多