使用Mono Debug扩展在VSCode中调试F#控制台应用程序时,断点不会发生

时间:2017-03-21 13:56:45

标签: f# mono visual-studio-code

我创建了一个测试控制台应用程序并尝试使用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
  • 我是否需要进行任何其他设置才能达到断点?
  • 构建文件夹中的exe文件和\ projectFolder \ bin \ Debug?
  • 之间有什么区别

3 个答案:

答案 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,因此请尝试将这两者同步进行