iOS断点及打印日志
首先,最简单的断点就是在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断点及打印日志的更多相关文章
- Xcode8中处理打印日志的配置
Xcode8中处理打印日志的配置
- Mybatis框架基于映射文件和配置文件的方式,实现增删改查,可以打印日志信息
首先在lib下导入: 与打印日志信息有关的架包 log4j-1.2.16.jar mybatis架包:mybatis-3.1.1.jar 连接数据库的架包:mysql-connector-java-5 ...
- Log打印日志遇到的问题
Log日志打印出现空指针问题 AndroidRuntime(372): Caused by: java.lang.NullPointerException: println needs a messa ...
- iOS系统app崩溃日志手动符号化
iOS系统app崩溃日志手动符号化步骤: 1.在桌面建立一个crash文件夹,将symbolicatecrash工具..crash文件..dSYM文件放到该文件夹中 a.如何查询symbolicate ...
- 重写NSLog,Debug模式下打印日志和当前行数
在pch文件中加入以下命令,NSLog在真机测试中就不会打印了 //重写NSLog,Debug模式下打印日志和当前行数 #if DEBUG #define NSLog(FORMAT, ...) fpr ...
- android112 c代码打印日志,c反编译调用java
activity: package com.itheima.ccalljava; import android.os.Bundle; import android.app.Activity; impo ...
- ruby脚本打印日志到rspec的报告文件中
在通过ruby+webdriver+rspec做自动化测试的时候,为了便于观察用例执行情况,我基本上都会用 rspec XX.rb --format doc -o result.log 如果遇到失败的 ...
- Log4j配置的经典总结,打印日志文件,日志存库
一.介绍 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制 日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务 器.NT的事件记录器.UNIX Sy ...
- rsyslog 不打印日志到/var/log/messages
*.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages 表示 所有来源的info级别都记录到/var/log/me ...
随机推荐
- 在unity的scene中画五角星
使用Gizmos的DrawLine方法画线. 首先在场景中找到五角星的五个定点的坐标,按照一笔画的顺序命名为1,2,3,4,5,如图所示: 接下来就是编写代码了,代码很少,如下所示: using Un ...
- RMAN数据库恢复之控制文件和参数文件恢复
一.控制文件的恢复1.查询控制文件的路径 SQL> SELECT * FROM V$CONTROLFILE; STATUS NAME IS_RECOVERY_DEST_FILE BLOCK_SI ...
- MySql优化-你的SQL命中索引了吗
在项目开发中SQL是必不可少的,表索也一样.这些SQL的运行性能不知道吗?有多少是命中了索引的?命中哪个索引?索引中有哪个是无效索引?这些无效索引是否会影响系统的性能?带着这些问题我们一起来学习一下. ...
- 在配置WCF服务的时候出现的错误总结
1.由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 我是通过安装图中的FramWork3.5.1搞定的. 网上的其他参考: http ...
- mysql导出数据到excel表中
mysql> select b.username,a.subject,a.money,FROM_UNIXTIME(a.ctime) from shop_pay a INNER JOIN ...
- Java数组的复制
初学Java的时候,需要复制数组的时候,一下子就想到使用赋值语句“=”,例如:array1 = array2:但后来慢慢发现,这个语句并不能将array2的内容复制给array1,而是将array2的 ...
- Naive Bayes(朴素贝叶斯算法)[分类算法]
Naïve Bayes(朴素贝叶斯)分类算法的实现 (1) 简介: (2) 算法描述: (3) <?php /* *Naive Bayes朴素贝叶斯算法(分类算法的实现) */ /* *把. ...
- windows 激活远程桌面服务
- px,dp,dip,sp,in,mm,pt详细分析
px,dp,dip,sp,in,mm,pt详细分析 px :(pixels),屏幕的像素点,不同的设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. dip :(devi ...
- 【Mysql5.7数据目录和配置文件目录】
Win7下 C:\ProgramData\MySQL\MySQL Server 5.7\ 如何查看mysql运行.访问记录等日志 1.首先确认你日志是否启用了mysql>show variabl ...