M1 Mac VSCode中LLDB调试简单C程序异常缓慢,求解决办法
M1 macOS上VSCode调试C程序卡顿的排查与解决
先理清楚macOS上相关工具的关系,方便你理解:
- macOS默认用Clang(属于LLVM项目)作为C/C编译器,替代了传统的GCC;LLDB是LLVM配套的调试器,VSCode的C/C插件默认靠它来调试;
lldb-mi是LLDB的一个接口包装,供VSCode这类IDE调用。
一、基础环境检查
- 把VSCode和C/C++插件更到最新版,旧版本大概率存在M1适配的bug。
- 单独验证编译器和调试器是否正常:
- 终端输入
clang -v,查看输出里是否有arm64-apple-darwin字样,确认是适配M1的版本。 - 手动编译调试测试:用
clang -g 你的程序.c -o 程序名生成带调试符号的可执行文件,然后输入lldb ./程序名启动调试,用n单步跳过、s步入,看看LLDB本身会不会卡顿。如果LLDB单独使用正常,问题出在VSCode的配置或插件;如果LLDB也卡,就是系统或工具链的问题。
- 终端输入
二、排查VSCode调试配置
- 简化
launch.json,关闭不必要的变量加载选项,减轻调试器负担:{ "version": "0.2.0", "configurations": [ { "name": "clang - 编译调试当前文件", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "lldb", "setupCommands": [ { "description": "禁用自动变量加载", "text": "-enable-pretty-printing", "ignoreFailures": true }, { "text": "settings set target.load-script-from-symbol-file false", "ignoreFailures": true } ], "preLaunchTask": "C/C++: clang 编译当前文件" } ] } - 检查
tasks.json的编译参数,不要加多余的优化选项,仅保留调试符号:{ "tasks": [ { "type": "cppbuild", "label": "C/C++: clang 编译当前文件", "command": "/usr/bin/clang", "args": [ "-fcolor-diagnostics", "-fansi-escape-codes", "-g", // 仅保留调试符号,默认无优化(-O0),不要加-O1/-O2等参数 "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": true }, "detail": "调试器生成的任务" } ], "version": "2.0.0" } - 暂时关闭VSCode里的无关插件(比如GitLens、各类格式化插件),排查是否是插件冲突导致的卡顿。
三、针对性解决问题
- 针对
lldb-mi占满CPU的情况:- 尝试更换调试器接口实现,在
launch.json中指定miDebuggerPath:
或者改用"miDebuggerPath": "/usr/bin/lldb-mi"lldb-vscode(新版VSCode支持),将type改为lldb:{ "name": "lldb - 调试当前文件", "type": "lldb", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "cwd": "${fileDirname}" } - 清理LLDB缓存:删除
~/.lldb目录下的所有文件,重启VSCode后再尝试调试。
- 尝试更换调试器接口实现,在
- 针对行号偏移的问题:
- 绝对不要添加编译优化参数(如
-O1),优化会让编译器重排代码,导致行号不匹配。 - 检查代码中的预处理指令(比如
#ifdef、大量#include),可以用clang -E 你的程序.c > 预处理后的代码.c,查看预处理后的行号与原文件是否对应。
- 绝对不要添加编译优化参数(如
四、系统层面修复
- 将Ventura系统升级到最新版本(比如13.5.2),13.2.1存在一些LLDB适配的已知bug,升级后大概率能解决问题。
- 重新安装Xcode命令行工具:先输入
sudo rm -rf /Library/Developer/CommandLineTools删除旧版本,再输入xcode-select --install重新安装,确保工具链完全适配M1。
内容的提问来源于stack exchange,提问作者Jason Boyd
相关产品推荐
相关产品推荐

