debugging haskell infinite-loop ghc

debugging - Continuar la depuración en GHC después de la interrupción



haskell infinite-loop (1)

Una cosa que he hecho en el pasado es usar unsafePerformIO para romper cuando presiono una tecla:

Digamos que t es su expresión original, inserte x en la expresión:

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 ""

Luego, en el indicador de ghci:

*Main> :break 9 *Main> t2 0

Presiona una tecla del teclado

*Main> :cont

reanuda donde lo dejaste.

Tengo una expresión que no termina en Haskell. Quiero depurar e inspeccionar la razón por la que no está terminando. Una técnica que aprendí es usar lo siguiente en GHCi:

:set -fbreak-on-exception :trace nonterminating_expression ^C :hist 50

Entonces puedo ver las instrucciones que se ejecutan en el cómputo infinito. El problema es que me gustaría continuar el cálculo con :step , ignorando la interrupción. ¿Puedo hacer eso?

¿Alguna otra solución para depurar los cálculos no terminantes? (Historial mayor de 50 registros u otras prácticas para ayudar a la tarea.)