我试图用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
- select函数并发送params(例如[1,2,3]
用于发送列表或"str"
用于发送字符串):
使用F5
您可以从launch.json
运行以前的配置或配置:
mainArgs
- params,你可以使用getArgs
(cmd params for your programm);startupFunc
- 将首先调用的函数的名称;startupArgs
- 第一个函数的参数(例如"startupArgs": "666"
与<F10> -> 666 -> <Enter>
相同)stopOnEntry
- 在函数开头的enable \ disable断点的布尔参数;另外,如果我理解正确,F10
将重写startupFunc
和startupArgs
;
我是haskell的新手,所以当我在调试控制台中获得常量值时,我有点困惑,有时候我有:
runStmt时发生[DAP] [ERROR]错误。 变量不在范围内:<...>
看起来像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
使用:break 93
在第93行添加断点;
然后在解释器中运行你的程序:test
;
输入值。现在你将停在putStrLn $ a ++ b
- 如果你在控制台中键入a
或b
- 你将获得这些常量的值;
然后:step
评估++
和:step
为putStrLn
:
我希望它会对某人有所帮助;