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 ...
随机推荐
- 多线程:pthread_exit,pthread_join,pthread_self
/*exit_join_id.c*/ #include<pthread.h> #include<stdio.h> void* eji(void* agr) { printf(& ...
- JavaScript 【正则表达式验证数字代码】
可以看到 Ajax 请求多了个 x-requested-with ,可以利用它,request.getHeader("x-requested-with"); 为 null,则为传统 ...
- asp生命周期
笔记:如果不对,欢迎指出来. 当一个用户访问一个页面,实际是发送http请求到服务器,而http请求其实是socket发送特定规范(协议)的文字(报文). 然后服务器的http.sys内核模块接受 请 ...
- .NET Printer(打印)详细分析
如果你是一名开发人员,就不应该不知道.NET Framework.它的作用在编程人员眼中是非常强大的..NET Framework打印功能都以组件的方式提供,为程序员提供了很大的方便,但是这几个组件的 ...
- C#同步数据库的数据到Neo4J
数据组件采用https://github.com/Readify/Neo4jClient 在nuget里面有 需要注意的是 以下是示例代码: using System;using System.Col ...
- SSH安全登录(远程管理)22端口
Linux管理Linux 先加密再发送数据,更安全 一 联机加密工具 非对称钥匙对加密 安装 默认安装 openssh 启动 ...
- codevs1166 矩阵取数游戏
题目描述 Description [问题描述] 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m 的矩阵,矩阵中的每个元素aij均 为非负整数.游戏规则如下: 1. 每次取数时须从每行各取走一个 ...
- cf459A Pashmak and Garden
A. Pashmak and Garden time limit per test 1 second memory limit per test 256 megabytes input standar ...
- UML_组件图
简介 众所周知,组件图是用来描述系统中的各组件之间的关系.首先我们必须知道组件的定义是什么,然后组件之间有哪些关系.理清楚这些,我们在以后的设计中才能 派上用场.UML语言对组件的定义已发生了巨大变化 ...
- 在flash builder 4.6中使用ant编译项目的详细过程
首先要准备APACHE ANT,目前是1.9.2版 可以去这里下载:http://ant.apache.org/bindownload.cgi?Preferred=http://labs.renren ...