在诸如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中的内容。 (如果您有兴趣,则在/ghc/InteractiveUI.hs:136上定义了当前受阻碍的GHCi命令。)至少从2013年1月以来,就没有对此事发表在mailing list上,也没有人提交或关闭有关此问题的错误(请参阅relevant bug tracker search)。 。

听起来这将是一个有用的功能–您file a feature request吗?

关于debugging - 在不使用断点的情况下在GHCi调试器中中断并继续,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18876128/

10-14 22:20