有没有办法在 ghci 的 let 块中定义的多行函数处设置断点?
Is there a way to set a breakpoint at a multiline function defined in a let block in ghci?
使用 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
.
我也可以在 g 的 let 语句处中断,使用 :break 3
;但是,我想绑定调用 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
当你到达那个断点时,只做一步。
使用 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
.
我也可以在 g 的 let 语句处中断,使用 :break 3
;但是,我想绑定调用 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
当你到达那个断点时,只做一步。