在传统的命令式调试器中,例如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调试器进行一些操作后进入执行并仍然恢复执行?
答案 0 :(得分:1)
我不是GHC专家,但我非常有信心既不稳定的GHC也不是现在的GHC HEAD支持这一点。 manual没有提到任何相关信息,我已经来源the current HEAD以确保没有任何未记录,注释或被#if FALSE
包围的内容。 (如果您感兴趣,目前已经完成的GHCi命令是在/ghc/InteractiveUI.hs:136定义的。)至少从2013年1月起,mailing list上没有发布任何内容,没有人提交或关闭关于它的错误(参见relevant bug tracker search)。
这听起来像是一个有用的功能 - 你会file a feature request吗?