当前位置: 首页 > news >正文

Antigravity 使用 LLDB 调试 Qt6 MinGW

开发环境

  • 编辑器: Antigravity
  • 调试器扩展: CodeLLDB (vadimcn.vscode-lldb-1.12.1)
  • Qt 版本: Qt 6.10.2
  • 编译器: MinGW 13.1.0 64-bit
  • 操作系统: Windows

关键路径

Qt SDK:           D:\Qt\6.10.2\mingw_64\
Qt Creator:       D:\Qt\Tools\QtCreator\
MinGW:            D:\Qt\Tools\mingw1310_64\
CodeLLDB Python:  c:\Users\YourUserName\.antigravity\extensions\vadimcn.vscode-lldb-1.12.1\lldb\Lib\site-packages

核心解决方案

问题背景

在 Antigravity 中使用 LLDB 调试 Qt 程序时,默认无法正确显示 QStringQListQMap 等 Qt 类型的内容。

解决方案概述

通过两个关键步骤实现完美的 Qt 类型调试支持:

  1. 安装 pygdbmi - Qt 官方 lldbbridge.py 脚本的依赖
  2. 配置 lldbbridge.py - 使用 Qt Creator 自带的官方调试脚本

这种方案的优势:

  • 完整的 Qt 类型支持 - 所有 Qt 类型开箱即用
  • 官方维护 - Qt 官方维护,跟随 Qt 版本更新
  • 零维护成本 - 不需要手动编写和维护格式化脚本
  • 最佳兼容性 - 与 Qt Creator 使用相同的调试体验

详细安装步骤

launch.json 初始配置

.vscode/launch.json 中配置:

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Debug Qt6MinGW","type": "lldb","request": "launch","program": "${command:cmake.launchTargetPath}","args": [],"cwd": "${workspaceFolder}",        // 环境变量 - 添加 Qt 和 MinGW 路径"env": {"PATH": "${env:PATH};D:\\Qt\\6.10.2\\mingw_64\\bin;D:\\Qt\\Tools\\mingw1310_64\\bin"}}]
}

步骤 1: 定位 CodeLLDB 的 Python 环境

CodeLLDB 使用内置的 Python 环境,路径为:

c:\Users\Administrator\.antigravity\extensions\vadimcn.vscode-lldb-1.12.1\lldb\Lib\site-packages

注意:这个路径会因为:用户名不同、计算机名不同、CodeLLDB 版本不同而有所变化。

如何找到你的 Python site-packages 路径?

启动lldb调试器后,在DebugConsole窗口执行命令获取:

script sys.executable
'c:\\Users\\Administrator\\.antigravity\\extensions\\vadimcn.vscode-lldb-1.12.1\\adapter\\codelldb.exe'
script sys.version
'3.12.7 (main, Oct 16 2024, 00:21:24) [MSC v.1929 64 bit (AMD64)]'
script sys.path
['c:/Users/Administrator/.antigravity/extensions/vadimcn.vscode-lldb-1.12.1/lldb/bin', 'c:/Users/Administrator/.antigravity/extensions/vadimcn.vscode-lldb-1.12.1', 'D:\\Qt\\Tools\\QtCreator\\share\\qtcreator\\debugger', 'D:/Qt/Tools/QtCreator/share/qtcreator/debugger', 'c:/Users/Administrator/.antigravity/extensions/vadimcn.vscode-lldb-1.12.1/adapter/scripts', 'c:/Users/Administrator/.antigravity/extensions/vadimcn.vscode-lldb-1.12.1/lldb/lib/lldb-python', 'c:\\Users\\Administrator\\.antigravity\\extensions\\vadimcn.vscode-lldb-1.12.1\\lldb\\bin\\python312.zip', 'c:\\Users\\Administrator\\.antigravity\\extensions\\vadimcn.vscode-lldb-1.12.1\\lldb\\DLLs', 'c:\\Users\\Administrator\\.antigravity\\extensions\\vadimcn.vscode-lldb-1.12.1\\lldb\\Lib', 'c:\\Users\\Administrator\\.antigravity\\extensions\\vadimcn.vscode-lldb-1.12.1\\adapter', 'c:\\Users\\Administrator\\.antigravity\\extensions\\vadimcn.vscode-lldb-1.12.1\\lldb', 'c:\\Users\\Administrator\\.antigravity\\extensions\\vadimcn.vscode-lldb-1.12.1\\lldb\\Lib\\site-packages', '.']

步骤 2: 安装 pygdbmi 模块

在Antigravity的Terminal执行安装命令

pip install pygdbmi --target="c:\Users\Administrator\.antigravity\extensions\vadimcn.vscode-lldb-1.12.1\lldb\Lib\site-packages" --no-deps

重要参数说明:

  • --target - 指定安装到 CodeLLDB 的 Python 环境
  • --no-deps - 不安装依赖包(pygdbmi 没有必需依赖)

配置调试器

项目结构

your-qt-project/
├── .vscode/
│   └── launch.json          # 调试配置
├── CMakeLists.txt
├── main.cpp
└── ...

launch.json 完整配置

