iOS开发进阶(二十):Xcode 断点调试详解

文章目录

    • 一、前言
    • 二、断点调试技巧
      • 2.1 设置断点
      • 2.2 断点的自定义设置
      • 2.3 断点类型

一、前言

所谓断点,其实就是一个让应用暂停运行的机制,这是为了方便开发人员执行调试,查看寄存器的某些值。既然设置了断点,可以让应用停在某一时刻,那么这一时刻应用所处的运行环境便一目了然,这个环境就是案发现场,而断点就是帮助开发人员破案的工具。这个时候开发人员便可以使用各项调试命令,而编译器则会反馈相应线索。

Xcode编译器允许开发人员在代码中的任意位置设置断点,但是如何打断点也是一门手艺,有些断点的设置是毫无意义的,比如将断点设置在了一处声明某个常量的地方,那么编译器便会跳过这处,直到它遇见真正的可执行指令处。

二、断点调试技巧

与断点协同破案的便是断点导航器。下面讲述一些基本的断点调试技巧:

2.1 设置断点

设置断点,就不说了,大家都知道,在你想要调试的代码处点击设置就行了。通过快捷键"Command+"也可以。

2.2 断点的自定义设置

(1)在设置断点的地方,右击该断点,会弹出一个栏,选择Edit Breakpoint,可以对断点进行自定义设置,如下图2-1所示。

在这里插入图片描述

(2)点击Edit Breakpoint选项后,弹出如下设置框

2-2

蓝色对勾后面的,表示当前断点所处的位置。至于代码行数显示你可以在菜单栏Xcode->Preferences->Test Editing->勾选Line Numbers,将代码行数字显示出来。将对勾抹去,表示该断点失效。

  • Condition: 指的是条件表达式,该项允许我们对断点生效设置条件,表示当满足某一特定条件的前提下,该断点才生效。(该条件的录入,不能够识别预处理的宏定义,也不能识别断点作用域之外的变量和方法)。

  • Ignore:忽略次数。它指定了在断点生效,应用暂停之前,代码忽略断点的次数。如果希望应用运行一段时间后断点才生效,那么就可以使用这个选项。比如说在调试某一循环体的时候。

  • Action: 动作。它表示当断点生效时,Xcode作出反应后的行为动作。点击右边的Add Action选项会弹出如下图。

在这里插入图片描述

图中所示红色方框中的选项,可以让指定哪一种动作。默认的是Debugger Command。还有以下几种动作供选择,下面逐一介绍。

  1. AppleScript
    它是苹果提供的一种脚本语言,用来执行一些预先指定的行为。选中该选项,将会出现如下图所示的AppleScript语言的输入框。

2-4

以上设置将弹出一个显示“Hello World!”的对话框。点击Compile按钮后,如果没有错误,会显示成功信息。而点击Test按钮,会测试运行效果,如下图所示。

2-5

至于红色方框中的内容是三种特殊符号相对应的定义。

符号标记定义
@expression@LLDB表达式
%B断点的名称
%H遇到该断点的次数
  1. Capture GPU Frame
    这个功能用于当断点生效时,捕获GPU当前所绘制的帧。该功能是辅助图形调试的。

  2. Debugger Command
    默认的选项,可以让断点执行LLDB调试命令。

  3. Log Message
    使用Log命令可以生成消息队列,将相关的消息输出到控制台上,还有一个Speak Message选项,可以播报消息。

  4. Shell Command
    该动作接收一个命令文件和参数列表。如下图2-6所示

在这里插入图片描述

命令文件必须是一个可执行的二进制程序或者脚本。可以复制粘贴输入路径,也可以点击Choose按钮选择具体文件。
参数通过空格表示分割,也可以在两个@字符之间包含LLDB表达式。

一般情况下,Xcode会异步执行Shell Command,也就是说,Shell Command 和调试器将会同步执行。如果希望调试器在Shell Command命令完成后运行,则可以勾选下面的Wait until done选项。

  1. Sound
    动作会在断点被触发时,弹出声音提示。

2.3 断点类型

上面讲到的都是普通断点,断点的类型还包括以下几种:

  1. 异常断点
    异常断点是代码出现问题导致编译器抛出异常时触发的断点。它在断点导航器中设置。点击+号,选择Exception Breakpoint选项。如下图所示

