RustとVisualStudioツールチェーンを備えたWindowsでVSCodeを使用して、Codingame問題のコードを開発しています。
cargo build
によって生成された実行可能ファイルをデバッグする方法を説明する複数のガイドを見つけました。最良のものは Debug Rust WindowsでVisual StudioCodeとMSVCデバッガーを使用 。
ただし、問題が発生した場合は、単体テストを作成する傾向があり(Java、JavaScript、Rubyなどで作成しました)、それをデバッグします。残念ながら、Rustでそれを行う方法を見つけることができません。テストをデバッグするように環境を構成するにはどうすればよいですか?
テストにprintln!
ステートメントを追加することについては話していません。これは、その方法をすでに知っているからです。新しいアサーションを追加することについても話していません。なぜなら、それらはテストされたコードではなく、テストに存在するからです。
私が欲しいのは、私のテストで呼び出されたコードでVS CodeDebuggerを使用することです。
Rustユニットテストは個別のバイナリとしてコンパイルされます。つまり、他のバイナリとまったく同じようにデバッグします。コンパイルされると、それらは./target/debug/$name-$hash
にあります。
これは、単体テストのデバッグを可能にするVSCode構成ファイルの変更バージョンです。
{
"type": "Shell",
"label": "cargo test build",
"command": "cargo",
"args": [
"test", "--no-run"
],
"problemMatcher": [
"$rustc"
]
}
{
"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",
}
テストを作成します。
cargo test --no-run
Windbgでビルドされた実行可能ファイルを開き、ソースファイルを開きます。
ハッシュを見つけることは最も厄介な側面です。私が知っている最善の解決策は、テストをビルドし、最新のものに基づいてテスト実行可能ファイルを見つける小さなスクリプトを作成することです。私のPowershellスキルはこのタスクに十分ではなく、これをVSCodeまたはWindbgと直接統合する方法もわかりません。
Cargoには、ファイルの識別に役立つ未解決の問題があります。