.vscode/launch.json 中配置:

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Debug Qt6MinGW","type": "lldb","request": "launch","program": "${command:cmake.launchTargetPath}","args": [],"cwd": "${workspaceFolder}",        // 环境变量 - 添加 Qt 和 MinGW 路径"env": {"PATH": "${env:PATH};D:\\Qt\\6.10.2\\mingw_64\\bin;D:\\Qt\\Tools\\mingw1310_64\\bin"},// 初始化命令 - 加载 Qt 官方调试脚本"initCommands": ["command script import D:\\Qt\\Tools\\QtCreator\\share\\qtcreator\\debugger\\lldbbridge.py"]}]
}

配置说明

1. program

"program": "${command:cmake.launchTargetPath}"
  • 自动获取 CMake 构建的目标可执行文件路径
  • 确保 CMake Tools 扩展已安装并配置

2. env - 环境变量

"env": {"PATH": "${env:PATH};D:\\Qt\\6.10.2\\mingw_64\\bin;D:\\Qt\\Tools\\mingw1310_64\\bin"
}
  • 添加 Qt 的 DLL 路径
  • 添加 MinGW 的运行时库路径
  • 确保程序能找到所需的动态链接库

3. initCommands - Qt 调试脚本

"initCommands": ["command script import D:\\Qt\\Tools\\QtCreator\\share\\qtcreator\\debugger\\lldbbridge.py"
]

路径格式注意事项:

  • Windows 路径可以使用 双反斜杠 \\
  • 或使用 正斜杠 / (推荐,更简洁)
  • 不要使用单反斜杠 \ (会被转义)

验证脚本路径是否存在:

dir "D:\Qt\Tools\QtCreator\share\qtcreator\debugger\lldbbridge.py"

CMakeLists.txt 示例

cmake_minimum_required(VERSION 3.16)
project(MyQtApp VERSION 1.0 LANGUAGES CXX)# C++ 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# Qt 路径(根据实际情况修改)
set(CMAKE_PREFIX_PATH "D:/Qt/6.10.2/mingw_64")# 查找 Qt 组件
find_package(Qt6 REQUIRED COMPONENTS Core Widgets# 根据需要添加其他组件:Gui, Network, Sql 等
)# 自动处理 Qt 元对象编译
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)# 源文件
add_executable(${PROJECT_NAME}main.cpp# 添加其他源文件
)# 链接 Qt 库
target_link_libraries(${PROJECT_NAME}Qt6::CoreQt6::Widgets
)# Debug 模式配置
if(CMAKE_BUILD_TYPE STREQUAL "Debug")# 启用调试信息if(MSVC)target_compile_options(${PROJECT_NAME} PRIVATE /Zi)else()target_compile_options(${PROJECT_NAME} PRIVATE -g)endif()
endif()# Windows 配置(可选)
if(WIN32)# 设置为 GUI 应用(不显示控制台)# set_target_properties(${PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE TRUE)
endif()

测试代码

创建一个测试文件 main.cpp

#include <QApplication>
#include <QMainWindow>
#include <QString>
#include <QList>
#include <QMap>
#include <QVariant>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);// 测试各种 Qt 类型QString str1 = "Hello Qt6!";QString str2 = "你好,世界!";QString empty = "";QByteArray bytes = "Test ByteArray";QList<int> numbers = {1, 2, 3, 4, 5};QList<QString> strings = {"Apple", "Banana", "Cherry"};QMap<QString, int> ages;ages["Alice"] = 30;ages["Bob"] = 25;ages["Charlie"] = 35;QVariant variant1 = 42;QVariant variant2 = "String in QVariant";QVariant variant3 = 3.14;// 在这里设置断点进行测试qDebug() << "Testing Qt types debugging...";qDebug() << str1;qDebug() << "Numbers:" << numbers;qDebug() << "Ages:" << ages;// 简单窗口(可选)QMainWindow window;window.setWindowTitle("Qt Debug Test");window.resize(400, 300);window.show();return app.exec();
}

调试控制台命令

在调试时,可以在 Debug Console 中使用 LLDB 命令:

# 打印 QString 变量
p str1# 查看 QList 内容
p numbers# 查看变量类型
ptype str1# 查看已加载的 Qt 格式化器
type summary list QString
type summary list QList# 查看所有 Qt 相关的格式化器
type category list

为什么需要 pygdbmi?

Qt 官方脚本的依赖关系

lldbbridge.py 是 Qt Creator 提供的 LLDB 调试辅助脚本,它的作用是:

  1. 注册 Qt 类型格式化器
    • QString、QByteArray 等基础类型
    • QList、QVector、QMap 等容器类型
    • QVariant、QObject 等核心类型
  2. 提供类型提示和可视化
    • 展开容器内容
    • 显示对象层次结构
    • 格式化显示复杂类型
  3. 依赖 pygdbmi 模块
    • pygdbmi 是 GDB Machine Interface 的 Python 实现
    • 虽然名字带 "gdb",但在 LLDB 中用于解析调试器输出
    • 提供了统一的调试器通信接口

完整的测试项目模板

项目结构