在这里插入图片描述

Exception选项可以让你选择响应Objective-C对象抛出的异常,也可以选择响应C++对象抛出的异常。
Break则是选择断点所接收的异常,是接收“Throw”语句抛出的异常还是Catch语句的。

由于有一些异常的出现,是在不满足某些特定条件下而导致的,比如说在复杂循环中数组越界,这个时候往往不容易根据异常信息确定错误的出处,这个时候设置异常断点便能发挥作用。

  1. 符号断点
    可以中断某个方法的调用,可谓是异常强大,在断点导航器界面,点击+号,选择Add Symbolic Breakpoint选项,然后会弹出如下图所示的对话框。

在这里插入图片描述

可以看到它比普通断点的自定义设置界面多出了两个内容,其一是Symbol,用来设置当前断点作用域所能识别的方法,这里面既可以是自定义的方法,也可以是系统的API方法。(注意必须表明是类方法还是成员方法)

另一个Module是模组的意思,用来限制满足符号的方法,编译器将只会在断点满足这个模组的符号的时候才回暂停。

  1. OpenGL ES错误断点(OpenGl ES Error Breakpoint)
    这个断点的作用和异常断点类似,只不过这个断点只有在openGL ES错误发生的时候才会触发。

  2. 测试失败断点
    仅在测试断点失败的时候才会执行,这个时候,应用将会暂停在引发测试失败的代码处,而不是停止在测试代码处。

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

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

相关文章

Ajax和axios基础

AJAX Asynchronous JavaScript And XML 异步的JavaScript和XML 作用 数据交换: 通过Ajax可以给服务器发送请求,服务器将数据直接响应回给浏览器. 异步交互: 可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术. 同步和异步 同步发送请求: 浏览器发…

Linux中Ctrl+C和Ctrl+Z的区别_实战讲解(超详细)

1、CtrlC和CtrlZ的区别: CtrlZ:暂停进程 即挂起进程 暂停当前进程并将其放到后台。可以在后续恢复执行。 暂停的进程仍然占用系统内存 CtrlC:终止进程 终止进程后,程序代码占用的内存会释放掉 2、实战讲解 跑人工智能代码的时候…

redis故障中出现的缓存击穿、缓存穿透、缓存雪崩?

一、背景: 在维护redis服务过程中,经常遇见一些redis的名词,例如缓存击穿、缓存穿透、缓存雪崩等,但是不是很理解这些,如下就来解析一下缓存击穿、缓存穿透、缓存雪崩名词。 二、缓存穿透问题: 常见的缓存使…

flutter ios Firebase 消息通知错误 I-COR000005,I-FCM001000 解决

