Mac M3环境下VSCode调试CMake项目时LLDB意外退出问题咨询
问题背景
我使用搭载Apple M3 Max的macOS 14.1(23B2073)系统,创建了一个C++ CMake项目:
main.cpp
#include <memory> #include <vector> int main() { std::shared_ptr<std::vector<int>> some_vec_ptr; // 在此处设置断点 return 0; }
CMakeLists.txt
cmake_minimum_required(VERSION 3.23.2) set(CMAKE_CXX_STANDARD 17) project(debug_test) add_executable(debug_test main.cpp)
随后在VSCode中打开该项目,已安装以下VSCode扩展:
- C/C++ v1.19.2 Pre-Release
- C/C++ Extension Pack v1.3.0
- CMake v0.0.17
- CMake Tools v1.17.14 Pre-Release
- CodeLLDB v1.10.0
当我使用CMake Tools调试main.cpp时,程序以错误码0x84退出,VSCode调试控制台输出相关日志。我的lldb-mi路径为/Users/xxx/.vscode/extensions/ms-vscode.cpptools-1.19.2-darwin-arm64/debugAdapters/lldb-mi/bin/lldb-mi,lldb版本为lldb-1500.0.200.58,Clang++版本为Apple clang 15.0.0。删除std::shared_ptr<std::vector<int>> some_vec_ptr;后调试恢复正常。
问题解答
1. 在哪里可以找到LLDB的错误代码列表?
LLDB的错误码分两类:
- 系统级信号对应错误码:终端执行
man signal可查看,比如132对应SIGILL; - LLDB自身定义的错误码:可查看LLDB源码中的
lldb/API/SBError.h或lldb/lldb-defines.h文件里的枚举; - 也能通过LLDB内置命令
help error获取基础错误码说明。
2. 错误代码132(0x84)的含义是什么?
0x84即十进制132,对应SIGILL信号,代表非法指令错误,意味着程序或调试器执行了当前CPU无法识别的指令,常见触发场景包括指令集不兼容、调试信息解析异常、二进制文件损坏等。
3. 为什么调试包含shared_ptr<vector<>>的代码会导致LLDB意外退出?
结合你的环境,可能的原因有:
- 预发布扩展适配bug:你使用的C/C++和CMake Tools都是预发布版本,可能存在与Apple Silicon macOS或LLDB v15的兼容性问题,处理标准库容器调试信息时崩溃;
- LLDB调试符号解析问题:Apple LLDB v15在解析
std::shared_ptr<std::vector<int>>的调试符号时,触发内部错误导致调试进程发送SIGILL退出; - lldb-mi版本不匹配:C/C++扩展自带的lldb-mi与系统LLDB版本适配不良,处理复杂类型断点时出现指令执行错误;
- 编译调试信息不足:默认CMake配置可能未生成足够调试信息,或开启了优化,导致调试器无法正确解析
shared_ptr和vector的类型信息,进而引发崩溃。
内容的提问来源于stack exchange,提问作者C Outro
相关产品推荐
相关产品推荐

