VSCodeのC/C++拡張(ms-vscode.cpptools)のデバッグ機能がM1 Macに対応していない件
2ヶ月ぐらい前に届いたMacBook Air (M1, 2020)をやっと使い始めている。VSCodeがもうApple M1チップにネイティブ対応しているらしいので、設定をすることにした。今のところプロコンぐらいしか使い道が思い浮かばないので、すごく本格的なことができる必要はない。C/C++のコードが書けて、コンパイルできて、デバッグできればよい。
とりあえずVSCodeのドキュメントに書いてある通りに進めた。コンパイラとデバッガはAppleのCommand Line Toolsをインストールすると入っているClangとLLDBを使う。
Configure VS Code for Clang/LLVM on macOS
ビルド(コンパイル)するところまではよかったが、デバッグのところでこんなエラーが出てうまくいかなかった。
Warning: Debuggee TargetArchitecture not detected, assuming x86_64. ERROR: Unable to start debugging. Unexpected LLDB output from command "-exec-run". process exited with status -1 (attach failed ((os/kern) invalid argument)) The program '/Users/sitorasu/projects/helloworld/helloworld' has exited with code 42 (0x0000002a).
調べてみると、現在のところMicrosoftのC/C++拡張(ms-vscode.cpptools)のデバッグ機能はApple M1チップでネイティブに動作するデバッガには対応していないらしい。
このスレッドを見ると、対処法としてはrosettaを使って全部x86_64で完結させる(?)か、すでにApple M1チップに対応している別の拡張機能を使うのがいいらしい。前者はよくわからなかったので後者を選択することにした。別の拡張機能というのはCodeLLDB(vscode-lldb)というやつ。VSCodeの拡張機能検索でlldbとか調べれば出る。
GitHub - vadimcn/vscode-lldb: A native debugger extension for VSCode based on LLDB
どうやらこっちは対応済みらしい。
Please support Apple silicon (M1, arm64-darwin) · Issue #397 · vadimcn/vscode-lldb · GitHub
launch.jsonにはこんな感じで書く。
{ "version": "0.2.0", "configurations": [ { "name": "vscode-lldb", "type": "lldb", "request": "launch", "program": "${workspaceFolder}/${fileBasenameNoExtension}", "args": [], "cwd": "${workspaceFolder}", "preLaunchTask": "clang++ build active file" } ] }
"type": "lldb"
と指定することで(Microsoftのではなく)CodeLLDBがデバッグに使われるようになるっぽい。ちなみに、tasks.jsonには上のVSCodeのドキュメントに書いてある通りに書いてある。
これでちゃんとデバッグできるようになりました。めでたしめでたし。