在不使用断点的情况下在GHCi调试器中中断并继续

时间:2013-09-18 15:16:31

标签: debugging haskell ghc ghci

在传统的命令式调试器中,例如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调试器进行一些操作后进入执行并仍然恢复执行?

1 个答案:

答案 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吗?