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 文件,写具体脚本
import lldbdef 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏反云手机检测方案

游戏风险环境&#xff0c;是指独立于原有设备或破坏设备原有系统的环境。常见的游戏风险环境有&#xff1a;云手机、虚拟机、虚拟框架、iOS越狱、安卓设备root等。 这类风险环境可以为游戏外挂、破解提供所需的高级别设备权限&#xff0c;当游戏处于这些风险环境下&#xff0c…

CCIE-04-Layer2_WAN_TS

目录 实验条件网络拓朴 路由器配置开始排错&#xff0c; 要求R11可以访问R17的telnet检查R12和R11的e0/0口&#xff0c;有发现检查R17和R12的S4/0口&#xff0c; 有发现ping R17环回口地址&#xff0c;发现不通telnet R17环回口IP 实验条件 网络拓朴 路由器配置 R11 4组以太网…

【ARM】FPU,VFP,ASE,NEON,SVE...是什么意思?

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 对执行浮点和SIMD操作的逻辑的各种名称的缩写词进行简要解释。 2、 问题场景 Arm处理器内核中有用于执行浮点和SIMD操作的逻辑&#xff0c;有各种名称。它们通常是一系列的缩写形式&#xff0c;因此本文旨在对每…

. ./ bash dash source 这五种执行shell脚本方式 区别

实际上,., ./, bash, dash, source 是五种不同的方式来执行 shell 脚本,它们之间有一些区别。 .(点号)或 source 命令:这两个命令是等价的,它们都是 Bash shell 内置的命令。它们用于在当前 shell 环境中执行脚本。当使用 . script.sh 或 source script.sh 命令来执行脚本…

25.6 MySQL 子查询

1. 子查询 子查询(Subquery): 是SQL查询语句中的一个重要概念, 它允许在一个查询语句(主查询)中嵌套另一个查询语句(子查询). 这意味着一个查询可以作为另一个查询的输入或条件, 子查询可以出现在SQL语句的多个位置, 例如SELECT, FROM, WHERE等子句中.子查询通常用于以下几种情…

网络安全的几个关键领域

网络安全是一个复杂且多维度的领域&#xff0c;涵盖了多个关键领域&#xff0c;涉及到信息保护、网络防护、应用安全、用户教育以及物理安全等多个方面。这些关键领域相互交织&#xff0c;共同构成了网络安全这一宏大且细致入微的领域。 今天德迅云安全就分享下网络安全的几个…

【大模型学习记录】db-gpt源码安装问题汇总

1、首次源码安装时安装的其实dbgpt到conda环境中&#xff0c;会将路径一起安装。 如果有其他的路径使用同样的conda环境会报错&#xff0c;一直读取的就是原先的路径的内容。需要自己新创建一个conda env 2、界面中配置知识库问答时&#xff0c;报错 # 1、报的错如下&#x…

移动代理:具有视觉感知能力的自主多模态移动设备代理

Mobile-Agents: Autonomous Multi-modal Mobile Device Agent With Visual Perception 摘要 本文介绍了Mobile-Agents&#xff0c;这是一个自主的多模态移动设备代理&#xff0c;它首先利用视觉感知工具准确地识别和定位移动应用程序前端界面中的视觉和文本元素。借助这种感知…

Covalent Network借助大规模的历史Web3数据集,推动人工智能发展

人工智能在众多领域中增强了区块链的实用性&#xff0c;反之亦然&#xff0c;区块链确保了 AI 模型所使用的数据的来源和质量。人工智能带来的生产力提升&#xff0c;将与区块链系统固有的安全性和透明度融合。 Covalent Network&#xff08;CQT&#xff09;正位于这两项互补技…

Docker 学习笔记

Play With Docker一个免费使用的基于web界面的Docker环境 常用docker命令 可使用docker COMMAND --help查看命令的用法 Docker镜像相关 1、docker image pull&#xff1a;用于下载镜像&#xff0c;镜像从远程镜像仓库服务的仓库中下载&#xff0c;默认从Docker Hub的仓库中拉…

