18

Haskell には非終了式があります。終了しない理由をデバッグして調査したい。私が学んだテクニックは、GHCi で以下を使用することです。

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

だから、無限計算で実行されている命令を見ることができます。:step問題は、割り込みを無視して で計算を続けたいということです。それをしてもいいですか?

終了しない計算をデバッグするための他のソリューションはありますか? (履歴が 50 を超える記録、またはタスクを支援するその他の実践。)

4

1 に答える 1

1

私が過去に行ったことの 1 つは、キーを押すたびに 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

中断したところから再開します。

于 2013-09-19T05:51:18.327 に答える