1.21 jigowatts

Great Scott!

Visual Studio Code でC#のコードをデバッグしてみる!

概要

前回作成したコンソールアプリをデバッグしてみます。

環境

OS X EI Capitan バージョン 10.11.4
Visual Studio Code バージョン 1.0.0
dnvm(.NET Version Manager) - Version 1.0.0-rc2-15546
ランタイムはmonoで1.0.0-rc1-update2

$ dnvm list
Active Version              Runtime Architecture OperatingSystem Alias
------ -------              ------- ------------ --------------- -----
       1.0.0-beta4          mono                 linux/osx       
       1.0.0-beta6          mono                 linux/osx       
       1.0.0-rc1-update2    coreclr x64          darwin          
  *    1.0.0-rc1-update2    mono                 linux/osx       default

デバッグの設定

Mono Debugを拡張機能でインストール

コマンドパレット(⇧⌘P)よりext installと入力し、mono debugで絞り込みをかけて拡張機能をインストールします。
f:id:sh_yoshida:20160425065350p:plain
Mono Debug | Visual Studio Marketplace

デバッグボタン(⇧⌘D)から再生ボタンを選択します。
f:id:sh_yoshida:20160425065719p:plain

最初は構成ファイルがないのでnoneとなっているので、先ほどインストールしたMono Debugを選択します。
f:id:sh_yoshida:20160425070158p:plain

自動で.vscode/launch.jsonファイルが追加されます。
中身はこんな感じ。
launch.json

{
	"version": "0.2.0",
	"configurations": [
		{
			"name": "Launch",
			"type": "mono",
			"request": "launch",
			"program": "${workspaceRoot}/program.exe",
			"args": [],
			"cwd": "${workspaceRoot}",
			"preLaunchTask": "",
			"runtimeExecutable": null,
			"env": {},
			"externalConsole": false
		},
		{
			"name": "Attach",
			"type": "mono",
			"request": "attach",
			"address": "localhost",
			"port": 55555
		}
	]
}

構成ファイルがLaunch状態で再度、再生ボタンを押下するとprogram.exeがないためエラーになります。ビルドしてexeを作る必要があります。

ビルドして実行可能ファイルを作成

ターミナルよりビルド
$ mcs -debug Program.cs

そうすると、Program.exeとProgram.exe.mdbという二つのファイルが作成されます。
f:id:sh_yoshida:20160425071436p:plain

スクランナー

このビルド処理をタスクランナーとして登録しておきます。
コマンドパレットよりBuildと入力するか⇧⌘Bでビルドタスクを呼び出します。
f:id:sh_yoshida:20160422073243p:plain

最初は構成ファイルがないので、タスクランナーの設定を行います。
f:id:sh_yoshida:20160425072234p:plain

適当なTask Runnerを選ぶとtasks.jsonファイルが追加されるので書き換えます。
f:id:sh_yoshida:20160425072245p:plain

tasks.json

{
    "version": "0.1.0",
    "command": "mcs",
    "args": [
        "-debug",
        "Program.cs"
    ],  
    "showOutput": "silent",
    "taskSelector": "/t:",
    "tasks": [
        {
            "taskName": "exe",
            "isBuildCommand": true,
            "problemMatcher": "$msCompile"
        }
    ]
}

再度ビルド(⇧⌘B)するとexeファイルが作成されます。
クラスファイルを増やしたらargsプロパティに追加していきます。
スクランナーの書き方についてはこちら。
www.atmarkit.co.jp

デバッグ

ブレークポイントを設定し、デバッグボタン(⇧⌘D)から再生ボタンを押下します。
f:id:sh_yoshida:20160425073730p:plain
止まったぁぁぁ!

ちと難しいというか面倒ですねぇ。
クラスが増えてくるとargsプロパティに対象ファイルを含めるのが大変だし、Debugくらいもう少しお手軽にできないものか。いや違うか、IDEに慣れすぎたんだな。
エディタとコンソールでコーディングすることの楽しさとIDEの恩恵を再認識させられました。

sh-yoshida.hatenablog.com
sh-yoshida.hatenablog.com

参考

公式
code.visualstudio.com

中の人が書いてるやつ。
.csprojファイルを用意してタスクランナーでxbuild(MSBuildのMono版実装らしい)で実行可能ファイル(exe)を作成する方法。
michaelcrump.net

コメント欄に.csprojいらないよって書いてあってリンクが張られてたのがこちら。
blog.nwoolls.com

追記

VS Codeのバージョンも1.1.1となり、dotnetコマンドが出てきたりと進化が早い!
そのおかげか、こんなことしなくても普通にデバッグできるようになりました(喜)
前はがんばってみたけど、Webアプリケーションがデバッグできませんでしたがこちらも対応してる!!

at de:code 2016 会場

.NET - Powerful Open Source Development