haskell中的调试循环
假设我在Haskell中有以下代码:haskell中的调试循环,haskell,Haskell,假设我在Haskell中有以下代码: x :: Int y :: Int z :: Int x=y y=z z=x 当然,如果使用ghc,引用这些变量中的任何一个都会导致执行以爆炸,如果使用ghci,则会导致执行无限旋转。我正在编写一些代码,如果代码错误,可能会出现循环-有什么方法可以调试-我可以在堆栈爆炸时检查堆栈以查看循环吗?我查看了@TheInternet linked,第一个答案的建议是使用-fbreak on exception-fbreak on error和:trace非常好。然
x :: Int
y :: Int
z :: Int
x=y
y=z
z=x
当然,如果使用ghc,引用这些变量中的任何一个都会导致执行以
爆炸,如果使用ghci,则会导致执行无限旋转。我正在编写一些代码,如果代码错误,可能会出现循环-有什么方法可以调试
-我可以在堆栈爆炸时检查堆栈以查看循环吗?我查看了@TheInternet linked,第一个答案的建议是使用-fbreak on exception
-fbreak on error
和:trace
非常好。然而,我想我应该提到我遇到的两个小障碍,它们是针对这个问题的:
异常,只有本机编译的GHC会产生异常,并且GHCi调试器无法跟踪本机编译的代码^C
手动中断可以解决此问题
:跟踪
,然后手动执行^C
,这会提供一个调试器会话,但GHCi没有插入任何断点,因此没有要调试的上下文李>
这也很容易解决:我只是将第一个等式改为x=id y
。这足以让GHCi插入断点。我怀疑这个问题是由于OP的代码周期只包含琐碎的变量方程(引用:“单个变量通常不被认为是断点位置(除非变量是函数定义、lambda或case替换的右侧)”),并且它通常不会发生在“实”代码中