JS+CSS3点击粒子烟花动画js特效

JSCSS3点击粒子烟花动画js特效 JSCSS3点击粒子烟花动画js特效

ES-Hadoop:将Elasticsearch与Hadoop无缝集成的开源工具

hadoop 大数据技术之Hive&#xff08;3&#xff09;PyHive pyhdfs ES,Elasticsearch https://zhuanlan.zhihu.com/p/595505475?utm_id0 Hadoop hdfs 、hive、spark https://blog.51cto.com/u_16099278/6901638 ES-Hadoop&#xff1a;将Elasticsearch与Hadoop无缝集成的开源工…

idea import的maven类报红

idea 报红/显示红色的原因 一般报红&#xff0c;显示红色&#xff0c;是因为 idea 在此路径下&#xff0c;找不到这个类。 找到是哪个 jar 包的类导致 idea 报红 点击报红的路径的上一层&#xff0c;进入jar 包。比如&#xff1a; import com.aaa.bbb.ccc.DddDto;这个 impo…

Qt + HTTP 线程交互类封装

介绍 QT的HTTP模块封装的交互类&#xff0c;线程运行。使用时添加自己的业务逻辑即可 代码 头文件 /*** file httpcontroller.h* brief 云台相机的协议交互类* author xintong-zhou* date 2024-03-13*/#ifndef HTTPCONTROLLER_H #define HTTPCONTROLLER_H#include <QNet…

服务器上配置nginx

如何在 Ubuntu 20.04 上安装 Nginx - 知乎 (zhihu.com) 就像是在本机进行下载配置一般&#xff0c;成功后你自己可以通过浏览器输入网址访问&#xff0c;本地环回地址或者连接上互联网后的ip地址&#xff08;那么处于同一局域网的其他设备也可以访问&#xff09;。 在本机部署…

Spring AOP和AspectJ AOP区别

Spring AOP&#xff08;Aspect-Oriented Programming&#xff09;和 AspectJ AOP 是两种不同的 AOP 实现方式&#xff0c;它们在实现上有一些区别。下面是它们之间的主要区别&#xff1a; 基于代理 vs 字节码增强&#xff1a; Spring AOP&#xff1a; Spring AOP 是基于代理的…

TikTok云手机是什么原理?

随着社交媒体的快速发展和普及&#xff0c;TikTok已成为全球最受欢迎的短视频平台之一&#xff0c;吸引了数以亿计的用户。在TikTok上&#xff0c;许多用户和内容创作者都希望能够更灵活地管理和运营多个账号&#xff0c;这就需要借助云手机技术。那么&#xff0c;TikTok云手机…

windows跳板机配置(端口转发)

目录 前言操作步骤端口防火墙开放测试参考 前言 跳板机一般用于异构网络间的中转站&#xff0c;比如对方在防火墙上只给你开放了一台服务器的权限&#xff0c;你无法访问对方局域网的其它主机&#xff0c;但你能访问的这台服务器则有权限访问其它主机。那么这台服务器就可以作…

基于python失物招领系统-安卓-flask-django-nodejs-php

随着现在网络的快速发展&#xff0c;网络的应用在各行各业当中&#xff0c;利用网络来做这个失物招领的网站&#xff0c;随之就产生了“失物招领 ”&#xff0c;这样用户就可以利用平台来发布信息。 对于本失物招领 的设计来说&#xff0c; 它是应用mysql数据库、安卓等技术动…

GitHub与Git命令使用笔记

GitHub与Git命令使用笔记 文章目录 GitHub与Git命令使用笔记上传本地的新项目到github1. 创建新的GitHub仓库2. 初始化本地项目目录3. 将本地仓库关联到GitHub4. 推送本地代码到GitHub上传本地项目到GitHub时发生冲突 将默认分支名称从master改为main 上传本地的新项目到github…