web-dev-qa-db-ja.com

WindowsでRustユニットテストをデバッグする方法は?

RustとVisualStudioツールチェーンを備えたWindowsでVSCodeを使用して、Codingame問題のコードを開発しています。

cargo buildによって生成された実行可能ファイルをデバッグする方法を説明する複数のガイドを見つけました。最良のものは Debug Rust WindowsでVisual StudioCodeとMSVCデバッガーを使用

ただし、問題が発生した場合は、単体テストを作成する傾向があり(Java、JavaScript、Rubyなどで作成しました)、それをデバッグします。残念ながら、Rustでそれを行う方法を見つけることができません。テストをデバッグするように環境を構成するにはどうすればよいですか?

テストにprintln!ステートメントを追加することについては話していません。これは、その方法をすでに知っているからです。新しいアサーションを追加することについても話していません。なぜなら、それらはテストされたコードではなく、テストに存在するからです。

私が欲しいのは、私のテストで呼び出されたコードでVS CodeDebuggerを使用することです。

10
Riduidel

Rustユニットテストは個別のバイナリとしてコンパイルされます。つまり、他のバイナリとまったく同じようにデバッグします。コンパイルされると、それらは./target/debug/$name-$hashにあります。

VisualStudioコード

これは、単体テストのデバッグを可能にするVSCode構成ファイルの変更バージョンです。

tasks.json

{
    "type": "Shell",
    "label": "cargo test build",
    "command": "cargo",
    "args": [
        "test", "--no-run"
    ],
    "problemMatcher": [
        "$rustc"
    ]
}

launch.json

{
    "name": "Run Test Debugger",
    "type": "cppvsdbg",
    "request": "launch",
    "program": "${workspaceFolder}/target/debug/buggin-70708b3916187eeb.exe",
    "args": [],
    "stopAtEntry": false,
    "cwd": "${workspaceFolder}",
    "environment": [],
    "externalConsole": true,
    "preLaunchTask": "cargo test build",
}

ワーキング

VS Code debugger running on a test

Windbg

テストを作成します。

cargo test --no-run

Windbgでビルドされた実行可能ファイルを開き、ソースファイルを開きます。

Windbg on Rust test


ハッシュを見つけることは最も厄介な側面です。私が知っている最善の解決策は、テストをビルドし、最新のものに基づいてテスト実行可能ファイルを見つける小さなスクリプトを作成することです。私のPowershellスキルはこのタスクに十分ではなく、これをVSCodeまたはWindbgと直接統合する方法もわかりません。

Cargoには、ファイルの識別に役立つ未解決の問題があります。

2
Shepmaster