VSCodeでrustのデバッグってできるのかな?って気になったのでやってみました。実用的に使えるかは今後の私にかかっている気がします。
本題
デバッガはcodelldbを利用します。
少し古いですが、こちらを参考にしました。
https://qiita.com/84zume/items/377033ab6b6aee2a68d7
どうやらcargoでプロジェクトを作成してるとかなり楽にデバッグできる(launch.jsonを自動生成してくださる)みたいなのですが、私はcargoを使ってない環境でやりたかったので自分でlaunch.jsonを書くことにしました。
コンパイルは手動でやる予定でしたがtasks.jsonを使えば自動化できそうだったので使ってみることにしました。
launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Rust for compiled files",
"program": "./${fileBasenameNoExtension}",
"args": [],
"cwd": "${workspaceFolder}",
"preLaunchTask": "rust_build",
"postDebugTask": "rm_file"
}
]
}
コンパイルはrustcで行うんですが(のちの’tasks.json’に記載)、デフォルトでファイル名を取得してくれるので、そのまま利用するようにしました。
pretaskとposttaskでコンパイルとコンパイル後のファイル(呼び方がわからない)の削除を指定してます。参考資料2からそのまま持ってきました。
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "rust_build",
"command": "rustc",
"args": [
"${file}",
"-g"
],
"group": "build",
"presentation": {
"reveal": "never"
}
},
{
"type": "shell",
"label": "rm_file",
"command": "rm",
"args": [
"-rf",
"${fileBasenameNoExtension}",
],
"group": "build",
"presentation": {
"reveal": "never"
}
}
]
}
2つのtaskで構成されてます。上がrustcでのコンパイル、下がコンパイル後のファイルの削除です。rustcでのコンパイル時に-gオプションを追加することでデバッグの情報を含めてくれるそうです。これがないとbreakpointが使えませんでした。
しめ
これでdebuggerをつかってbreakpointで止まったり、変数の内容を確認できるようになりました。
普段はpythonを使っているのと、lldbのことを知らなかったことが相まっていまいち使いこなせてないです。とりあえず、変数の中身は見れるようになったので一旦目標達成とします。
今後も使うならコマンドを覚えないといけないですね。
参考資料
-
- https://qiita.com/84zume/items/377033ab6b6aee2a68d7
https://qiita.com/keitean/items/56a7e37577a6b05d0a81
コンパイルしたファイルを削除するtaskを追加しとくのは結構いいなと思いました!
https://doc.rust-lang.org/rustc/command-line-arguments.html