首先,最简单的断点就是在Xcode项目文件中任意一行行号那点一下,就是加了一个断点

再次点击会变成浅蓝色,表示disable掉了

disable掉的断点不会起作用,但会在左上角蓝色的标签那留下记录,这里记录下了你设置的所有断点,然后在这你可以点一下浅蓝色的位置enable一些断点。

删除断点只要在断点位置右键点击Delete Breakpoint就行了;也可以左键点住断点往外拖再松掉,会出现一个灰尘气泡;还可以在标签那边的断点右键delete。

设置了一个断点后,再执行程序,程序编译到断点处时会停止,并出现这样的画面,在这里我们可以看到一些参数,self代表当前对象,其他的则是执行到当前语句时这个方法或者说这个栈里面分配的对象

如果想查看更多对象的话,点击左下角选择all。

在右边lldb这是一个debug的工具,可以输入一些命令来打印一些信息,左边的信息可以通过这里打印出来

可以输入po(pring project)来打印对象以及p(pring)来打印一些基本类型或者结构体

如果不喜欢命令行,也可以在左边选择一行右键选择Pring Description

这样在右边也会像命令行一样在lldb这打印出来

lldb还有很多功能,可以在苹果官方文档中输入lldb查看。

在上方Debug里面还有很多命令。continue表示继续运行;continue to current line表示继续运行到当前行;step over表示不进入当前方法,直接进行下一个方法;step into表示进入到方法中的方法;step out则和step into正好相反的操作。还有step over instruction和step into instruction,instruction表示指令的意思,CPU的指令,如果想单步CPU的指令,可以点击它们,它们是指令级的step;至于step over thread和step into thread表示只在当前线程当中执行,其它线程都停止执行,这个主要在debug多线程时使用,为了防止其它线程的干扰。

接下来介绍一些断点高级一些的用法。

找到一个循环,比如for循环,在其中设置一个断点,再右键选择edit breakpoint,对这个断点进行一些定制,这里有一些参数,condition表示一个条件,当满足该条件时程序断住;ignore表示ignore多少次后断住;action可以添加一个动作,比如debugger command,可以输入一个lldb的命令,当程序断住时执行这个动作;最后一个options选中的话表示不断住,程序满足条件执行动作后并不断住。

有时候我们想要知道某件事情发生的时候断住,但并不能确定在哪一行代码,这时候就需要一些更加高级的断点。在断点这个界面左下角有个+号,点击它选择add exception breakpoint,exception表示异常的意思

然后便出现了一个all exceptions,设置它会出来一些选项,第一个exception可以选择object-c或c++还有all,一般选择all就ok了;break可以选择在抛出异常或处理异常时断住,默认是抛出;action和options就和前面提到的一样了。最好在项目中添加一个这样的断点以备用。

接下来讲一下另一种断点,在断点那个界面左下角+号那选择add symbolic breakpoint,基于符号的断点

设置它也会出来一些选项,symbol中可以写一个方法,表示当程序执行到该方法的时候断住;module表示在类库或可执行的程序里;下面的就和前面讲的都一样了。

以上讲的Debug版的断点,还有release版的断点,在中选择edit scheme

然后在这里选择release,在release版中设置断点运行程序时会进行优化,信息可能不是很有用,顺序有时也会和原来不一样,Debug版则会忠实的按照顺序运行,因此release执行速度会比较快,但平常我们开发都使用Debug版,当你的程序要发布时使用release版,保证用户使用的是你的release版,因为它的性能要优于Debug版,它跑的更快,运行的文件更小。

有些情况下不适合使用断点,比如有些bug只在release版里出现,Debug中正常;多任务,多线程的程序;实时性要求比较高的,比如依赖时间的;客户端和服务器架构的;还有进程之间,某个进程依赖你要设置断点的进程时。这时就要使用另外一种手段,打印log(日志)。

原生的打印有NSLog,在Debug版和release版都可以打印,Cocoas2d中有一个CCLog在Debug版中能正常打印,在release版中则会执行一个空语句,因为打印是件麻烦事儿,release版得保证性能。

打印时间戳工具函数:

static double gBaseTime = 0.0;

void logCurTimeStamp(NSString * comment)

{

  double cur_time = [[NSDate date] timeIntervalSince1970];

  double time_past = cur_time - gBaseTime;

  gBaseTime = cur_time;

  NSLog(@"[%@] cur time = %.4f", comment, time_past);

}

