XCODE常用调试方法

转自:http://blog.csdn.net/u013822374/article/details/50963108

前言:编写代码过程中出现错误、异常是不可避免的。通常我们都需要进行大量的调试去寻找、解决问题。这时,熟练掌握调试技巧将很大程度上的提高工作效率。接下来就说说开发过程中Xcode的调试方法。

1. Enable NSZombie Objects (开启僵尸对象)。 
这个技巧主要用来追终重复释放的问题。个人认为,ARC推出以来。项目的基本是基于ARC环境。不用开发者主动去调用release去释放对象,所以不用太在意这个方法。这里就不多做介绍了。想了解该方法的同学请 坐飞机 
2. 断点调试(全局断点、条件断点) 
一、全局断点:

<code class="hljs mel has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">NSArray <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*aa</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@[</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@2</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@4</span>];
NSLog(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@"</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%@</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">",aa[3]);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

这两行代码,没有添加全局断点时,运行crash,直接就跳到了mian函数,如下图:

这里写图片描述

接下来添加全局断点,方法如下图:

添加全局断点的方法

添加之后运行,奔溃后,程序停留在了crash那行代码。

这里写图片描述
是不是很方便,很省事。哈哈!(ps 不过有的crash,这种方式定位不到)

二、条件断点:设置断点触发的条件,方便开发者对特定情况进行调试 
如下图: 
在for循环中添加一个断点。右击断点选择”Edit BreakPoint”,然后设置断点触发条件。 
这里写图片描述

这个例子当 “i==5”时,断点触发,如下图: 
这里写图片描述

3. Static Analyzer (静态分析) 
Static Analyzer主要用于分析内存,避免内存泄漏。主要对以下情况进行分析。 
未使用的实例变量、未初始化的实例变量、类型不兼容、无法达到的路径、引用空指针 
使用:command + shift +B,如下图就能轻松找到可能内存泄漏的代码,然后我们根据代码环境进行修复就可以了(ps:有的内存泄漏可能检测不出来,还是需要我们在写代码时对内存这块多留点心。)

这里写图片描述

4. LLDB调试器 
这个方法是我今天主推的方法。比较高级,也更加灵活、方便。 
随着Xcode5,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器。其实Xcode已经帮我们完成了大部分工作,而且很多东西也可以在Xcode中直接看到。所以这里我们只列举常用的命令。 
打印:p,print的缩写:该命令如果打印的是简单类型则会列出简单类型的的类型和值,如果是对象会打印出对象的地址。 
po,print Object 的缩写,用于输出OC对象 
如下如,当运行到断点处时,控制台就会出现LLDB的调试命令行。我们只需在这里进行调试。 
这里写图片描述

expr:expression的缩写,可以在调试时动态执行指定表达式,并将结果打印出来。常用于在调试过程中修改变量的值。 
如上图,你在控制台输入  
expr a=2 
你就能看到 
(NSInteger) $11 = 2 
这是a的值就被动态改成了2 
除此之外,还可以使用这个命令生成一个新的对象,如: 
expr int $b = 0 
p $b 这条命令用于输出新申明对象的值(注意要加$)

image: image命令可用于寻址,有多个组合命令,在控制台输入help image可查看image的用法。比较实用的用法是用于寻找栈地址对应的代码位置,下面我们来举个例子:

<code class="hljs mel has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">NSArray <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*array</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@[</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@1</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@2</span>];
NSLog(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@"</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%@</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">",array[2]);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

这段代码很明显会crash,运行之后抛出下面的异常

<code class="hljs ocaml has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2016</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">03</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">23</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">26</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">11.014</span> Test[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3631</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">136626</span>] *** Terminating app due <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> uncaught <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exception</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'NSRangeException'</span>, reason: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'*** -[__NSArrayI objectAtIndex:]: index 2 beyond bounds [0 .. 1]'</span>
*** First throw call stack:
(
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>   CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104f28f45</span> __exceptionPreprocess + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">165</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>   libobjc.A.dylib                     <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001049a2deb</span> objc_exception_throw + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">48</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>   CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e17b14</span> -[__NSArrayI objectAtIndex:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">164</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>   Test                                <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001044a5829</span> -[ViewController viewDidLoad] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">265</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000105467cc4</span> -[UIViewController loadViewIfRequired] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1198</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000105468013</span> -[UIViewController view] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">27</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x000000010534151c</span> -[UIWindow addRootViewControllerViewIfPossible] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">61</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000105341c05</span> -[UIWindow _setHidden:forced:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">282</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001053534a5</span> -[UIWindow makeKeyAndVisible] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">42</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052cd396</span> -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4131</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>  UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052d39c3</span> -[UIApplication _runWithMainScene:transitionContext:completion:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1750</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">11</span>  UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052d0ba3</span> -[UIApplication workspaceDidEndTransaction:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">188</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span>  FrontBoardServices                  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000107c83784</span> -[FBSSerialQueue _performNext] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">13</span>  FrontBoardServices                  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000107c83af2</span> -[FBSSerialQueue _performNextFromRunLoopSource] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">45</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14</span>  CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e55011</span> __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">17</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>  CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e4af3c</span> __CFRunLoopDoSources0 + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">556</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>  CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e4a3f3</span> __CFRunLoopRun + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">867</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">17</span>  CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e49e08</span> CFRunLoopRunSpecific + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">488</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">18</span>  UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052d04f5</span> -[UIApplication _run] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">402</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">19</span>  UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052d530d</span> UIApplicationMain + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">171</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>  Test                                <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001044a5baf</span> main + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">111</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span>  libdyld.dylib                       <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x000000010764c92d</span> start + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span>  ???                                 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000000000001</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0</span> + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
)
libc++abi.dylib: terminating <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span> uncaught <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exception</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">type</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">NSException</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul>

现在我怀疑出错的地址是0x00000001044a5829(可根据执行文件名或最小的栈地址判断)为进一步精确定位我们可输入以下命令image lookup --address 0x00000001044a5829 
命令执行后返回结果如下:

<code class="hljs http has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-attribute" style="box-sizing: border-box;">Address</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">Test[0x0000000100001829] (Test.__TEXT.__text + 265)</span>
<span class="hljs-attribute" style="box-sizing: border-box;">Summary</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">Test`-[ViewController viewDidLoad] + 265 at ViewController.m:21</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

由此,我们可以看出出错的地方是ViewController.m文件的第21行。 
我们还可以使用image lookup命令查看具体的类,如下:

<code class="hljs perl has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">(lldb) image lookup --type UIView
Best match found in /Users/jamalping/Library/Developer/Xcode/DerivedData/Test-gviuudbzlyhssmanjxpwhchdbscz/Build/Products/Debug-iphonesimulator/Test.app/Test:
id = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">{0x00001e8d}</span>, name = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"UIView"</span>, byte-size = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>, decl = UIView.h:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">144</span>, clang_type = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@interface</span> UIView : UIResponder
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( getter = isUserInteractionEnabled,setter = setUserInteractionEnabled:,assign,readwrite,nonatomic ) BOOL userInteractionEnabled;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( getter = tag,setter = setTag:,assign,readwrite,nonatomic ) NSInteger tag;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( readonly,getter = layer,setter = <null selector>,nonatomic ) CALayer * layer;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( readonly,getter = isFocused,setter = <null selector>,nonatomic ) BOOL focused;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( getter = semanticContentAttribute,setter = setSemanticContentAttribute:,assign,readwrite,nonatomic ) UISemanticContentAttribute semanticContentAttribute;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@end</span>
"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

call 
call:即调用,如我们在viewDidLoad: 设置一个断点,在程序中断的时候输入call self.view.backgroudColor = [UIColo redColor]继续运行程序,view就变成红色了,在调试的时候灵活运用call命令可以达到事半功倍的效果。

参考: 
objc.io#19#与调试器共舞 - LLDB 的华尔兹 
浅谈LLDB调试器 
Getting interactive with the debugger

转自:http://blog.csdn.net/u013822374/article/details/50963108

前言:编写代码过程中出现错误、异常是不可避免的。通常我们都需要进行大量的调试去寻找、解决问题。这时,熟练掌握调试技巧将很大程度上的提高工作效率。接下来就说说开发过程中Xcode的调试方法。

1. Enable NSZombie Objects (开启僵尸对象)。 
这个技巧主要用来追终重复释放的问题。个人认为,ARC推出以来。项目的基本是基于ARC环境。不用开发者主动去调用release去释放对象,所以不用太在意这个方法。这里就不多做介绍了。想了解该方法的同学请 坐飞机 
2. 断点调试(全局断点、条件断点) 
一、全局断点:

<code class="hljs mel has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">NSArray <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*aa</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@[</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@2</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@4</span>];
NSLog(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@"</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%@</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">",aa[3]);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

这两行代码,没有添加全局断点时,运行crash,直接就跳到了mian函数,如下图:

这里写图片描述

接下来添加全局断点,方法如下图:

添加全局断点的方法

添加之后运行,奔溃后,程序停留在了crash那行代码。

这里写图片描述
是不是很方便,很省事。哈哈!(ps 不过有的crash,这种方式定位不到)

二、条件断点:设置断点触发的条件,方便开发者对特定情况进行调试 
如下图: 
在for循环中添加一个断点。右击断点选择”Edit BreakPoint”,然后设置断点触发条件。 
这里写图片描述

这个例子当 “i==5”时,断点触发,如下图: 
这里写图片描述

3. Static Analyzer (静态分析) 
Static Analyzer主要用于分析内存,避免内存泄漏。主要对以下情况进行分析。 
未使用的实例变量、未初始化的实例变量、类型不兼容、无法达到的路径、引用空指针 
使用:command + shift +B,如下图就能轻松找到可能内存泄漏的代码,然后我们根据代码环境进行修复就可以了(ps:有的内存泄漏可能检测不出来,还是需要我们在写代码时对内存这块多留点心。)

这里写图片描述

4. LLDB调试器 
这个方法是我今天主推的方法。比较高级,也更加灵活、方便。 
随着Xcode5,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器。其实Xcode已经帮我们完成了大部分工作,而且很多东西也可以在Xcode中直接看到。所以这里我们只列举常用的命令。 
打印:p,print的缩写:该命令如果打印的是简单类型则会列出简单类型的的类型和值,如果是对象会打印出对象的地址。 
po,print Object 的缩写,用于输出OC对象 
如下如,当运行到断点处时,控制台就会出现LLDB的调试命令行。我们只需在这里进行调试。 
这里写图片描述

expr:expression的缩写,可以在调试时动态执行指定表达式,并将结果打印出来。常用于在调试过程中修改变量的值。 
如上图,你在控制台输入  
expr a=2 
你就能看到 
(NSInteger) $11 = 2 
这是a的值就被动态改成了2 
除此之外,还可以使用这个命令生成一个新的对象,如: 
expr int $b = 0 
p $b 这条命令用于输出新申明对象的值(注意要加$)

image: image命令可用于寻址,有多个组合命令,在控制台输入help image可查看image的用法。比较实用的用法是用于寻找栈地址对应的代码位置,下面我们来举个例子:

<code class="hljs mel has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">NSArray <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">*array</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@[</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@1</span>,<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@2</span>];
NSLog(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@"</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">%@</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">",array[2]);</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

这段代码很明显会crash,运行之后抛出下面的异常

<code class="hljs ocaml has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2016</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">03</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">23</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">26</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">11.014</span> Test[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3631</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">136626</span>] *** Terminating app due <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> uncaught <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exception</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'NSRangeException'</span>, reason: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'*** -[__NSArrayI objectAtIndex:]: index 2 beyond bounds [0 .. 1]'</span>
*** First throw call stack:
(
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>   CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104f28f45</span> __exceptionPreprocess + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">165</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>   libobjc.A.dylib                     <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001049a2deb</span> objc_exception_throw + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">48</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>   CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e17b14</span> -[__NSArrayI objectAtIndex:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">164</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>   Test                                <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001044a5829</span> -[ViewController viewDidLoad] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">265</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000105467cc4</span> -[UIViewController loadViewIfRequired] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1198</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000105468013</span> -[UIViewController view] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">27</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x000000010534151c</span> -[UIWindow addRootViewControllerViewIfPossible] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">61</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000105341c05</span> -[UIWindow _setHidden:forced:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">282</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001053534a5</span> -[UIWindow makeKeyAndVisible] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">42</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span>   UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052cd396</span> -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4131</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>  UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052d39c3</span> -[UIApplication _runWithMainScene:transitionContext:completion:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1750</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">11</span>  UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052d0ba3</span> -[UIApplication workspaceDidEndTransaction:] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">188</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span>  FrontBoardServices                  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000107c83784</span> -[FBSSerialQueue _performNext] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">13</span>  FrontBoardServices                  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000107c83af2</span> -[FBSSerialQueue _performNextFromRunLoopSource] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">45</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14</span>  CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e55011</span> __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">17</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>  CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e4af3c</span> __CFRunLoopDoSources0 + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">556</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>  CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e4a3f3</span> __CFRunLoopRun + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">867</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">17</span>  CoreFoundation                      <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000104e49e08</span> CFRunLoopRunSpecific + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">488</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">18</span>  UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052d04f5</span> -[UIApplication _run] + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">402</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">19</span>  UIKit                               <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001052d530d</span> UIApplicationMain + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">171</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>  Test                                <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00000001044a5baf</span> main + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">111</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span>  libdyld.dylib                       <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x000000010764c92d</span> start + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span>  ???                                 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000000000000001</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0</span> + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
)
libc++abi.dylib: terminating <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">with</span> uncaught <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exception</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">type</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">NSException</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul>

现在我怀疑出错的地址是0x00000001044a5829(可根据执行文件名或最小的栈地址判断)为进一步精确定位我们可输入以下命令image lookup --address 0x00000001044a5829 
命令执行后返回结果如下:

<code class="hljs http has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-attribute" style="box-sizing: border-box;">Address</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">Test[0x0000000100001829] (Test.__TEXT.__text + 265)</span>
<span class="hljs-attribute" style="box-sizing: border-box;">Summary</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">Test`-[ViewController viewDidLoad] + 265 at ViewController.m:21</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

由此,我们可以看出出错的地方是ViewController.m文件的第21行。 
我们还可以使用image lookup命令查看具体的类,如下:

<code class="hljs perl has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">(lldb) image lookup --type UIView
Best match found in /Users/jamalping/Library/Developer/Xcode/DerivedData/Test-gviuudbzlyhssmanjxpwhchdbscz/Build/Products/Debug-iphonesimulator/Test.app/Test:
id = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">{0x00001e8d}</span>, name = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"UIView"</span>, byte-size = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>, decl = UIView.h:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">144</span>, clang_type = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@interface</span> UIView : UIResponder
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( getter = isUserInteractionEnabled,setter = setUserInteractionEnabled:,assign,readwrite,nonatomic ) BOOL userInteractionEnabled;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( getter = tag,setter = setTag:,assign,readwrite,nonatomic ) NSInteger tag;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( readonly,getter = layer,setter = <null selector>,nonatomic ) CALayer * layer;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( readonly,getter = isFocused,setter = <null selector>,nonatomic ) BOOL focused;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@property</span> ( getter = semanticContentAttribute,setter = setSemanticContentAttribute:,assign,readwrite,nonatomic ) UISemanticContentAttribute semanticContentAttribute;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@end</span>
"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

call 
call:即调用,如我们在viewDidLoad: 设置一个断点,在程序中断的时候输入call self.view.backgroudColor = [UIColo redColor]继续运行程序,view就变成红色了,在调试的时候灵活运用call命令可以达到事半功倍的效果。

参考: 
objc.io#19#与调试器共舞 - LLDB 的华尔兹 
浅谈LLDB调试器 
Getting interactive with the debugger

猜你喜欢

转载自blog.csdn.net/lonely_devil/article/details/50974959