You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:10:29