Bol*_*eth 18 debugging haskell infinite-loop ghc
我在Haskell中有一个非终止表达式.我想调试并检查它没有终止的原因.我学到的一种技术是在GHCi中使用以下内容:
:set -fbreak-on-exception
:trace nonterminating_expression
^C
:hist 50
Run Code Online (Sandbox Code Playgroud)
所以我可以看到在无限计算中运行的指令.问题是我想继续计算:step,忽略中断.我能这样做吗?
用于调试非终止计算的任何其他解决方案?(历史大于50条记录或其他实践来帮助完成任务.)
我过去做过的一件事是每当我按下一个键时使用 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 ""
Run Code Online (Sandbox Code Playgroud)
然后在 ghci 提示符下:
*Main> :break 9
*Main> t2 0
Run Code Online (Sandbox Code Playgroud)
按键盘按键
*Main> :cont
Run Code Online (Sandbox Code Playgroud)
从上次中断的地方继续。
| 归档时间: |
|
| 查看次数: |
383 次 |
| 最近记录: |