iOS“断点”(Break Point)你不知道多强大

2023-11-13

iOS“断点”(Break Point)你不知道多强大!

(转载自http://mp.weixin.qq.com/s?__biz=MzA4ODk0NjY4NA==&mid=230272985&idx=1&sn=045c98bfb2d8dd1ecf7a732189935081&scene=0#rd)

编码不能没调试,调试不能没断点(Break Point)。XCode的断点功能也是越来越强大。

基本断点


如下图,这种是最常用的断点,也是最容易设置。左键点击一下就可以设置。


编辑断点


断点是可以编辑的。




断点有下面几个属性可以设置:

· Condition

· Ignore

· Action

· Options

Condition


这里可以输入条件表达式,满足条件的时候断点就会生效。例如上面输入a == 50。这个是非常有用的设置,特别在循环体内调试的时候,用着真的是爽。

Ingore


在这里可以设置忽略断点次数。

Action


Action是这里最复杂的,最强大的功能了。Action有6中类型。如下图




1. AppleScript

2. Capture GPU Frame

3. Debugger Command

4. Log Message

5. Shell Command

6. Sound

常用的就是Log Message和Debugger Command

Log Message


在这里填写的东西可以打印到控制台。例如我做了如下设置


%B会打印断点的名字,%H会打印断点的调用次数,@@中间可以输入表达式。 上面的设置在控制台的输出如下:

...

-application:didFinishLaunchingWithOptions: 92 20

2015-07-28 22:19:21.905 Test[981:38016] 91

-application:didFinishLaunchingWithOptions: 93 20

-application:didFinishLaunchingWithOptions: 94 20

-application:didFinishLaunchingWithOptions: 95 20

2015-07-28 22:19:21.913 Test[981:38016] 92

2015-07-28 22:19:21.921 Test[981:38016] 93

2015-07-28 22:19:21.929 Test[981:38016] 94

-application:didFinishLaunchingWithOptions: 96 20

2015-07-28 22:19:21.937 Test[981:38016] 95

-application:didFinishLaunchingWithOptions: 97 20

2015-07-28 22:19:21.944 Test[981:38016] 96

-application:didFinishLaunchingWithOptions: 98 20

2015-07-28 22:19:21.952 Test[981:38016] 97

-application:didFinishLaunchingWithOptions: 99 20

2015-07-28 22:19:21.959 Test[981:38016] 98

-application:didFinishLaunchingWithOptions: 100 20

2015-07-28 22:19:21.967 Test[981:38016] 99


Debugger Command


这里可以输入调试命令,也就是po(打印对象信息),bt(打印函数栈),expression(表达式)这些调试命令。看图就明白了:


控制台输出如下:

<UIApplication: 0x7fc92360b1d0>

* thread #1: tid = 0xb7db, 0x0000000101d0eb11 Test`-[AppDelegate application:didFinishLaunchingWithOptions:](self=0x00007fc923400570, _cmd=0x00000001033f3123, application=0x00007fc92360b1d0, launchOptions=0x0000000000000000) + 97 at AppDelegate.m:20, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1

* frame #0: 0x0000000101d0eb11 Test`-[AppDelegate application:didFinishLaunchingWithOptions:](self=0x00007fc923400570, _cmd=0x00000001033f3123, application=0x00007fc92360b1d0, launchOptions=0x0000000000000000) + 97 at AppDelegate.m:20

frame #1: 0x0000000102c0d748 UIKit`-[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 240

frame #2: 0x0000000102c0e357 UIKit`-[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 2540

frame #3: 0x0000000102c1119e UIKit`-[UIApplication _runWithMainScene:transitionContext:completion:] + 1349

frame #4: 0x0000000102c10095 UIKit`-[UIApplication workspaceDidEndTransaction:] + 179

frame #5: 0x0000000107d3c5e5 FrontBoardServices`__31-[FBSSerialQueue performAsync:]_block_invoke_2 + 21

frame #6: 0x00000001024da41c CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12

frame #7: 0x00000001024d0165 CoreFoundation`__CFRunLoopDoBlocks + 341

frame #8: 0x00000001024cff25 CoreFoundation`__CFRunLoopRun + 2389

frame #9: 0x00000001024cf366 CoreFoundation`CFRunLoopRunSpecific + 470

frame #10: 0x0000000102c0fb02 UIKit`-[UIApplication _run] + 413

frame #11: 0x0000000102c128c0 UIKit`UIApplicationMain + 1282

frame #12: 0x0000000101d0edbf Test`main(argc=1, argv=0x00007fff5def13a8) + 111 at main.m:14

frame #13: 0x0000000104dbd145 libdyld.dylib`start + 1

frame #14: 0x0000000104dbd145 libdyld.dylib`start + 1

(int) $2 = 98

2015-07-28 22:36:54.654 Test[1150:47067] 98

2015-07-28 22:36:54.670 Test[1150:47067] 99


Options


勾选Automatically continue after evaluating actions之后程序会在断点产生后继续运行。这个属性是相当有用的,可以输入调试信息至于不暂停程序。

出了上面的基本断点外,XCode还提供了下面四种断点,需要点击断点面板左下角的+号添加。


· Exception Breakpoint

· OpenGL ES Error Breakpoint

· Symbolic Breakpoint

· Test Failure Breakpoint



Exception Breakpoint


Exception Breakpoint是一个非常有用的断点项。正如名字所示,当程序抛出异常的时候就回产生断点。通常程序崩溃会停在崩溃的地方,但有时候并不能准确停在引起异常的地方。比如数组越界!比如我下图所示,会引起数组越界访问。




程序运行的时候就会崩溃。但是崩溃停在了main函数里面,就算看了栈信息也不能马上定位到到底是那个数组越界访问了。为什么崩溃不能停在数组越界哪里?这是因为数组越界访问不一定会导致程序崩溃的,数组越界访问会导致异常抛出,而抛出的异常没有得到处理才会导致程序崩溃。因此最后会导致崩溃停在CoreFoundation框架里面。这个时候就需要设置Exception Breakpoint产生断点来定位错误了。




OpenGL ES Error Breakpoint


这个主要是OpenGL ES的断点调试,这个个人没用到过。

Symbolic Breakpoint


Symbolic Breakpoint,符号断点,真的是调试神器啊。当程序运行到特定符号的时候就会产生断点。通过这种方式添加断点,就不需要在源文件中添加,也不需要知道断点设置在文件的第几行。如图:


比普通断点多了两个属性Symbol和Module。

Symbol


Symbol的内容,可以有如下几种:

1. 方法名称:会对所有具有此方法名称的类方法生效。例如 initWithFrame: 。

2. 特定类的方法:OC类和C++类都适用,例如 ,[UIView initWithFrame:]或者 Shap::draw()。

3. 函数名称。例如普通C函数。

通过设置Symbol来调试,好用根本停不下来,想怎么断点就怎么断点。

Test Failure Breakpoint


这个类型的断点会在test assertion 失败的时候暂停程序的执行。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS“断点”(Break Point)你不知道多强大 的相关文章

  • 从 iOS 13 开始安排 iOS 后台任务

    我正在实现用于更新数据的BackgroundTasks 框架 但我遇到了以下问题 无法计划刷新App 错误域 BGTaskSchedulerErrorDomain代码 1 空 无法安排数据提取 Error Domain BGTaskSche
  • 以弯曲格式显示文本

    我正在寻找以曲线格式绘制一些文本 我使用哪个控件并不重要 UITextField UILabel or UITextView 我只想显示如图所示的文本 仍在寻找解决方案 请帮忙 查看此链接 https nodeload github com
  • 如何在 iOS 应用程序中通过其他应用程序共享内容/数据,就像我们在 Android 应用程序中使用 Intent.ACTION_SEND 所做的那样?

    在Android中 我们可以通过Intent ACTION SEND startactivity api轻松共享内容 文本 图像 视频等 我已经有一个应用程序可以完美地做到这一点 并且有一个并行的 iOS 应用程序 我希望它能够实现相同的功
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • 在视图之间传递核心数据实体变量

    我无法理解如何在视图之间使用核心数据实体变量 为了更好地理解我的问题是什么 我的代码如下 View A 基本上 您必须将完整预算实体或相关预算实体的 ID 从视图 A 传递到视图 B 由于不知道您的应用程序的视图层次结构和逻辑 我假设您选择
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • 从命令行调试 iOS 应用程序构建

    我正在通过命令行构建 iOS 应用程序 但在调试它时遇到问题 如果我使用 XCode 进行构建 它会让我在设备上 构建和调试 而不会出现任何问题 但现在 我不知道如何使用 gdb 在设备上启动它并逐步执行它 如果我尝试 添加自定义目标 可执
  • 为什么我不能在 Realm 属性上使用 private

    我正在尝试在 RealmSwift 中存储一个枚举案例 但 Realm 不支持枚举 本文 https medium com it works locally persisting swift enumerations with realm
  • iPhone UINavigationBar 使用 [UINavigationBar 外观] 更改所有控制器的字体样式

    我知道我可以单独更改导航栏的字体 如本答案所述 更改导航栏的字体 https stackoverflow com questions 5832036 change the navigation bars font 目前我正在使用一种更全局的
  • 如何在 iOS 中更改部分透明图像的颜色?

    我有一个具有部分透明度的单色图像 我有正常版本和 2X 版本的图像 我希望能够用代码将图像着色为不同的颜色 下面的代码适用于普通图像 但 2X 最终会出现伪影 正常图像可能有类似的问题如果是这样 由于分辨率的原因我无法检测到它 UIImag
  • 关于窗口层次结构的警告

    我的调试器中出现这样的警告 这是什么意思 Warning Attempt to present
  • SiriKit 错误:此应用程序不支持捐赠意图

    我在 Xcode 10 iOS 12 Beta 中捐赠自定义意图时遇到问题 我创建了一个在我的主应用程序目标和 OrderIntent 目标之间共享的自定义框架 我创建了一个 intentdefinition 文件 并将目标成员资格设置为我
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • iphone:如何停止快门动画?

    我有两个问题 1 我想知道如何在相机加载时停止快门动画 我正在使用 UIImagePickerController 我已经参考了堆栈溢出的许多答案 但没有成功 2 我在相机中有一个自定义按钮 使用cameraOverlayView并想通过单
  • 在现有 iOS 应用程序中集成 React-native(0.40.0) 后找不到 Yoga/Yoga.h 头文件

    在我的 Swift iOS 应用程序中集成 React Native 后 我无法构建 yoga Yoga h file cannot be found 我已经浏览了文档 查看了react native github页面 检查了类似问题的SO
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • Swift C 回调 - Swift 类指针的 takeUnretainedValue 或 takeRetainedValue

    我有一些UIView or UITableViewCell 里面我有 C 回调 例如 CCallback bridge self observer data gt Void in let mySelf Unmanaged
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们

随机推荐

  • 动态规划之二维费用的背包模型

    前置知识 01背包问题 动态规划之01背包模型 如何何何的博客 CSDN博客 完全背包问题 动态规划之完全背包模型 如何何何的博客 CSDN博客 多重背包问题 动态规划之多重背包模型 如何何何的博客 CSDN博客 二维费用背包问题 二维费用
  • selenium页面切换操作

    selenuim页面切换 webdriver只能在一个页面里对元素进行识别和定位 如果有多个页面操作的时候 要先进行页面切换 切换分两种 1 iframe内嵌页面切换 框架集切换 1 获取iframe标签 iframe driver fin
  • Android12窗口模糊(一)在Activity和Dialog中实现高斯模糊效果

    前言 在 Android 12 中 提供了一些用于实现窗口模糊处理效果 例如背景模糊处理和模糊处理后方屏幕 的公共 API 窗口模糊处理或跨窗口模糊处理用于模糊处理给定窗口后方的屏幕 有两种窗口模糊处理方式 可用于实现不同的视觉效果 背景模
  • 华为OD机试备考攻略 以及题库目录分值说明 考点说明

    华为题库说明 2022与2023题库的区别 华为OD机试的题库是季度更新的 Q1 Q2 Q3 Q4 笔者专栏的题库分为2023和2022 2023的题库是包括2022 11 Q4第四季度 之后以及2023年的题库 2022的题库是包括202
  • 第九届蓝桥杯C/C++ 大学B组省赛编程题题目及答案解析

    目录 试题F 递增三元组 试题G 螺旋折线 试题H 日志统计 试题I 全球变暖 试题J 乘积最大 试题F 递增三元组 问题描述 输入格式 输出格式 样例输入 样例输出 27 代码解析 暴力 三重循环计算所有满足ai lt bj lt ck的
  • R语言之方差分析篇

    当包含的因子是解释变量时 通常会从预测转向 级别差异的分析 即称作方差分析 ANOVA 组间因子 因变量 自变量 均衡设计 balanced design 组内因子 单因素组间方差分析 单因素组内方差分析 重复测量方差分析 主效应 交叉效应
  • JVM Mutex Monitor::lock

    void Monitor lock Thread Self ifdef CHECK UNHANDLED OOPS Clear unhandled oops so we get a crash right away Only clear fo
  • Windows 下PBC库的安装和配置

    背景 PBC库是一个基于双线性对的密码学库 这库在公钥密码学中使用非常广泛 这个库在Linux下的安装非常的简单 有些只会纸上谈兵的人需要在WIN下做 呵呵 但是没办法 需求到了 硬着头皮也要写完 对于一些只会谈兵的人 呵呵 现在主要介绍下
  • jar反编译的.java文件如何可以编辑_修改及反编译可运行Jar包实现过程详解

    将可运行Jar包 反编译成项目 修改代码 再次编译 打包 需要工具 jd gui myeclipse 具体步骤 1 使用jd gui打开原始的Jar包 选择File gt Save All Sources 会生成一个zip压缩包 2 解压这
  • 元素垂直居中的几种方式

    第一种 div div div div boxOne width 200px height 200px background pink display flex justify content center align items cent
  • ps -aux

    查看某个程序的进程号并删除 1 ps aux grep 进程 2 kill 9 进程号 删除该进程
  • visual studio使用教程

    linux疑难问题排查实战 分享了作为公司专家 在项目开发过程中内存优化 堆 栈 代码段 数据段 性能优化 死机 栈越界 堆越界 死锁等疑难问题排查的案例 使用的工具 perf asan strace memleak等 工作经验 大家可以点
  • blender界面基础认识

    blender界面基础认识 自定义功能 Edit gt Preference 界面 主题 视图 灯光 编辑 动画 插件 输入 视图切换 键位映射 系统 保存 加载 文件路径 Blender界面分为以下三个部分 上侧的顶栏 中间的工作区 底部
  • Sklearn专题二 随机森林

    专题二 随机森林 概述 1 集成算法 1 集成算法考虑多个评估器的结果 汇总获取更好的分类 回归表现 2 三种集成算法 装袋法bagging 模型独立 提升法boosting 模型相关 stacking 3 随机森林是一种bagging集成
  • .NET平台常用的开发组件

    工欲善其事 必先利其器 其优雅的编程风格 高效率的开发速度 极度简单的可扩展性 足够强大开发类库 较小的学习曲线 让我对这个平台产生了浓厚的兴趣 在工作和学习中也积累了一些开源的组件 虽然跟Java比Net还是要少 但也足够使用了 其中有一
  • 【C#实现文字转语音功能】

    本文实例为大家分享了C 实现文字转语音的具体代码 供大家参考 具体内容如下 客户提出要求 将文字内容转为语音 因为内网环境 没办法采用联网 在线这种方式 灵机一动 能否写一个简单的例子呢 搜索相关资料还真行 话不多说 有图有真相 关键是 c
  • 网传Spring爆出更大漏洞?别再炒作了…

    之前刚刚过去的log4j2漏洞还历历在目 这次来了个更大的 云舒老大在29日发微博称 出了个超级大漏洞 有吃瓜群众就问 这个瓜有 log4j2 那么好吃吗 云舒大佬的回复是 更大 之后 又有安全大佬sunwear给了一些更细节的信息 所以漏
  • java中类可以包含哪些元素,Java类中包含的元素及作用

    Java类是面试中常考的知识点 是组成Java应用的基本成分 小型和大型的应用都是由类组建而成的 作为合格的Java工程师 一定要清晰了解Java类及其包含的元素及作用 今天学码思Java培训老师就Java类中包含的元素及作用做一个大致讲解
  • springSecurity跨域CORS处理

    续言 之前 知识追寻者写过关于springboot 的跨域处理 并且介绍了跨域相关的概念 具体的可以查看这篇知识追寻者springboot教程系列文章 https zszxz com category springboot article
  • iOS“断点”(Break Point)你不知道多强大

    iOS 断点 Break Point 你不知道多强大 转载自http mp weixin qq com s biz MzA4ODk0NjY4NA mid 230272985 idx 1 sn 045c98bfb2d8dd1ecf7a7321