today 2019-03-01
access_time 1 min
vscode+lldbでc++開発環境構築
C/C++の拡張機能(type:cppdbg)にはconsoleが指定できず、externalConsoleを使うほかなかった。integrate terminalがあるのに使えないのはあんまりではないか。
あと欲張りな注文だがファイルからの標準入力もやらせたい。デバッグのたびに打つのは流石に人権が怪しい。
目標としては以下の2つを実現
いろいろ試行錯誤したところCodeLLDBを使って上げると良さそうだった。手順を示す
macの場合、xcode関係のツールを入れると一緒に入るみたい。ほかは適宜。
vscodeの拡張検索でCodeLLDBを検索→インストール。
ビルド用のタスクを定義します。ここではa.outに出力させます。
{
"version": "2.0.0",
"tasks": [
{
"label": "build before debug",
"type": "shell",
"command": "clang++",
"args": ["-std=c++17", "-g", "${fileDirname}/*.cpp", "-o", "${fileDirname}/a.out"],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
まずは実行できるコンフィグから。type:lldbであれば、先のCodeLLDBが使える。こちらではterminalの指定ができる。
{
"name": "(lldb) Launch",
"type": "lldb",
"request": "launch",
"program": "${fileDirname}/a.out",
"args": [],
"cwd": "${fileDirname}",
"terminal": "integrated",
"preLaunchTask": "build before debug"
}
次は標準入力を扱う方。vscode-lldb/MANUAL.mdに詳細が記載されているが、stdioの指定することでstdin,stdout,stderrをファイルから流したり吐き出したりできるらしい。かなりありがたい。
{
"name": "(lldb) Launch with stdin(./input.txt)",
"type": "lldb",
"request": "launch",
"program": "${fileDirname}/a.out",
"args": [],
"cwd": "${fileDirname}",
"terminal": "integrated",
"stdio": ["${fileDirname}/input.txt", null, null],
"preLaunchTask": "build before debug"
}
便利になった。きっとRustのデバッグも全く同じ手順でできそう。 ところでMacBook Airを買ったが最後に使ったのがSnow Leopardで全然なれない。おしゃれ力はめっちゃ上がった気がするが。