iOS调试——断点

来源:互联网 发布:java算法实例 编辑:程序博客网 时间:2024/06/05 16:32

设置和查看断点

1.第一次运行编写成功的程序时,往往会出现始料未及的结果。为了找出原因,我们需要在程序中设置断点进行调试。断点指在条件满足的情况下程序会挂起在那里,我们往往可以在那里查看变量、单步运行等操作内容。

2.断点可分为以下三种类型:

文件行断点:执行到特定文件某一行时触发。

符号断点:调用某一个函数或方法时触发,程序挂起在函数或方法的第一行。

异常断点:产生异常时触发,分为OC异常断点和C++异常断点。OC异常断点会在遇到OC异常时触发,C++异常断点会在遇到C++异常时触发。

3.文件行断点设置

    3.1设置文件行断点很简单,直接点击该文件中得行号即可。

        

    3.2断点可以删除、禁止使用和编辑。在断点上点击鼠标右键,弹出的快捷菜单如图:

        

        当选择Disable Breakpoint菜单项时,会禁止使用断点。这是断点处于灰色状态。

            

        当选择Delete Breakpoint菜单项时,可以删除断点。此外,也可以拖曳断点离开行号列,当出现一个小云朵时释放鼠标,这样也可以删除断点。

 

        当选择Edit Breakpoint菜单项,会弹出断点编辑对话框,如图:在断点对话框中,可以为断点设定触发条件和忽略次数,并添加动作。

            

 

4.符号断点设置

    4.1设置符号断点与设置文件行断点不同,需要打开断点导航面板。如图所示:。

在断点导航面板中,可以看到所有的断点。

    4.2点击断点导航面板左下角的+按钮,会弹出如图所示的菜单:

        

其中有两项,Add Exception Breakpoint和Add Symbolic Breakpoint。前者可以创建异常断点,后者可以创建符号断点。

    4.3.选择符号断点,弹出创建符号断点对话框:

        

5.异常断点设置

   5.1.选择异常断点,弹出创建异常断点对话框,如图:

    

   5.2.在Exception项中,可以选择OC或者C++异常断点,Break项可以设定On Throw还是On Catch,即断点是在本地抛出时触发还是捕获时触发。

   5.3.如果抛出异常,没有捕获和设置断点,程序就会直接跳到main.m的main函数里面的。

       如果设置了断点,程序会挂起在相应的行上。

   5.4.默认情况下,异常会再输出窗口中输出。eg:unrecognized selector sent to instance 0x7541270


//=======================================================

// 断点

断点:故名思意,就是断了的点。


1.断点用来暂停调试器,实时查看符号和对象。包括LLDB在内的有些调试器支持移动指令指针(instruction pointer),从另外一个位置继续调试。


断点导航面板

1.添加到工程中断点会自动在断点导航面板中列出。

2.断点导航面板还支持为异常和符号设置断点。


异常断点

1.在断点导航面板中设置一个异常断点。打开断点导航面板,点击左下角的+按钮,选择Add Exception Breakpoint,接受默认设置,添加一个断点。


再次运行该工程,可以看到调试器暂停了应用的执行,程序正好停在抛出异常的那行。

2.异常断点能帮助我们理解异常的起因。故在新建工程的时候,要做的第一件事情就是设置一个异常断点。 


符号断点

1.符号断点会在执行到特定符号时暂停程序。符号可以是一个方法名、类中的一个方法或者任何C方法(objc_msgSend).

2.可以在断点导航面板中设置符号断点,和设置异常断点差不多,不过要选择的是符号断点而不是异常断点。如图:


当运行到该方法时程序会停止执行。

 

符号断点通常用来观察你要关注的方法。


编辑断点

1.开发者创建的每个断点都可以在断点导航面板中修改。右击断点,然后从菜单中选择Edit Breakpint的方式来编辑断点。可以看到一个断点编辑页。

2.可以编辑断点来设置一个条件,从而创建一个条件断点,只在满足设定的条件时该断点才会执行。


共享断点

1.断点现在与要保存到版本控制系统中的代码关联了起来。Xcode 4(以及以上版本)允许将断点提交到版本控制系统,从而与合作者共享它们。

 



全局断点:

问题的提出:有时候在程序出错的时候不能准确定位到崩溃的哪一行代码,而是直接跑到main循环或者AppDelegate里面,或者会给你这样的提示:

EXEC_BAD_ACCESS:

这个时候我们真的很冲动,连一点的堆栈信息都没有。这个时候就需要用全局断点了。(Global BreakPoint)

如果所示:


在Debug导航面板上进行上图的操作,就建立了全局断点。这样只要遇到错误,debug程序就会自动定位到栈底的信息,也就是你最先出错的代码的那一行。

 


条件断点(Condational Breakpoints)

问题提出:for循环中确定某一次循环时的变量的值


这样只有遍历到c==“H”的时候断点才会触发。


符号断点(Symbol breakpoints)



这样,在程序中所有的viewDidLoad方法被调用时都会触发断点。

当然,我们也可以为特定的某个类的方法添加断点。在Symbol一栏中输入特定的方法即可。



0 0
原创粉丝点击