callmekohei's blog

callmekoheiのひとりごと

VSCodeでFSharpのデバッグやってみたった

f:id:callmekohei00:20171030103729p:plain

けっこうはまったのでメモ

Summary

VSCodeでFSharpのデバッグやってみたった

環境

$ sw_vers 
ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G29

$ dotnet --version
2.0.0

$ mono --version
Mono JIT compiler version 5.0.1.1 (2017-02/5077205 Wed May 31 14:47:04 BST 2017)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
    TLS:           normal
    SIGSEGV:       altstack
    Notification:  kqueue
    Architecture:  amd64
    Disabled:      none
    Misc:          softdebug 
    LLVM:          supported, not enabled.
    GC:            sgen (concurrent by default)

準備

0. vscodeをインストール( ext install C# )
1. dotnetをインストール
2. monoをインストール

こんな感じ

// デスクトップに移動
$ cd ~/Desktop/

// フォルダを作る
Desktop$ mkdir MyAppFs

// フォルダに移動
Desktop$ cd MyAppFs/

// テンプレート一式を作る
MyAppFs$ dotnet new console -lang F#

// ビルドする
MyAppFs$ dotnet build

// 実行
MyAppFs$ dotnet run

// 実行結果
Hello World from F#!

Program.fsを書き換える

let bar() = 
    stdout.WriteLine("abc")

let foo (str:string) =
    stdout.WriteLine(str)
    bar()

[<EntryPointAttribute>]
let main _ =
    let s = "Foo!"
    foo s
    stdout.WriteLine("callmekohei")
    0

ここでvscodeを立ち上げてこのフォルダをひらく

で、デバッグボタンの右のところを押して下記を書く

(launch.json)

programのところだけパスを書き直す

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceRoot}/bin/Debug/netcoreapp2.0/MyAppFs.dll",
            "args": [],
            "cwd": "${workspaceRoot}",
            "stopAtEntry": false,
            "console": "internalConsole"
        }
    ]
}

(tasks.json)

テンプレートのまんまでオーケー

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "build",
            "command": "dotnet build",
            "type": "shell",
            "group": "build",
            "presentation": {
                "reveal": "silent"
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

これでデバッグができる!