gpt4 book ai didi

debugging - 如何调试 Haskell 代码?

转载 作者:行者123 更新时间:2023-12-02 14:42:24 24 4
gpt4 key购买 nike

我有一个问题。我编写了一个大型 Haskell 程序,它总是可以在很小的输入下运行。现在,当我想测试它并生成更大的输入时,我总是收到消息:

HsProg: Prelude.head: empty list

我多次使用Prelude.head。我可以做什么来了解更多信息或获得更好的错误输出以获取发生错误的代码行?

最佳答案

GHCi 选项 -fbreak-on-exception 可能很有用。这是一个调试 session 示例。首先我们将文件加载到 GHCi 中。

$ ghci Broken.hs
GHCi, version 7.0.2: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
[1 of 1] Compiling Main ( Broken.hs, interpreted )
Ok, modules loaded: Main.

现在,我们打开 -fbreak-on-exceptions 并跟踪我们的表达式(在本例中为整个程序的 main)。

*Main> :set -fbreak-on-exception
*Main> :trace main
Stopped at <exception thrown>
_exception :: e = _

我们因异常而停止。让我们尝试使用 :list 查看代码。

[<exception thrown>] *Main> :list
Unable to list source for <exception thrown>
Try :back then :list

由于异常发生在Prelude.head中,我们无法直接查看源码。但正如 GHCi 告诉我们的那样,我们可以返回 :back 并尝试列出跟踪中之前发生的情况。

[<exception thrown>] *Main> :back
Logged breakpoint at Broken.hs:2:23-42
_result :: [Integer]
[-1: Broken.hs:2:23-42] *Main> :list
1
2 main = print $ head $ <strong>filter odd [2, 4, 6]</strong>
3

在终端中,有问题的表达式 filter odd [2, 4, 6] 以粗体突出显示。因此,在本例中,这个表达式的计算结果为空列表。

有关如何使用 GHCi 调试器的更多信息,请参阅 the GHC User's Guide .

关于debugging - 如何调试 Haskell 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6724434/

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