debugging - 在 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 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/

相关文章:

python - 在 Python 解释器中调试代码

haskell ,GHC 8 : dynamically load/import module

haskell - ghc-7.10 : Non type-variable argument (Use FlexibleContexts to permit this)

raspberry-pi - 找不到交叉编译ghc curses

go - 用于运行Golang代码以进行调试和运行的文件路径

php - PHP解析/语法错误;以及如何解决它们

java - Eclipse 调试器到达断点但我无法移动它

haskell - Attoparsec:跳过括号中的术语?

haskell - Haskell 代数数据类型中的常量

algorithm - Haskell 中的无限/惰性水库采样