编程 24

IOS断点相关,Xcode编辑断点那点事儿

其中 %B 是断点所在方法, %H 是断点的次数 @@之间可以编辑一些信息

Log Message
在这里填写的东西可以打印到控制台。例如我做了如下设置:
%B %H @10+10@
%B会打印断点的名字,%H会打印断点的调用次数,@@中间可以输入表达式。

Capture GPU Frame

用于OpenGL ES调试,捕获断点处GPU当前绘制帧。

编程 1右键点击断点.png

编程 2

Sound

还有一个比较好玩的 Action 是
Sound,它会在触发断点时发出响声,我们可以在一些不能时刻关注到的代码设置这个断点,运行时,发出响声提示我们一些信息。

编程 3

编程,设置当前如果断网了,”叮”一声

Sound:可以设置一个提示音

编程 4

Log Message

在 Log Message 中输入命令,可以直接在控制台输出,有意思的是,还可以选择
Speak message ,让 siri 帮你读出这些信息。

编程 5

LogMessage 打印信息

Shell Command:没用过

常用断点类型

Ignore

可以忽略前n次,到n+1次再停下来

Log Message: 直接打印一些信息

屏幕快照 2016-12-14 下午5.42.10.png

Condition

设置条件断点,写一些简单的判断,使程序在满足一定条件才会停下来

编程 6屏幕快照
2016-12-13 下午4.15.46.png

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

Symbolic Breakpoint

符号断点可以在运行到设置的特定函数时,被中断。

编程 7

设置Symbolic 为viewWillAppear:就会在所有控制器调用viewWillAppear时中断

讲完了 Breakpoint 的调试技巧,下一篇我们说一下 lldb
的调试方法,总的来说,Breakpoint 能做的,lldb 也能做;而 lldb
能做的,Breakpoint 可不一定能做,所以敬请期待哟😉

编程 8两个action.png


调试断点,依赖于父进程和子进程之间的通信,打断点实际是在被调试的程序中,改变断点附近程序的代码,这个断点使得被调试的程序,暂时停止,然后发送信号给父进程(调试器进程),然后父进程能够得到子进程的变量和状态,达到调试的目的。

断点的时候,系统就会说“哈哈”

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

为了避免这些问题,我们可以利用 Xcode 中的断点调试工具调试,也可以利用
lldb 断点调试,这篇我们先看看 Xcode 中的打断点吧~

编程 9Condition.png

Paste_Image.png

Action

给断点设置一些事件,里面包含很多事件

编程 10

Breakpoint 中的 Action 选项

通过右侧的加减号,这些action是可以叠加使用的

  1. 方法名称:会对所有具有此方法名称的类方法生效。例如 initWithFrame: 。
  2. 特定类的方法:OC类和C++类都适用,例如 ,[UIView
    initWithFrame:]或者 Shap::draw()。
  3. 函数名称。例如普通C函数。
    通过设置Symbol来调试,好用根本停不下来,想怎么断点就怎么断点。
Shell Command

在 Shell Command 中输入Shell 命令,到此断点时,会运行输入的
Shell命令。

编程 11

输入ls,列出当前目录下文件

编程 12Log
Message.png

符号断点(Symbolic Breakpoint)

Breakpoint

打一个断点谁都会,但是除了单单打断点之外,我们还可以通过编辑这个断点,设置一些触发、过滤条件来调试代码:

编程 13

编辑 Breakpoint

先画一个简单的demo界面,一个有两组cell的tableView

Condition
这里可以输入条件表达式,满足条件的时候断点就会生效。例如上面输入a ==
50。这个是非常有用的设置,特别在循环体内调试的时候,用着真的是爽。
Ingore
在这里可以设置忽略断点次数。
Action
Action是这里最复杂的,最强大的功能,可选类型如下:

NSLog 应该是最基本的调试方法,但是 NSLog 也有一些问题,比如

Options:勾选它后断点便不再停止,与action配合使用效果很好,可以在不打断的情况下之间得到断点处的信息

编程 14

  • 需要提前设置宏,在 release 版本中避免疯狂打印
  • NSLog 比较耗费资源,Apple
    本身设计其为打印错误日志,是对系统级打印的封装

编程 15demo.png

Debugger Command
这里可以输入调试命令,也就是po(打印对象信息),bt(打印函数栈),expression(表达式)这些调试命令。
Options
勾选Automatically continue after evaluating
actions
之后程序会在断点产生后继续运行

AppleScript

AppleScript是苹果公司开发的一种脚本语言,可以用来控制运行于Mac
OS上的程序,也可以写成独立运行的Applet。类似于英语,直观,易读。
我们简单设置一段AS:

编程 16

在运行到断点时,在当前应用输出 Hello World!

编程 17

停下时,Xcode 弹出 Hello World!

Capture GPU Frame :没用过;

比普通断点多了两个属性Symbol和Module。
Symbol
Symbol的内容,可以有如下几种:

全局断点

除了给特定代码行设置断点以外,我们还可以设置全局断点,如图:

编程 18

全局断点

Debugger Command:可以写一些lldb命令 例如 “po
indexPath”,这样将在控制台打印一些信息

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

Debugger Command

这个与在控制台中输入 LLDB 命令一致,输入 po +
OC对象,打印这个OC对象,输入 p + 基本数据类型变量,打印这个变量。
下一篇文章我会对这个方面进行总结,敬请期待。

第三行 “Ignore”
这个表示忽视若干次才开始进行打断,默认为0次不打断,把它改成5,这样点击6次断点才生效,在一些循环中会很有用。

  • Condition
  • Ignore
  • Action
  • Options
Exception Breakpoint

异常断点在每次程序发生了异常时,都会被中断,一般用来捕获一些未知的异常,这个大家应该都比较熟悉。

编程 19打印信息.png

屏幕快照 2016-12-14 下午5.35.37.png

第一个选项就是编辑断点 “Edit Breakpoint”

编程 20

第二行 “Condition”
这个单词有制约的意思,当符合输入条件的时候,断点才生效,这里我们输入”indexPath.section==0″也就是当点击第一组的时候,断点才生效

基本断点是可以编辑的,在断点上点右键,选中编辑如下图

在点击方法上加一个断点

基本断点

AppleScript:脚本,写一个简单的

本文参考(技巧分享)老生常谈的符号断点 for Xcode
,找出你想要的ViewController和只会左键断点?是时候试试这样那样断点了。

第一行显示当前断点的状态,蓝勾表示有效;断点所在的类以及所在的行数“ViewController.m:29”

编程 21

右击断点出现如下界面

屏幕快照 2016-12-14 下午5.36.02.png

编程 22Action.png

常用的就是Log Message和Debugger Command

第四行 “Action” 这个稍微复杂一点,是执行一些动作


编程 23断点.png

  • 基本断点
  • 异常断点(Exception Breakpoint)
  • 符号断点(Symbolic Breakpoint)

编程 24说话.png

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

断点是平时编程调试必不可少的东西,如果只知道左键点击是不是太low了一点,下面一起研究一下断点的编辑。


60237807-A7F3-4548-998D-F9A83B9C8E7E.png

异常断点(Exception Breakpoint)