Debug

作者: CatLogic | 来源:发表于2016-06-02 23:28 被阅读0次

    工欲善其事必先利其器

    写代码不可能一蹴而就,总是需要我们反复调试。而Xcode给我提供了非常强大的测试手段,关键在于是否自己能熟练运用到自己平常中。相信好的手段和方式是成功的一半。不说了,直接干货。。


    以下皆是在断点状态下的调试输入($0 代表p打印的变量标识,lldb会默认给出顺序$0、$1、$2....)

    1.查看控制器层次
    po [[[UIWindow keyWindow] rootViewController] _printHierarchy]
    2.查看视图层级
    po [[UIWindow keyWindow] recursiveDescription]
    3.打印当前线程状态
    bt
    4.打印全部线程状态
    bt all
    5.打印值
    printp (会带有变量标示符$)
    print $0 + 7 (带美元符号的都可当做参数使用)
    6.指定格式打印
    p/x $0
    x代表格式,x-16进制 ,t-2进制,c-字符,s-字符串
    7.改变值
    expression x = xx (expression 可以简写为e)
    8.声明变量
    e int $a = 2 (声明变量,不过变量前必须加美元符号)
    9.断点控制
    process continue (简写 c 继续执行) thread step-over ( n 单步执行(是不是函数都是下一步,不会跳进去)) thread step-in (s 单步执行(是函数则跳进去,否则下一步)) finish ( 执行到下一个返回语句 (直到一个堆栈帧结束) 然后再次停止)
    10.会告诉你当前的行数和源码文件
    frame info
    11.thread return x (它有一个可选参数(X),在执行时它会把可选参数加载进返回寄存器里,然后立刻执行返回命令,跳出当前栈帧。这意味这函数剩余的部分**不会被执行**。这会给 ARC 的引用计数造成一些问题,或者会使函数内的清理部分失效。但是在函数的开头执行这个命令,是个非常好的隔离这个函数,伪造返回值的方式 。)
    12.查看所有断点
    breakpoint list(或者 br li)
    13.管理断点:
    br dis 1 (指定不可用) br del 1 (删除某一断点)
    breakpoint set -f ViewController.m -l 21 (指定文件的指定行数创建断点) breakpoint set -F "-[ViewController getNum]” (指定方法创建断点) 简写: b ViewController.m:24
    14.查看内存
    x/c $0
    15.查看响应事件的所有目标
    po [$0 allTargets]
    16.查看目标的响应方法
    po [$0 actionsForTarget:(id)0x7f80faf20b80 forControlEvent:0] (0x7f80faf20b80 为p打印出的内存地址)


    参考:
    objc.io
    此外可以使用facebook发布的Chisel(这是一个python脚本,封装了很多编辑调试命令,可以事半功倍,不幸的是看到文章说Xcode7.2完美运行,Xcode7.3有很多命令不能使用了,作者正在更新...)


    看~灰机灰过去了~灰机又灰过来了

    相关文章

      网友评论

          本文标题:Debug

          本文链接:https://www.haomeiwen.com/subject/zbmkdttx.html