20

在传统的命令式调试器中,例如gdb可以使用 中断程序执行SIGINT,检查程序状态,并最终恢复执行。

虽然 GHCi 允许在任意点中断程序执行-fbreak-on-exception,但尝试恢复执行:continue只会导致解释器继续执行异常处理程序并终止程序,

> let main = findCureForCancer
> :set -fbreak-on-exception
> :trace main
[twiddle thumbs]
[why is this taking so long?]
[maybe something is wrong, I better see what it's doing]
^CStopped at <exception thrown>
_exception :: e = GHC.Exception.SomeException
                    GHC.IO.Exception.UserInterrupt
> :hist
...
[ahh, looks like this will just take a bit longer]
> :continue
[program should keep running]

用 GHCi 调试器戳了一下之后,是否可以中断执行并仍然恢复执行?

4

1 回答 1

1

我不是 GHC 专家,但我非常有信心稳定的 GHC 和当前的 GHC HEAD 都不支持这一点。该手册没有提及它,我已经找到了当前的 HEAD以确保没有任何未记录、注释掉或包围在#if FALSE. (如果您有兴趣,当前实施的 GHCi 命令在/ghc/InteractiveUI.hs:136中定义。)至少自 2013 年 1 月以来,邮件列表上没有发布任何关于此的内容,也没有人提交或关闭关于它的错误(请参阅相关的错误跟踪器搜索)。

这听起来像是一个有用的功能——你会提出功能请求吗?

于 2013-10-25T19:01:17.560 回答