gpt4 book ai didi

haskell - 调试haskell : Display a function's name at each call

转载 作者:行者123 更新时间:2023-12-02 07:05:46 26 4
gpt4 key购买 nike

是否有一个工具可以自动“标记”某些函数,以便我可以获得“调用堆栈”的近似值。

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

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

有时,我有无限循环,并且此显示可以立即显示哪个函数有问题。使用 hlist 和断点并没有多大帮助,因为您已经必须知道循环中函数之一的名称。

最佳答案

这里有一些令人难以置信的丑陋;-),它只给你行号而不是函数名称,但我惊讶地发现它有效,所以我想我会分享它。但它仍然比什么都没有好。您可以像以前那样使用 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)

现在,

*Main> f 3
Test.hs:16
Test.hs:18
Test.hs:16
Test.hs:17
4

关于haskell - 调试haskell : Display a function's name at each call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com