*前提是已经 使用firebase-tools 已经给 Flutter 加入了 消息通知相关配置。教程>> 一、I-COR000005 10.22.0 - [FirebaseCore][I-COR000005] No app has been configured yet. import Firebase....FirebaseApp.configure() 10.22.0 - [FirebaseMessaging][I-FCM001000…

mysql事故复盘: 单行字节最大阈值65535字节(原创)

背景 记得还在银行做开发,投产上线时,项目发版前,要提DDL的sql工单,mysql加1个字段,因为这张表为下游数据入湖入仓用的,长度较大。在测试库加字段没问题,但生产库字段加不上。 先说结论 投产…

QT初识

通过图形化界面输出helloworld 既然学习了QT,那么自然要做经典的输出helloworld字符串的实验。 QT有两好几种方案输出helloworld,一种是通过图形化界面输出,一种是通过代码实现。 这里先了解图形化界面的方案。 创建项目后,点…

LeetCode:2385. 感染二叉树需要的总时间(DFS Java)

目录 2385. 感染二叉树需要的总时间 题目描述: 实现代码与解析: DFS 原理思路: 2385. 感染二叉树需要的总时间 题目描述: 给你一棵二叉树的根节点 root ,二叉树中节点的值 互不相同 。另给你一个整数 start 。在第…

【论文阅读】互连网络的负载平衡路由算法 (RLB RLBth)

前言Oblivious Load Balancing 不经意路由负载平衡 1. oblivious routing 不经意/无关路由的背景知识 1. oblivious routing, adaptive routing & minimal/non-minimal routing algorithms 2. Balancing a 1-Dimensional ring: RLB and RLBth 一维 ring 的 RLB and RLBth 1…

如何设计一个安全的系统架构?

本文转自 公众号 ByteByteGo,如有侵权,请联系,立即删除 如何设计一个安全的系统架构? 如何设计安全的系统?我们总结了 12 条原则供架构师们参考。 设计安全的系统非常重要,原因有很多,从保护敏…

SpringCloud系列(13)--Eureka服务名称修改和服务IP显示

前言:在上一章节中我们把服务提供者做成了集群,而本章节则是一些关于服务信息的配置,这部分知识对集群整体影响不大,不过最好还是掌握,毕竟万一有用到的地方呢 1、修改服务的名称 有时候我们想要修改服务的名称&#…

JavaSE学习文档(上)

JavaSE学习文档 第一章 Java概述1.2 计算机编程语言1.3 Java语言版本概述1.4 Java语言分类1.5 JDK,JRE,JVM的关系1.6 JDK安装1.7 DOS命令1.8 Java程序执行过程1.9 编写HelloWorld1.10 常见错误1.11 编写程序时要注意的点 第二章 Java基础语法2.1 Java中的注释文档注释 2.2 关键…

武汉星起航:亚马逊全球资源赋能中国卖家,跨境电商助力品牌国际化

亚马逊全球开店业务于2015年正式进驻中国,为中国卖家打开了通往全球市场的便捷之门。这一举措不仅为中国卖家提供了与全球消费者直接交流的机会,更借助亚马逊的丰富资源和先进技术,帮助卖家将优质的中国商品推向世界舞台。亚马逊平台以其高效…

Ant Design Vue + js 表格计算合计

1.需要计算的数量固定&#xff08;如表1&#xff0c;已知需要计算的金额为&#xff1a;装修履约保证金 装修垃圾清运费出入证工本费 出入证押金 这四项相加&#xff0c;可以写成固定的算法&#xff09;&#xff1a; 表格样式&#xff1a; <h4 style"margin: 0 0 8px…

Bayes判别示例数据:鸢尾花数据集

使用Bayes判别的R语言实例通常涉及使用朴素贝叶斯分类器。朴素贝叶斯分类器是一种简单的概率分类器&#xff0c;基于贝叶斯定理和特征之间的独立性假设。在R中&#xff0c;我们可以使用e1071包中的naiveBayes函数来实现这一算法。下面&#xff0c;我将通过一个简单的示例展示如…

《生成式AI导论》学习笔记

1.课程定位 2.什么是生成式人工智慧&#xff1f; 3. 今日的生成式人工智慧厉害在哪里&#xff1f; 4.训练不了人工智慧&#xff1f;那我训练自己 5.训练不了人工智慧&#xff1f;你可以训练你自己&#xff08;中&#xff09;——拆解问题使用工具 6.大语言模型修炼史——第一阶…

微信小程序使用echarts组件实现饼状统计图功能

微信小程序使用echarts组件实现饼状统计图功能 使用echarts实现在微信小程序中统计图的功能&#xff0c;具体的实现步骤思路可进我主页查看我的另一篇博文https://blog.csdn.net/weixin_45465881/article/details/138171153进行查看&#xff0c;本篇文章主要使用echarts组件实…

Redis(六) Set集合类型

文章目录 前言命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小结 内部编码使用场景 前言 集合类型也是保存多个字符串类型的元素的&#xff0c;和列表类型不同的是&#xff0c;set集合类型中的元素是无序的且…

java 抽象类(abstract)

1 由abstract修饰的类叫做抽象类 也可以修饰抽象方法 2 abstract修饰的抽象方法不可以在抽象类当中实现 但一定要在子类当中重写 并实现 public abstract class p1 { public abstract void work(); public void run() { System.out.println("run"); } } class prog…

基于springboot+vue的民法普及系统的设计与实现

1、系统演示视频&#xff08;演示视频&#xff09; 2、需要请联系

2. 多机多卡运行nccl-tests对比分析

系列文章 第2章 多机多卡nccl-tests 对比分析 目录 系列文章前言一、本地环境1. 网卡接口2. RDMA3. TOPO信息pcie信息nvidia-smi topo -m 二、nccl-test对比分析1. 相关环境变量2. 不同情况的对比3. 总结与分析 前言 NCCL&#xff08;NVIDIA Collective Communications Libra…