我在Haskell中有一个不终止的表达式。我想调试并检查它没有终止的原因。我学到的一种技术是在GHCi中使用以下内容:
:set -fbreak-on-exception
:trace nonterminating_expression
^C
:hist 50
所以我可以看到在无限计算中运行的指令。问题是,我想继续使用:step
进行计算,忽略中断。我可以这样做吗?
有没有其他的解决方案来调试非终止计算?(历史记录超过50条记录或其他有助于完成任务的实践。)
发布于 2013-09-19 13:51:18
我以前做过的一件事是,每当我按下一个键时,都会使用unsafePerformIO中断:
假设t是您的原始表达式,在表达式中插入x:
import System.IO
import System.IO.Unsafe
t i = do print i; t (i+1)
t2 i = do print i; x; t2 (i+1)
x = do r <- hReady stdin
if r then do a<-hGetChar stdin
print a -- break on this line
else print ""
然后在ghci提示符下:
*Main> :break 9
*Main> t2 0
按键盘键
*Main> :cont
从您停止的位置继续。
https://stackoverflow.com/questions/18504432
复制相似问题