gpt4 book ai didi

haskell - 在 VS Code 中调试 haskell

转载 作者:行者123 更新时间:2023-12-04 19:28:02 25 4
gpt4 key购买 nike

我正在尝试使用 phoityne-vscode 插件在 VS Code 中调试一个简单的 Haskell 应用程序。
我设法配置插件并运行应用程序 - 我可以看到被击中的断点。

问题是无法弄清楚如何与正在运行的应用程序交互。我有一行希望用户输入

do
someValue <- getLine

一旦调试器到达这一行,它就会停止,我无法弄清楚如何将参数传递给程序。我猜它在调试控制台中的某个地方,但看起来提示仅用于驱动调试器。

我确信我错过了一些非常简单的东西——这是我第一次尝试使用 Haskell 进行锻炼,而且我也是 VS Code 的新手。

最佳答案

如存储库中所述 - You can't use STD[IN|OUT] methods ;
putStrLn将被忽略,但 IN方法(例如 getLine)只会卡住;

对于没有 STD[IN|OUT] 的函数方法您可以使用F10 - 选择函数并发送参数(例如 [1,2,3] 用于发送列表或 "str" 用于发送字符串):
enter image description here

F5您可以运行以前的配置或从 launch.json 配置:

  • mainArgs - 参数,您可以通过 getArgs 获得(您的程序的 cmd 参数);
  • startupFunc - 将首先调用的函数的名称;
  • startupArgs - 第一个函数的参数(例如 "startupArgs": "666" 将与 <F10> -> 666 -> <Enter> 相同)
  • stopOnEntry - 在函数开始时启用\禁用断点的 bool 参数;

  • 另外,如果我理解正确的话, F10将重写 startupFuncstartupArgs ;

    我在haskell中真的很新,所以当我可以在调试控制台中获得常量值时我有点困惑,有时我有:

    [DAP][ERROR] error occurred while runStmt.
    Variable not in scope: <...>



    也看起来像 wherelet block 被忽略 :D使用 watch面板可以更好地理解您何时可以使用一些常量:

    enter image description here

    如果你想调试输入\输出方法你可以使用 ghci调试命令( :h - Commands for debugging block );

    例如,您有一个程序:

    89| test :: IO ()
    90| test = do
    91| a <- getLine
    92| b <- getLine
    93| putStrLn $ a ++ b

    使用 :break 93在第 93 行添加断点;
    然后在解释器中运行你的程序: test ;
    输入值。现在您将停在 putStrLn $ a ++ b - 如果您键入 ab在控制台中 - 您将获得这些常量的值;
    然后 :step用于评估 ++:step对于 putStrLn :

    enter image description here

    我希望它对某人有所帮助;

    关于haskell - 在 VS Code 中调试 haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49959032/

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