调试haskell:在每次调用时显示函数的名称

Jer*_*hoy 11 haskell

是否有一个工具可以自动"标记"某些功能,以便我可以获得"调用堆栈"的近似值.

实际上,我希望有一个类似于你通过写作获得的行为,fct = Debug.trace "fct" $ ...而不必在每个函数之前添加它.

我知道分析与-fprof-auto类似,但我需要在应用程序运行时显示它.

有一段时间,我有无限循环,这个显示可以立即告诉我哪些功能有问题.使用hlist和breakpoints并不是很有用,因为您必须知道循环中某个函数的名称.

fir*_*dle 12

这是令人难以置信的丑陋;-),它只给你行号而不是函数名,但我很惊讶地发现它有效,所以我想我会分享它.它仍然比没有好.您可以使用C预处理器,就像在旧C天中一样:

{-# LANGUAGE CPP #-}

#define traceLoc trace (__FILE__ ++":"++ show __LINE__)

import Debug.Trace

f 0 = traceLoc $ 1
f n = traceLoc $ g (n-1)
g 0 = traceLoc $ 2
g n = traceLoc $ 2 * f (n-1)    
Run Code Online (Sandbox Code Playgroud)

现在,

*Main> f 3
Test.hs:16
Test.hs:18
Test.hs:16
Test.hs:17
4
Run Code Online (Sandbox Code Playgroud)