我创建了一个测试控制台应用程序并尝试使用VSCode和Mono Debug扩展来调试它。
fsharp代码:
module TestFharp
[<EntryPoint>]
let main argv =
printfn "Args %A" argv
let x = 5
printf "hello world"
0
launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "mono",
"request": "launch",
"program": "C:/FSharp/test/TestFharp/bin/Debug/TestFharp.exe",
"args": [],
"cwd": "${workspaceRoot}",
"preLaunchTask": "",
"runtimeExecutable": null,
"env": {},
"externalConsole": false,
"stopOnEntry": true
},
{
"name": "Attach",
"type": "mono",
"request": "attach",
"address": "localhost",
"port": 55555
}
]
}
DEBUG CONSOLE窗口的输出
mono --debug --debugger-agent=transport=dt_socket,server=y,address=127.0.0.1:61724 C:/FSharp/test/TestFharp/bin/Debug/TestFharp.exe
Args [||]
hello world
答案 0 :(得分:0)
构建文件夹中的exe文件与\ projectFolder \ bin \ Debug
之间有什么区别
exe
目录中的 build
文件由FAKE的构建脚本(build.fsx
文件)创建[在Ionide中使用Ctrl + F5
/ FAKE: Build default
命令调用]
exe
中的 \projectFolder\bin\Debug
是标准的MsBuild输出。在Ionide中,您可以使用MsBuild: Build project
命令直接调用MsBuild。
两个exe
文件都是相同的(FAKE在引擎盖下使用MsBuild),这只是首选问题,是否要在构建上运行一些额外的操作(如测试) - FAKE允许您定义更多复杂的构建过程,MsBuild只需编译app。
根据您用于构建应用的方法,您需要指向exe
launch.json
右侧
我还将externalConsole
设置为true
。
否则,它看起来不错,F5
应该启动你的应用程序和调试器。
答案 1 :(得分:0)
launch.json包含两个配置:一个用于启动目标(名称:&#34;启动&#34;),一个用于附加到已启动的目标(名称:&#34;附加&#34;)。它们彼此独立。
在&#34;发布&#34;配置号&#34;端口&#34;指定并且mono-debug将在启动mono时使用随机端口并将附加到同一端口。因此,根据定义,这些端口始终保持同步。
在&#34;附加&#34;配置端口是指定的,因为mono-debug无法知道调试端口mono是否以。
启动所以启动配置都很好,第一个应该更容易使用,因为它启动单声道并一次性附加调试器。
如果没有命中断点,可能是TestFharp.exe没有为调试而构建吗?
答案 2 :(得分:-1)
您指定的附加配置使用的是端口55555,但您运行应用的方式为调试器指定了61724,因此请尝试将这两者同步进行