生きる

助けて

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).

調べてみると、現在のところMicrosoftC/C++拡張(ms-vscode.cpptools)のデバッグ機能はApple M1チップでネイティブに動作するデバッガには対応していないらしい。

Support Apple Silicon ARM64 architecture natively for debugger · Issue #7035 · microsoft/vscode-cpptools · GitHub

このスレッドを見ると、対処法としては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のドキュメントに書いてある通りに書いてある。

これでちゃんとデバッグできるようになりました。めでたしめでたし。