【问题标题】:stepping through a function line by line逐行遍历函数
【发布时间】:2013-05-20 22:22:28
【问题描述】:

本用户指南:

http://www.haskell.org/ghc/docs/latest/html/users_guide/ghci-debugger.html

广告:

执行可以单步执行:求值者将暂停执行 大约在每次减少之后,允许局部变量 检查。这相当于在每个点设置一个断点 在程序中。

然而,我在文档中找不到任何内容告诉我如何做到这一点。在标题下:

2.5.2。单步法

它描述了如何从断点跳到断点。但我不想在每一行都设置断点。广告是假的还是有办法逐行执行程序?

谢谢。

【问题讨论】:

  • 这是一个术语问题。当您使用:step 时,调试器创建一个断点“大约在每次减少之后”。您不必在每一行都设置断点。

标签: debugging haskell ghci


【解决方案1】:

设置并到达断点后,您可以从调试器调用:step

还有其他单步可能性。在断点处键入一次 :help 会告诉你更多关于你可以做什么的信息。

【讨论】:

  • 好的,这是一种变通办法——但这不是宣传的内容。感谢收看。
【解决方案2】:

好的,我想通了:

ghci> :step function_name arg1 arg2
...
...
ghci> :step   
...
...
ghci> :step

如果您忘记了函数参数,那么您将收到神秘的错误消息:

<interactive>:138:1:
    No instance for (Show (String -> Double))
      arising from a use of `print'
    Possible fix:
      add an instance declaration for (Show (String -> Double))
    In a stmt of an interactive GHCi command: print it

...这可能会让你把头发扯掉。如果你想跳到最后:

ghci> :continue

【讨论】:

  • 不过,该错误消息实际上与步进无关。如果您在主提示符下向函数传递的参数太少,则会出现同样的错误。它告诉您它无法打印生成的部分应用函数。 (添加实例的建议是虚假的)。
  • “它告诉你它不能打印结果部分应用的函数。”是的,我想通了——但我花了一段时间。出于某种原因,我总是想输入 :step my_func 并省略 args。我在帖子中添加了该错误消息,以防其他人这样做。
猜你喜欢
  • 1970-01-01
  • 2016-04-15
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
相关资源
最近更新 更多