M2芯片Mac使用LLVM调试C++代码时卡顿且lldb-mi进程占用高
问题
我编写了如下简单的C++代码:
#include <iostream> #include <map> int main() { std::map<int, int> a; for (int i=0; i<10; i++) a[i] = i+1; }
使用LLVM(Apple官方版本和brew安装版本)调试该代码时,程序出现卡顿。即使在VS Code中停止调试,后台仍有一个名为lldb-mi的进程保持100%的CPU占用率。
环境信息:
- 操作系统:macOS Monterey 12.5
- 设备:搭载M2处理器的MacBook Air
我的tasks.json文件内容:
{ "tasks": [ { "type": "cppbuild", "label": "C/C++: clang++ build active file", "command": "/usr/bin/clang++", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "Task generated by Debugger." } ], "version": "2.0.0" }
解决方法
强制终止残留进程
打开终端,执行ps aux | grep lldb-mi找到进程ID(PID),然后用kill -9 <PID>强制杀死进程;也可以通过「活动监视器」搜索lldb-mi,右键选择「强制退出」。调整VS Code调试配置(launch.json)
如果没有launch.json,在VS Code的调试面板中创建该文件,添加以下配置:{ "version": "0.2.0", "configurations": [ { "name": "clang++ - 生成和调试活动文件", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "lldb", "miDebuggerPath": "/usr/bin/lldb-mi", "setupCommands": [ { "description": "禁用STL自动格式化(避免卡顿)", "text": "-disable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "C/C++: clang++ build active file" } ] }关键修改:将默认的
-enable-pretty-printing改为-disable-pretty-printing,STL容器的自动格式化在M系列芯片上可能触发兼容性问题导致卡顿。更新工具版本
- 更新Xcode Command Line Tools:终端执行
xcode-select --install,或打开Xcode进入「设置-通用-软件更新」检查更新; - 若使用brew安装的LLVM,执行
brew update && brew upgrade llvm,确保工具版本适配M2芯片和Monterey系统。
- 更新Xcode Command Line Tools:终端执行
优化编译参数
在tasks.json的args中添加C++标准版本参数,确保STL实现的调试信息兼容性:"args": [ "-g", "-std=c++17", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}" ]切换到原生LLDB调试
在launch.json中移除miDebuggerPath,并确保MIMode设置为lldb,使用VS Code原生LLDB集成而非lldb-mi适配器,避免mi层的兼容性问题。
内容的提问来源于stack exchange,提问作者Jiawei Lu
相关产品推荐
相关产品推荐

