概要
(追記)2018/09/11 Windows,Macでも動作確認できました。
VSCodeでNimアプリケーションのデバッグ&ステップ実行できますよ
VSCodeでのデバッグ
こちらの記事を参考に、とりあえず自分のLinux/Windows/Mac開発環境で試してみました。
Nimのバージョンは、0.18.0です。
以下、設定の手順となります。
- Native-Debugプラグインをインストールする
- コンパイルタスクを設定し、コンパイルする
- デバッグ設定をする
- ブレークポイントの設定をし、デバッグ実行を行う
Native-Debugプラグインをインストール
拡張機能より、"Native Debug"を検索し、インストールします。
インストール後は、VSCodeの再起動をしておいたほうが良いでしょう(たぶん)。
コンパイルタスクを設定する
tasks.jsonを作成・変更します。
"command"でコンパイルする対象のnimファイル(test.nim)は適宜置き換えて下さい。
ctrl+shift+bでビルドします。
{
"version": "2.0.0",
"tasks": [{
"label": "Build Debug",
"type": "shell",
"command": "nim c -d:debug --debuginfo --lineDir:on --debugger:native test.nim",
"group": {
"kind": "build",
"isDefault": true
},
}]
}
デバッグ起動設定を行う
デバッグウィンドウを表示し、「構成がありません」の右隣の設定ボタンをクリックし、
選択肢の中から「C++(GDB/LLDB)」を選択します。(※「GDB」でも良いかもしれません。後述)
(追記:Windowsでは選択肢として表示されません。「GDB」を選択してください)
launch.jsonがデフォルト表示されますので、「program」属性の中身を、ビルド設定後生成される実行ファイル名に置き換えます。
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/test",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
「GDB」を選択した場合は、以下のシンプルな起動エントリになるようです。
Windowsでは、こちらの設定となりました。
ちなみにこちらでもデバッグ実行はできました。
{
"type": "gdb",
"request": "launch",
"name": "Launch Program",
"target": "./test",
"cwd": "${workspaceRoot}"
},
ブレークポイントの設定を行い、デバッグ実行を行う
ソースの行番号の左側をクリックすることで、ブレークポイント設定がトグルされます。
その後、以下のいずれかの手段で、デバッグを開始します。
- F5キー
- ツールバーの緑色の右向き△ボタン
- メニューバーの「デバッグ」-「デバッグの開始」
下記のキャプチャ画面では、ブレークポイントに停止し、ローカル変数の値が参照できていることが確認できます。
(※Nim上のコードから、ステップインするとC言語のソースに入ったりします。)
ちなみに、構成の違いによるデバッグ時の特徴としては以下のものでした。
- C++(GDB/LLDB)の場合は、別ターミナルが表示される
- GDBの場合は、別ターミナルは表示されない
まとめ
VSCodeによるNimのデバッグ(ブレークポイント&ステップ実行等)ができることが確認できました。
いままでは、Echoによるデバッグばかりでツラタンでしたが、ステップ実行ができるなら、
Nimの勉強効率&開発効率もかなり上がるのではと思います。
今回はLinux上でのデバッグ方法の紹介でしたが、Mac/Windowsでもできるとは思いますので、
どなたかチャレンジしていただければと思います。
(2018/9/11追記)Linux,Windows,Macいずれも動作確認できました。