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.)