use*_*821 5 haskell visual-studio-code
我正在尝试使用phoityne-vscode插件在VS Code中调试一个简单的Haskell应用程序。我设法配置了插件并运行了应用程序-我可以看到断点。
问题是无法弄清楚如何与正在运行的应用程序进行交互。我在一行中希望有用户输入
do
someValue <- getLine
Run Code Online (Sandbox Code Playgroud)
调试器到达此行后,它将停止,并且我无法弄清楚如何将参数传递给程序。我猜想它在调试控制台中的某个位置,但看起来提示仅用于驱动调试器。
我确信我缺少一些非常简单的东西-这是我第一次尝试使用Haskell进行调音,而且我还是VS Code的新手。
如存储库中所述 -您不能使用STD[IN|OUT]方法;
类似的东西putStrLn会被忽略,但IN方法(getLine例如)会卡住;
对于没有STD[IN|OUT]方法的函数,您可以使用F10- 选择函数并发送参数(例如[1,2,3]用于发送列表或"str"发送字符串):

随着F5您可以运行以前的配置或配置launch.json:
mainArgs- params,你可以用getArgs(cmd params for your programm);startupFunc - 将首先调用的函数的名称;startupArgs- 第一个函数的参数(例如"startupArgs": "666"将与 相同<F10> -> 666 -> <Enter>)stopOnEntry - 在函数开始时启用/禁用断点的布尔参数;另外,如果我理解正确,F10将重写startupFunc和startupArgs;
我真的是haskell的新手,所以当我可以在调试控制台中获得常量的值时我有点困惑,有时我有:
[DAP][ERROR] 在 runStmt 时发生错误。
变量不在范围内:<...>
同样看起来像where和let块被忽略:D
使用watch面板以便更好地理解何时可以使用一些常量:
如果要调试输入\输出方法,可以使用ghci调试命令(:h-Commands for debugging块);
例如,您有一个程序:
89| test :: IO ()
90| test = do
91| a <- getLine
92| b <- getLine
93| putStrLn $ a ++ b
Run Code Online (Sandbox Code Playgroud)
用于:break 93在第93行添加断点;
然后在解释器中运行你的程序:test;
输入值。现在您将停在putStrLn $ a ++ b- 如果您输入a或b在控制台中 - 您将获得这些常量的值;
然后:step为评估++和:step为putStrLn:
我希望它会对某人有所帮助;