Haskell GHCi-在第二次运行时跳过断点
我是Haskell的新手,调试时会有令人讨厌的行为Haskell GHCi-在第二次运行时跳过断点,haskell,ghci,Haskell,Ghci,我是Haskell的新手,调试时会有令人讨厌的行为 我使用:break添加断点 我跑主干道 一切都好 I类型:继续完成执行 当我重新运行main时,断点不再命中,但断点没有被删除,因为:show breaks列出了它。有人知道发生了什么吗 我使用的是Ubuntu 11.10,64位。明天我将在不同的环境中测试它 谢谢如果看不到代码就很难知道,但是听起来很可能在第二次运行main时从未到达断点,因为由于延迟计算,结果被缓存了。第一次可能是THUNK(暂停评估),第二次可能已经评估。为避免重新计算,
谢谢如果看不到代码就很难知道,但是听起来很可能在第二次运行main时从未到达断点,因为由于延迟计算,结果被缓存了。第一次可能是THUNK(暂停评估),第二次可能已经评估。为避免重新计算,将常量申请表替换为其redex的间接指向 例如,“papperlap”右侧的以下代码段将替换为指向“4”的间接节点
bla x = x + 1
papperlap = bla 3
如果您在“bla”上设置断点并请求“papperlap”两次,您将看到“bla”只应用了一次。但如果您两次要求“bla 3”,我们也会停止两次:
*Main> :break bla
Breakpoint 0 activated at meerbla.hs:1:1-13
*Main> papperlap
Stopped at meerbla.hs:1:1-13
_result :: a = _
[meerbla.hs:1:1-13] *Main> :continue
4
*Main> papperlap
4
*Main> bla 3
Stopped at meerbla.hs:1:1-13
_result :: a = _
[meerbla.hs:1:1-13] *Main> :continue
4
*Main> bla 3
Stopped at meerbla.hs:1:1-13
_result :: a = _
[meerbla.hs:1:1-13] *Main> :continue
4
如果您发布正在使用的GHCi版本,这可能会有所帮助。如果不看到代码,很难知道,但是在main的第二次运行中,似乎从未达到断点,因为由于延迟计算,结果被缓存。第一次可能是THUNK(挂起的计算),第二次已经计算过。@danr,你说得对,所有输入都是常量,所以正如你所说的,在第一次运行后,所有内容都必须缓存。我可以重新加载模块,但不幸的是,它也删除了所有断点。写下答案,我会接受的。