blog.hamadu.net

2018/08/02 - Visual Studio Codeにて単一Rustファイルをデバッグ実行する

Tags: env vscode rust

What

こんなの。

inst640.gif

VSCodeの CodeLLDB プラグインと設定をちょいちょい書くことで実現できる。 私はこれを競プロ環境として使うつもりでいるが、これに限らず、実験コードをさくっと書いてその場で実行+デバッグしたいときに役立つ。

とっとと設定したい人向け

パスはお好みで書き換えよう。

設定方法

準備

  • lldbをインストールする
  • 拡張機能 CodeLLDB を入れる

デバッグ実行環境の準備

VSCodeのデバッグ実行環境は launch.json ファイルによって定義する。これは左メニューの虫アイコンをクリック後、デバッグメニューから "構成の追加..." を選ぶと開く。

以下のような設定をする。

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "lldb",
            "request": "launch",
            "name": "Debug Run",
            "sourceLanguages": [
                "rust"
            ],
            "terminal": "integrated",
            "preLaunchTask": "Build single Rust file",
            "program": "${workspaceRoot}/${fileBasenameNoExtension}",
            "args": [],
            "cwd": "${workspaceFolder}"
        }
    ]
}

キーの意味は設定ファイルでマウスホバーすると教えてくれる。親切!特に重要なのは以下。

key 意味 設定値
terminal プログラムの実行で使いたいターミナル。 競プロ的には標準入出力をしたいのでVSCodeのターミナルを指定
preLaunchTask プログラム実行前に走らせたいタスク この名前のタスクをあとで定義
program デバッグ実行したいプログラムへのパスを指定 タスクで作った実行可能ファイルへのパス
args programに渡す引数をスペースでsplitした配列で指定 なし
cwd 実行プログラムのワーキングディレクトリ 競プロ的にはどうでも良し

ここでは、プログラム実行前のタスク(preLaunchTask)として、単一Rustファイルのコンパイルを指定している。これは別途タスクとして定義する必要がある。

ビルドタスクの定義

先程 "preLaunchTask" に指定した、Build single Rust file を定義する。 「タスク」->「タスクの構成...」 でメニューが出てくる。適当なのを選ぶと tasks.json が開くので、これに以下の記述をする。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build single Rust file",
            "type": "shell",
            "command": "rustc",
            "args": [
                "-o",
                "${workspaceRoot}/${fileBasenameNoExtension}",
                "-C",
                "debug_assertions=yes",
                "-g",
                "${file}"
            ],
            "group": "build",
            "presentation": {
                "reveal": "always"
            }
        }
    ]
}

これは「今開いているファイル」をデバッグ情報付きでコンパイルするタスクである。

ちなみに説明が前後するが、VSCodeの構成ファイルは「今開いているファイル」「ワークスペースのパス」等を表す変数が利用できる。一覧は Variables Reference にある。

まとめ

これでさくさくデバッグできてハッピー