Debugging 在GHCi调试器中中断并继续,而不使用断点

Debugging 在GHCi调试器中中断并继续,而不使用断点,debugging,haskell,ghc,ghci,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

在传统的命令式调试器(如
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]
>让main=findCureForCancer
>:set-fbreak on异常
>:跟踪干线
[转动拇指]
[为什么要花这么长时间?]
[可能出了什么问题,我最好看看它在做什么]
^猛烈抨击
_异常::e=GHC.exception.SomeException
GHC.IO.Exception.UserInterrupt
>:历史
...
[啊,看起来这只会花更长的时间]
>:继续
[程序应继续运行]

有没有可能在使用GHCi调试器拨弄了一点之后进入执行并继续执行?

我不是GHC专家,但我非常有信心,无论是稳定的GHC还是当前的GHC负责人都不支持这一点。这篇文章没有提到任何内容,我已经在sourcediv中确认没有未记录、注释或包含在
#if FALSE
中的内容。(如果您感兴趣,当前弹劾的GHCi命令定义为。)至少自2013年1月以来,网站上没有发布任何关于此的信息,也没有人提出或关闭有关此的错误(请参阅)


这听起来是一个很有用的功能,你会吗?

这不是问题的答案,但可能是你等待答案时的一种变通方法/有趣的消遣:另一种有趣的可能性(我需要多读一些书才能知道它是否也很有前途)将执行以下操作:设置信号处理,该信号处理将进入y/n提示符;如果
,继续程序;如果
y
,则引发异常。如果抛出异常,您将陷入调试器;然后,您可能可以后退一步,并从那里继续,在后退时选择
y
,然后(在调试器周围戳过之后)继续执行。有趣的是,这可能是因为信息论的非决定论。。。