VSCodeでNimのデバックを試してみた
今週7月24日に、VSCodeのNimツールが一新されました。VSCodeの拡張機能・LSP(Language Server Protocol)のnimlangserver・インストーラーのnimbleの3点が一気に更新され、補完機能やデバック機能がそこそこ使えるようになったので、記載していきます。
環境
私のPC環境はWindowsで動作させています。
- OS: Windows11
- Nim 2.0.8
- vscode-nim 1.0.0 (VScode拡張機能)
- nimlangserver 1.4.0
- nimble 0.16.0
- CodeLLDB 1.10.0 (VScode拡張機能)
- LLVM 18.1.8
各ツールをインストール
1. vscode-nim 1.0.0のインストール
VSCodeを起動し、拡張機能を開きます。検索画面でnimと入力すると、nim-lang.orgが表示されると思いますので、それをインストールします。

2. nimlangserver 1.4.0のインストール
次に、補完機能のnimlangserverですが、nimlangserverで飛んだページの下位からダウンロード出来ます。
Windows環境であればnimlangserver-1.4.0-windows-i686.zipをダウンロードして解凍します。
解凍したnimlangserver.exeを、nimが存在するbinフォルダにコピーします。
※公式では、$HOME/.nimble/binにコピーとは記載されています。が、PATHが通っていれば、どっちでも良いのかも?
3. nimble 0.16.0のインストール
最後に、nimbleですが、既存のコマンドだと、VSCode起動時にエラーが表示されてしまうので、最新のnimbleコマンドに更新しましょう。
nimbleで飛んだページの下位にダウンロードファイルが存在します。
Windows環境であればnimble-windows_x64.tar.gzをダウンロードして解凍します。
解凍したnimble.exeを、nimが存在するbinフォルダにコピーします。
一応、補完機能については、これで十分です。次に、デバック機能を使えるようにするために、LLVMとCodeLLDBを入れましょう。
通常nimは、Windows環境であればmingw64のgccを使って、Cに変換されたソースをコンパイルしますが、gccだとnimのデバックが難しいらしく、clangでLLVMに変換し、デバックした方が容易みたいです。その為、以下のCodeLLDBとLLVMをインストールする必要があります。
4. CodeLLDB 1.10.0のインストール
VSCodeの拡張機能を開きます。検索画面でLLDBと入力すると、CodeLLDBが表示されると思いますので、それをインストールします。

5. LLVM 18.1.8のインストール
llvm.org(https://releases.llvm.org/)の公式ページに移動し、Windows環境であればLLVM-18.1.8-win64.exeをダウンロードします。
管理者用のコマンドプロンプト画面からLLVM-18.1.8-win64.exeを実行します。
インストーラーが起動し、「Add LLVM to the system PATH for current user」を選択し、実行します。
インストール先を指定し、実行しましょう。インストールが終了すれば、環境設定画面を開き、PATHを追加します。
設定が終われば、コマンドプロンプト画面を開き、clang -vを実行し、clang version 18.1.8と表示されるか確認します。
以上が、各種ツールのインストールになります。
VSCode側の設定について
1. VSCodeの設定処理
VSCodeを起動し、Ctrl+,で拡張機能からnim configurationを開きます。
LSP:PATHのところに、nimlangserver.exeが置かれているパスを指定しますが、nim/bin配下に置いているなら指定は要らないと思います。
※まあ、取り敢えず設定の必要は、余りないです。
2. VSCodeの各種設定ファイル
VSCode自体の設定については、私自身あまり詳しくありません。取り敢えず、vscode-nimの公式HPに記載されている手順で2つの設定ファイルを配置します。
まず、VSCodeを開き、プロジェクトフォルダ配下に、.vscodeフォルダを作成します。
.vscodeフォルダ内に以下のlaunch.jsonとtasks.jsonファイルを作成します。
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "nim: debug current file",
"preLaunchTask": "nim: build current file (for debugging)",
"program": "${workspaceFolder}/debug/${fileBasenameNoExtension}",
"args": [],
"cwd": "${workspaceFolder}",
}
]
}
変更点は、launch.json設定ファイルの指定がbinフォルダになってましたが、debugフォルダに変更しています。
デバックしか使わないので、そうしています。
{
"version": "2.0.0",
"tasks": [
{
"label": "nim: build current file (for debugging)",
"command": "nim",
"args": [
"compile",
"--cc:clang",
"-g",
"--debugger:native",
"-o:${workspaceRoot}/debug/${fileBasenameNoExtension}",
"${relativeFile}"
],
"options": {
"cwd": "${workspaceRoot}"
},
"type": "shell",
}
]
}
.vscode/tasks.json設定ファイルの変更点は、--cc:clangを追加した事です。デバック時のみclangでコンパイルし、ターミナルからのnimコマンド実行では、従来通りのmingw64のgccでコンパイルと実行が行えます。
また、tasks.json設定ファイルの指定がbinフォルダになってましたが、debugフォルダに変更しています。
デバック時しかLLVMは使わないので、そうしています。
${fileBasenameNoExtension}だと拡張子無し設定の実行ファイルが出来るのですが、windowsの実行ファイル形式への変更がわからないので放置です。
実際問題なく、デバックは動作します。
3. VSCodeからデバックを実行
下記のようなnimファイルを作成し、デバックを実行してみましょう。
echo cの行にブレイクポイントを設定し、メニュー/実行/デバックの開始、または、F5でデバックが実行されます。
デバック開始時に、自動でdebugフォルダが作成され、拡張子ilkとpdbファイルが作成されます。
※実行ファイルは、拡張子無しになりますが、まあ、デバッグだけしか使わないので、現状保留です。

上記サンプルプログラムを作成し、F5を押すと、自動的に、clangでコンパイルを行い、デバック画面に切り替わります。

また、ウォッチ式は、Global変数項目を右クリックして、ウォッチに追加をすれば、ウォッチに追加されます。
4. デバックでの問題点
- 変数については、
変数__モジュール名みたい表示形式になってしまう。 -
F10で移動すると時々メモリーダンプが表示されて使えない。(ブレイクポイントを多数設置して、ジャンプで飛ぶぐらいなら出来ます)
5. nimコンソールの起動
後、謎の機能としてnimコンソールと言うのがあります。
VSCode上から、Ctrl+Shift+pを押して、「Nim: Run Selection/Line in Nim Terminal」を選択し、「nim Using nim secret command」を選択するとターミナル画面上に、Nimコンソールが起動します。

インタープリターのような動作をしますが、イマイチ使い勝手はよろしくない。
おわりに
vscode-nimのデバック機能については、まだまだ改善する部分は多々ありますが、一応はデバック時にブレイクポイントで止まるし、変数の値を見る事は可能になりました。
また、最新バージョンのnimbleコマンドについては、今後のNim2.2に取り込まれるそうです。
Discussion