GHCi - 第二次运行时跳过断点

时间:2012-01-29 18:39:04

标签: haskell ghci

我是Haskell的新手,我在调试时遇到了烦人的行为。

  1. 我使用:break
  2. 添加我的断点
  3. 我跑主
  4. 一切都很好
  5. 我输入:继续完成执行
  6. 当我重新运行main时,断点不再出现,但断点未被删除,因为:show breaks列出它。谁知道发生了什么?

    我在Ubuntu 11.10,64位上。我明天会在不同的环境中测试它。

    由于

2 个答案:

答案 0 :(得分:2)

在没有看到代码的情况下很难知道,但听起来很可能在第二次运行时断点从未到达,因为结果是由于懒惰的评估而缓存的。它可能是第一次THUNK(暂停评估),第二次它已被评估。

答案 1 :(得分:0)

为避免重新计算,常量应用程序表单将替换为其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