在传统的命令式调试器中,例如 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 调试器戳了一下之后,是否可以中断执行并仍然恢复执行?
最佳答案
我不是 GHC 专家,但我非常有信心稳定的 GHC 和当前的 GHC HEAD 都不支持这一点。 manual没有提及它,我已经找到了 the current HEAD确保 #if FALSE
中没有任何未记录、注释掉或包围的内容. (如果您有兴趣,当前执行的 GHCi 命令在 /ghc/InteractiveUI.hs:136 中定义。)mailing list 上没有发布任何内容。关于这一点,至少从 2013 年 1 月开始,没有人提交或关闭有关它的错误(参见 relevant bug tracker search)。
这听起来像是一个有用的功能——你会file a feature request吗? ?
关于debugging - 在 GHCi 调试器中中断并继续,而不使用断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18876128/