问题描述
使用 ghci,如果我有类似的东西
1 g x y =
2 let -- ...
3 in -- ... (recursively calls itself)
3
4
5 f x = -- ... (calls g once)
我可以使用 :break g
在 g 处设置断点,调用 f,并在每次 g 被调用时让程序中断。
但是,我没有在其他任何地方使用 g,所以我想写
1 f x =
2 let g x' y =
3 let -- ...
4 in -- ...
5 in -- ...
有没有办法在每次调用 g 时中断?我注意到如果 g 是一行,我只能说 :break 2
。
我还可以使用 :break 3
在 g 的 let 语句处中断;但是,我想绑定调用 g 的参数,我认为这不允许我这样做。
解决方法
在 GHC 9.0.1 中添加了一项功能,允许您中断嵌套函数。见the GHC 9.0.1 user guide。例如:
> :break f.g
对于早期版本的 GHC,您或许可以添加一个特殊的调试变量:
debugBreak = True
f x =
let g x' y | debugBreak =
let -- ...
in -- ...
in -- ...
然后你可以像这样中断那个函数:
> :break debugBreak
当你到达那个断点时只需执行一个步骤。