MacOS Xcode 使用LLDB调试Qt的 QString

环境:

  • MacOS: 14.3
  • Xcode: Version 15.0
  • Qt:Qt 6.5.3

前言

Xcode 中显示 预览 QString 特别不方便, 而Qt官方的 lldb 脚本debugger/lldbbridge.py一直加载失败,其他第三方的脚本都 不兼容当前的 环境。所以自己研究写了当前的教程。

当前方法同样适用于其他非 苹果内置类型的预览和显示。

原始效果如下:

优化后的效果:

创建步骤:

  1. 检测 ~/.lldbinit 文件
    判断文件是否存在,不存在则创建。
    每次 lldb 启动都会 加载 ~/.lldbinit 文件的命令,可以理解为存在硬盘里面的默认用户配置。

  2. 创建 python 脚本文件
    在任意路径创建一个python 文件。 我这里创建的python文件的路径为:~/Documents/source/PYTest/lldb_qt_value.py

  3. ~/.lldbinit 写入命令
    这里lldb 在初始化的时候就会导入 这个python文件

    # 加载 lldb 预览 qt 内置成员的 脚本
    command script import '~/Documents/source/PYTest/lldb_qt_value.py'
    
  4. 回到 lldb_qt_value.py 文件,写具体脚本

python 复制代码
import lldb

def QString_summary(value, internal_dict):
    summary = value.GetChildMemberWithName('d').GetChildMemberWithName('ptr').GetSummary()
    if summary == "Summary Unavailable":
        return "NULL"
    return summary[2:-1]

# lldb 的 默认初始化 函数
def __lldb_init_module(debugger, internal_dict):
    debugger.HandleCommand('type summary add QString -F lldb_qt_value.QString_summary')
    print('lldb_qt_value.py 正在为您服务.')

具体逻辑如下:

  • lldb 初始化调用 __lldb_init_module 函数
  • 创建一个 QString 的钩子函数。函数为 lldb_qt_value 文件的 QString_summary方法。
  • 初始化 会在控制台打印 'lldb_qt_value.py 正在为您服务.'
  • QString 类型被预览时(或者控制台输入 pop 命令) 会进入这个函数QString_summary
  • 获取我们准备替换显示的值, 获取路径为test1 -> d -> ptr -> summary.
    具体对应这个代码 summary = value.GetChildMemberWithName('d').GetChildMemberWithName('ptr').GetSummary()
  • 判断如果是空的 就返回 NULL
  • 不为空则 去除 前面两个字符 u" 和最后 一个 "。 从u"ABC测试" -> ABC测试
  • 返回处理后的值,供lldb 预览显示

结果

QStringstd::vector<QString> 和 其他包含QString的类型都可以正确格式化。

如果需要其他 Qt 类型或者 自定义类型都可以用此方法 显示。

最终脚本预览如下:

参考

https://lldb.llvm.org/use/variable.html
https://lldb.llvm.org/python_api/lldb.SBValue.html

相关推荐
T0uken2 小时前
【QT Quick】C++交互:QML对象操作
c++·qt·交互
barbyQAQ4 小时前
Qt源码阅读——事件循环
开发语言·数据库·qt
Leanfeng_K5 小时前
【报错】mac m1 gateway 报错
spring·macos·spring cloud·gateway·报错
T0uken6 小时前
【QT Qucik】C++交互:接收QML信号
c++·qt·交互
martian6656 小时前
QT开发:基于Qt实现的交通信号灯模拟器:实现一个带有倒计时功能的图形界面应用
开发语言·qt
缘友一世6 小时前
macOS .bash_profile配置文件优化记录
开发语言·macos·bash
tekin6 小时前
macos 中使用macport安装,配置,切换多版本php,使用port 安装php扩展方法总结
开发语言·macos·php·port·mac多版本php安装管理·port-select
s_little_monster7 小时前
【QT】QT入门
数据库·c++·经验分享·笔记·qt·学习·mfc
一个很帅的帅哥7 小时前
独立显卡和集成显卡——以MAC电脑为例
macos·电脑
localbob7 小时前
uniapp超全user-agent判断 包括微信开发工具 hbuilder mac windows 安卓ios端及本地识别
windows·macos·uni-app·user-agent