以上内容来自丁群的视频,网址是http://www.maiziedu.com/course/cocos2d/246-2161/。

iOS断点及打印日志的更多相关文章

  1. Xcode8中处理打印日志的配置

    Xcode8中处理打印日志的配置

  2. Mybatis框架基于映射文件和配置文件的方式,实现增删改查,可以打印日志信息

    首先在lib下导入: 与打印日志信息有关的架包 log4j-1.2.16.jar mybatis架包:mybatis-3.1.1.jar 连接数据库的架包:mysql-connector-java-5 ...

  3. Log打印日志遇到的问题

    Log日志打印出现空指针问题 AndroidRuntime(372): Caused by: java.lang.NullPointerException: println needs a messa ...

  4. iOS系统app崩溃日志手动符号化

    iOS系统app崩溃日志手动符号化步骤: 1.在桌面建立一个crash文件夹,将symbolicatecrash工具..crash文件..dSYM文件放到该文件夹中 a.如何查询symbolicate ...

  5. 重写NSLog,Debug模式下打印日志和当前行数

    在pch文件中加入以下命令,NSLog在真机测试中就不会打印了 //重写NSLog,Debug模式下打印日志和当前行数 #if DEBUG #define NSLog(FORMAT, ...) fpr ...

  6. android112 c代码打印日志,c反编译调用java

    activity: package com.itheima.ccalljava; import android.os.Bundle; import android.app.Activity; impo ...

  7. ruby脚本打印日志到rspec的报告文件中

    在通过ruby+webdriver+rspec做自动化测试的时候,为了便于观察用例执行情况,我基本上都会用 rspec XX.rb --format doc -o result.log 如果遇到失败的 ...

  8. Log4j配置的经典总结,打印日志文件,日志存库

        一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...

  9. rsyslog 不打印日志到/var/log/messages

    *.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages 表示 所有来源的info级别都记录到/var/log/me ...

随机推荐

  1. zookeeper 丢失事件/miss event

    今天在统计页面上发现有个节点丢失了,经过仔细分析后,发现同一个节点上的二个应用(同时监控zk)其中一个丢失了一个event,检查zk cluster没有发现异常... 通过网络搜寻,出现miss ev ...

  2. jsp页面使用jstl标签格式化String类型日期

    1.引入jstl <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> ...

  3. 使用FindControl("id")查找控件 返回值都是Null的问题

    做了一个通过字符串ID查找页面控件并且给页面控件赋值的功能,过程中遇到了this.FindControl("id")返回值都是Null的问题,记录一下解决办法. 问题的原因是我所要 ...

  4. C# 和Java的foreach的不同用法

    循环语句为苦逼的程序猿们提供了很大的便利,有while.do...while.for和 foreach.而且foreach语句很简洁,但是它的优点不仅仅在于此,它的效率也是最高的. 作为两个开发语言, ...

  5. JQ 替换节点

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 关于twitter的GIF变mp4的测试

    这个事是好久之前听说了,今天FQ的时候突然想起来了,就去测试了一下这个gif转MP4到底有多神奇... 这个是我的twitter地址:https://twitter.com/chendatony31 ...

  7. 使用runtime 实现weex 跳转原生页面

    一.简述 最近项目组打算引入weex,并选定了一个页面进行试水.页面很简单,主要是获取数据渲染页面,并可以跳转到指定的页面.跟之前使用RN 相比,weex 确实要简单很多.从下图中我们可以看到,wee ...

  8. 国外大神Leo-G的 DevopsWiki

    https://raw.githubusercontent.com/Leo-G/DevopsWiki/master/README.md 总结的太好了,直接把md文件贴过来好了!慢慢学习!分享给大家,觉 ...

  9. 关于Asp.net超时,延长读取sql server数据库的超时时间!(已解决)

    昨天,接到客户反映说应用报“超时时间已到.在操作完成之前超时时间已过或服务器未响应”问题.从网上了一些资料,发现这个问题还是很普遍的.主要有以下两种解决方法: 第一种方法:在web.config中加上 ...

  10. Oracle EBS-SQL (MRP-7):检查MRP计划运行报错原因之超大数据查询2.sql

    /*逐一运行检查计划运行超大数据*/ ---------------------------------------------------- -- PO Requisitions select * ...