qt-debug-test/
├── .vscode/
│   └── launch.json
├── CMakeLists.txt
├── main.cpp
└── README.md

main.cpp

#include <QApplication>
#include <QMainWindow>
#include <QPushButton>
#include <QString>
#include <QList>
#include <QMap>
#include <QVariant>
#include <QDebug>class TestWindow : public QMainWindow {Q_OBJECT
public:TestWindow() {setWindowTitle("Qt Debug Test");resize(400, 300);auto button = new QPushButton("Click to Test", this);button->setGeometry(100, 100, 200, 50);connect(button, &QPushButton::clicked, this, &TestWindow::onButtonClicked);}private slots:void onButtonClicked() {QString message = "Button clicked!";QList<int> numbers = {1, 2, 3, 4, 5};qDebug() << message;  // 在这里设置断点qDebug() << "Numbers:" << numbers;}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);// 测试各种类型QString str = "Hello Qt6!";QList<QString> list = {"Apple", "Banana", "Cherry"};QMap<QString, int> map = {{"A", 1}, {"B", 2}, {"C", 3}};qDebug() << str;  // 设置断点测试TestWindow window;window.show();return app.exec();
}

LLDB 常用命令

# 变量相关
p variable_name              # 打印变量值
po object                    # 打印对象描述
ptype variable_name          # 打印变量类型
frame variable               # 显示当前帧所有变量# 断点相关
b main.cpp:42               # 在 main.cpp 第 42 行设置断点
b MyClass::myMethod         # 在方法上设置断点
breakpoint list             # 列出所有断点
breakpoint delete 1         # 删除断点 1
breakpoint disable 2        # 禁用断点 2# 执行控制
c (continue)                # 继续执行
n (next)                    # 单步跳过
s (step)                    # 单步进入
finish                      # 执行到当前函数返回# 线程相关
thread list                 # 列出所有线程
thread select 2             # 切换到线程 2
thread backtrace            # 显示当前线程调用栈# 内存相关
x/10xb address             # 以十六进制查看 10 字节内存
memory read address        # 读取内存内容
http://www.jsqmd.com/news/346345/

相关文章:

  • Java做人工智能:JBoltAI框架多模态与OCR技术解度
  • 在线教育互动课堂开发实战|从技术选型到高互动体验打造
  • 广州雅思封闭营哪家环境好、管理严?2026寒假机构避坑指南 - 讯息观点
  • 十大正规股票配资平台靠谱吗:从实盘交易与口碑看 - 资讯焦点
  • 静态住宅ISP代理:企业如何选择住宅代理IP?2026深度解析指南
  • 18-iptables防火墙
  • 狂飙的 165k Star:OpenClaw 开启个人 AGI 时代,让 AI 真正“接管”你的电脑
  • 长沙本地生活代运营榜:三十六行长沙分公司 9.99 分领跑 - 野榜数据排行
  • 豆瓣电影数据分析可视化系统 基于Python Flask+MySQL实现多维度电影数据洞察
  • 同程国际航班变更通知体系深度解析:技术、渠道与服务的全流程保障 - 资讯焦点
  • 用Python来学微积分23-微分中值定理 - 详解
  • 2026上海财税公司推荐|靠谱合规,口碑优选高性价比 - 品牌智鉴榜
  • PyTorch DDP官方文档学习笔记(核心干货版)
  • 2026年蚌埠蚌山区优质装修公司综合评估与推荐 - 2026年企业推荐榜
  • 2026论文通关指南:5款降重降AI工具实测,谁是Turnitin的克星? - 品牌观察员小捷
  • 2026年口碑好的FCL快速限流器/DDX1短路电流限制器厂家实力及用户口碑排行榜 - 深度智识库
  • 2026国内最新出国留/1+3/2+2/3+1/2+3/HND项目TOP5推荐:广东等地优质机构权威榜单发布,多元模式适配英澳等国留学需求 - 品牌推荐2026
  • 价格波动不踩坑,履约有保障——同程凭体系化机制,筑牢出行安心防线 - 资讯焦点
  • 权威榜单|接地电阻测试仪行业十大品牌推荐(2026排行榜) - 品牌推荐大师1
  • 四大旅行平台价格波动相关服务机制对比分析 - 资讯焦点
  • 2026年口碑优秀的FCL快速限流器/DDX1短路电流限制器厂家实力及用户口碑综合评述 - 深度智识库
  • 三家股票配资平台哪家安全靠谱?实测推荐正规实盘交易公司 - 资讯焦点
  • gpg加密命令
  • [信息论与编码理论专题-26]:信息如何被量化的?它的意义以及用途?
  • 联程转机服务痛点拆解:四大旅行平台短板全景观察 - 资讯焦点
  • 国内三家正规股票配资平台排行榜:安全、实盘、靠谱平台全解析 - 资讯焦点
  • JS 对象遍历全解析
  • 同程旅行多段联程与转机支持分析:全流程体系化服务的实践与成效 - 资讯焦点
  • 文档数据库替换方案盘点:MongoDB兼容性与信创适配指南
  • 广州托福暑期寒假集训营、封闭营推荐,环境好还能管住孩子?(2026最新版) - 讯息观点