如何在M1 Mac的VSCode中使用lldb调试器调试C代码
M1 MacBook VSCode C语言调试方案
前置依赖安装
- 首先安装Xcode命令行工具,执行终端命令:
xcode-select --install,按照弹窗指引完成安装即可,该工具包含原生适配ARM64架构的clang编译器与lldb调试器 - 打开VSCode,安装官方C/C++ Extension Pack插件,不要使用第三方非官方的C调试类插件
编译配置(tasks.json)
在项目根目录的.vscode文件夹下新建tasks.json文件,配置示例如下:
{ "version": "2.0.0", "tasks": [ { "label": "clang_build_c", "type": "shell", "command": "clang", "args": [ "-g", "-arch", "arm64", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "group": { "kind": "build", "isDefault": true } } ] }
注意必须保留
-g参数生成调试信息,禁止添加-O1/-O2等编译优化参数,否则会直接导致断点失效
调试配置(launch.json)
同目录下新建launch.json文件,配置示例如下:
{ "version": "0.2.0", "configurations": [ { "name": "Clang 调试 C 程序", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "lldb", "targetArchitecture": "arm64", "preLaunchTask": "clang_build_c" } ] }
注意
preLaunchTask的值必须和tasks.json中的label值完全一致,MIMode必须设置为lldb,不要使用gdb作为调试器,gdb目前对Apple Silicon适配度极低
常见问题排查
- 确认你使用的是原生ARM64版本的VSCode,而非通过Rosetta转译运行的x86版本,转译版本无法正常调用原生lldb调试器
- 如果断点被忽略,首先确认你打的断点对应代码是运行时会被执行到的分支,不要打在内联函数、宏定义或者未被调用的代码块上
- 如果弹出架构不兼容报错,确认编译参数中的
-arch arm64未被修改,launch.json中的targetArchitecture为arm64
内容的提问来源于stack exchange,提问作者hmars
相关产品推荐
相关产品推荐

