yon*_*ong 23 debugging haskell infinite-loop
如果我们得到一个<<loop>>
,那就意味着Haskell设法检测到一个无限循环.有没有办法让ghc告诉我们这个循环发生在哪里?似乎Haskell应该在某个地方拥有这些信息.
sin*_*nan 24
使用-prof
和编译您的应用程序-fprof-auto
(如果您使用Cabal,请使用--enable-executable-profiling
和--ghc-options=-fprof-auto
),然后运行它 +RTS -xc
.它会在发生错误时打印堆栈跟踪.这应该可以帮助您缩小范围.
例:
? haskell cat loop.hs
myFun :: Int
myFun =
let g = g + 1
in g + 10
main = print myFun
? haskell ghc loop.hs -prof -fprof-auto
[1 of 1] Compiling Main ( loop.hs, loop.o )
Linking loop ...
? haskell ./loop +RTS -xc
*** Exception (reporting due to +RTS -xc): (THUNK_STATIC), stack trace:
Main.myFun.g,
called from Main.myFun,
called from Main.CAF
*** Exception (reporting due to +RTS -xc): (THUNK_STATIC), stack trace:
Main.myFun.g,
called from Main.myFun,
called from Main.CAF
loop: <<loop>>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
897 次 |
最近记录: |