美文网首页
Xcode上手之调试程序

Xcode上手之调试程序

作者: 狂奔的胖蜗牛 | 来源:发表于2017-02-21 23:38 被阅读471次

    Xcode技巧系列:http://www.jianshu.com/notebooks/7639304/latest

    1 静态分析

    Xcode集成了Clang静态分析器,该分析器能够分析源代码,因为无需运行,即可对代码本身进行分析,所以称为静态分析器。

    1.1开启

    菜单栏Pruduct->Analyze即可开启分析操作。找到问题后,会在问题导航器中标记出来,如图:

    屏幕快照 2017-02-21 下午9.52.25.png

    分析器能够分析出来的问题有:

    • 逻辑错误
    • 内存泄漏
    • 死存储问题
    • API问题

    逻辑错误

    逻辑错误可能会造成程序奔溃,比如OC中,使用了未初始化的变量等。使用静态分析器可以很方便的找出。

    内存泄漏

    内存泄漏,就是程序丢失了某个对象的引用,因而它不会被释放内存,该内存无法读取也无法写入,该对象一直占用着内存空间可能导致程序奔溃。

    静态分析器可以有效的找出内存泄漏问题。

    死存储问题

    代码中不会被访问的变量,这种问题是无法通过编译找到的,需要通过分析器来寻找。

    API问题

    由于没有遵循项目中所使用的框架或者库的要求而导致的。

    比如在viewWillDisappear方法中,未使用[super viewWillDisappear],该问题只有通过分析器查找到。

    2 断点调试

    断点类似于中断,当程序运行到断点所在位置时,Xcode会暂停程序运行,保护此时程序的数据,等待开发者的调试指令。

    2.1 使用

    通常情况下,在代码左侧的边列中点击即可添加断点。

    屏幕快照 2017-02-21 下午10.14.00.png

    程序运行到此处会暂停。想取消,再次点击。拖动到空白处即是删除断点。

    2.2 控制断点

    右键点击断点,即可对断点进行控制和管理。

    屏幕快照 2017-02-21 下午10.17.42.png

    Edit Breakpoint:编辑断点
    Disable Breakpoint:断点失效
    Delete Breakpoint:删除断点
    Reveal in Breakpoint Navigator:在断点导航器中显示

    2.3 断点设置

    点击Edit Breakpoint即可进入断点设置,如图:

    屏幕快照 2017-02-21 下午10.22.54.png
    • 第一行:断点所处文件和行号,勾选或取消复选框,可以激活或失效断点。
    • 第二行:条件表达式,可以输入触发条件。当程序执行到此处时,会运行输入的条件表达式,如果为YES,则暂停程序。
      宏不能够识别!也无法识别断点作用域之外的变量和方法!
      如果不满足,则继续执行程序,忽略断点。
    • 第三行:忽略断点的次数,超过后,断点执行。
    • 第四行:指定断点触发时,Xcode的行为。可以执行特定的脚本或者一些动作。
    • 第五行:如果勾选,表示在遇到断点时,执行该断点中的动作,而不再暂停应用,继续执行。

    在断点导航器下方,还可以通过+添加别的类型的断点:


    屏幕快照 2017-02-21 下午10.38.02.png
    • Swift Error Breakpoint:swift错误的断点
    • Exception Breakpoint:异常断点,只有发生异常时,才会暂停程序运行。
    • OpenGL ES Error Breakpoint:只有在OpenGL ES错误发生时触发。
    • Symbolic Breakpoint:中断某个方法的调用,只要出现这个方法调用的地方,都会引发断点触发,从而暂停程序。
    • Test Failure Breakpoint:只有在测试断言失败的时候才会触发执行,这时,应用会暂停在引发测试失败的代码处。

    2.4 调试区域

    调试区域如图:

    屏幕快照 2017-02-21 下午10.47.53.png

    调试工具栏,区域①

    如图所示最上面区域,有很多按钮,控制应用的运行。从左到右依次是:

    • 隐藏/显示调试区域
    • 启动/关闭所有断点
    • 继续/暂停进程
    • 单步跳过执行
    • 单步跳入执行,跳入函数内部
    • 跳出当前函数
    • 调试试图层次,打开试图调试功能
    • 调试创建过程
    • 地理位置模拟

    变量试图,区域②

    显示当前程序暂停处,存放在堆栈中的变量和寄存信息。可以根据需要选择显示的变量内容:


    屏幕快照 2017-02-21 下午11.01.23.png
    • Auto:显示与当前作用域相关的变量
    • Local Variables:显示当前作用域下的局部变量
    • All...:显示所有变量

    小眼睛:快速查看。
    叹号:打印描述信息。
    Filter:可以过滤复杂的信息。

    控制台,区域③

    用于输出应用打印内容。

    下方可以设置输出内容:All Output所有,Debugger output调试器输出,Target Output对象输出。

    3 LLDB调试

    我们前面的调试,实际上都是使用LLDB命令,只是Xcode界面封装过了。只有在程序暂停时才可以使用LLDB命令。

    屏幕快照 2017-02-21 下午11.35.24.png

    LLDB命令只能读取当前作用域下的变量信息。

    3.1 po

    打印对象信息,对应于:print object。
    格式:po 对象

    3.2 p

    打印值。
    格式:p (类型)表达式
    p (NSInteger)[view.description length]

    3.3 expr

    expression命令,动态执行指定的表达式,并将结果打印出来。
    expr view.tag = 3

    更多的指令,输入help即可查看列表,help 命令,会列出指定命令的所有子命令。

    结语

    其余的调试方式,比如UI界面,性能调试等,由于使用比较少,就不说了。

    相关文章

      网友评论

          本文标题:Xcode上手之调试程序

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