Debugging 有调试器吗;声明;为了Haskell/GHCi/其他什么? 背景
我正在学习GHCi的:中断功能。JS有一个名为Debugging 有调试器吗;声明;为了Haskell/GHCi/其他什么? 背景,debugging,haskell,Debugging,Haskell,我正在学习GHCi的:中断功能。JS有一个名为debugger的内置语句在调试过程中充当断点,否则不会执行任何操作 问题: Haskell/GHCi是否有类似的语句/函数 进一步说明 我在想一些类似于Debug.Trace.Trace::String->a->a的事情 如果它在内部使用unsafePerformIO,或者依赖于特定于GHCi的东西,这是可以的,因为它只用于调试 或者,如果还没有任何异常,那么使用:set-fbreak on exception并具有一个抛出异常并立即捕获它的函数,
debugger的内置语句代码>在调试过程中充当断点,否则不会执行任何操作
问题:
Haskell/GHCi是否有类似的语句/函数
进一步说明
我在想一些类似于Debug.Trace.Trace::String->a->a
的事情
如果它在内部使用unsafePerformIO
,或者依赖于特定于GHCi的东西,这是可以的,因为它只用于调试
或者,如果还没有任何异常,那么使用:set-fbreak on exception
并具有一个抛出异常并立即捕获它的函数,难道不能实现类似的功能吗?(unsafePerformIO
在这里也可能需要,这样函数就可以放在纯代码中。)您不需要它
干净的代码比充满调试插入要好得多
使用ghci,您可以根据函数名或行号在任何需要的地方设置断点。来自ghci:帮助
:break [<mod>] <l> [<col>] set a breakpoint at the specified location
:break <name> set a breakpoint on the specified function
:break[]在指定位置设置断点
:break在指定函数上设置断点
备选方案:
更重要的是,您可以在基于项目的命令批处理文件中保留断点列表,并在ghci启动时自动加载。如果确实需要,您可以定义自己的标识函数
debugger :: a -> a
debugger x = x
和:在GHCi中断开调试器
。这既不允许您访问调用函数的变量绑定,也不允许您返回调用函数,除非您以前在那里创建了另一个断点@Gabrieliba:trace
,:hist
和:back
似乎起作用了