【问题标题】:Is there a debugger "statement" for Haskell/GHCi/something else?Haskell/GHCi/其他东西有调试器“声明”吗?
【发布时间】:2014-05-10 08:30:33
【问题描述】:

背景

我正在学习 GHCi 的 :break 功能。 JS 有一个名为debugger; 的内置语句,如果正在进行调试,则它充当断点,否则不执行任何操作。

问题

Haskell/GHCi 有类似的语句/函数吗?

进一步说明

我正在考虑类似于Debug.Trace.trace :: String -> a -> a 的东西。

如果它在内部使用unsafePerformIO,或者依赖于 GHCi 特定的东西,因为它仅用于调试,那也没关系。

或者如果还没有任何东西,难道不能用:set -fbreak-on-exception 来实现这样的事情,并且有一个抛出异常并立即捕获它的函数吗? (这里可能还需要unsafePerformIO,以便函数可以放在纯代码中。)

【问题讨论】:

    标签: debugging haskell


    【解决方案1】:

    你不需要它。

    让你的代码干净比充满调试插入要好得多。

    使用 ghci 你可以在任何你想要的地方通过函数名或行号设置断点。来自 ghci :help

       :break [<mod>] <l> [<col>]  set a breakpoint at the specified location
       :break <name>               set a breakpoint on the specified function
    

    替代方案

    此外,您可以在基于项目的./.ghci 命令批处理文件中保留断点列表,在 ghci 启动时自动加载。

    【讨论】:

      【解决方案2】:

      如果你真的想要,你可以定义自己的身份函数

      debugger :: a -> a
      debugger x = x
      

      :break debugger 在 GHCi 中。

      【讨论】:

      • 这既不允许您访问调用函数的变量绑定,也不允许您退回到调用函数,除非您之前在那里创建了另一个断点。 Am I right?
      • @GabrielRiba :trace,:hist:back 似乎工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      相关资源
      最近更新 更多