gpt4 book ai didi

haskell - Haskell 中的调试循环

转载 作者:行者123 更新时间:2023-12-02 16:14:04 24 4
gpt4 key购买 nike

假设我在 Haskell 中有以下代码:

x :: Int
y :: Int
z :: Int
x=y
y=z
z=x

当然,引用任何这些变量都会导致执行失败 <<loop>>如果使用 ghc,或者如果使用 ghci,则无限旋转。我正在研究一些代码,如果编码错误,这些代码很有可能出现循环 - 有没有办法调试 <<loop>> - 当堆栈爆炸时我可以检查堆栈以查看循环性吗?

最佳答案

我查看了the question @TheInternet 链接,第一个答案的建议是使用 -fbreak-on-exception -fbreak-on-error:trace还不错。不过,我想我应该提到我遇到的两个针对这个问题的小障碍:

  1. GHCi 制作<<loop>>异常(exception)情况,只有 native 编译的 GHC 才会这样做,并且 GHCi 调试器无法跟踪 native 编译的代码。

幸运的是,这个问题可以通过按 ^C 来解决。手动中断。

  • 尝试:trace然后^C手动代替确实提供了调试器 session ,但 GHCi 尚未插入任何断点,因此没有上下文可供调试!
  • 这也很容易修复:我只需将第一个方程更改为 x = id y 。这足以让 GHCi 插入断点。我怀疑这个问题是由于OP的代码周期仅包含微不足道的变量方程(引用 the GHC User's Guide :“单个变量通常不被视为断点位置(除非变量是函数定义、lambda 或大小写替代)"),并且它通常不会在“真实”代码中发生。

    关于haskell - Haskell 中的调试循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32940455/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com