关于Xcode调试的帖子,感觉不错,转来看看
http://www.raywenderlich.com/10209/my-app-crashed-now-what-part-1
http://www.raywenderlich.com/10505/my-app-crashed-now-what-part-2
这篇文章给大家带来的是一些Xcode实用技巧,比如:
• 摆脱NSlog打印输出,使用断点日志。
• 摆脱TODOs注释来进行编译警告。
• 使用条件表达式来进行断点。
• 使用LLDB动态修改数据。
• 等等。
• 设置调试控制台
可以通过cmd+shift+Y组合键或按如下方式调出控制台

可以根据习惯,在Xcode\Preferences设置控制台输出环境,一般设置为控制台+变量视图显示。

• 添加异常断点
通过cmd+6或如下方式进入断点导航栏。

点击+添加异常断点

下
面是断点编辑界面,异常断点的类型有Object C和C++2种,一般情况下选择All,当你的代码中有C++代码时,如果你只是定位Object
C代码问题,建议选择Object
C,如果你选择All,在调度过程中可能会在很多C++的代码处停住,但相关代码其实并没有错误(笔者现在的项目中碰到了此类问题)。

断点行为(Action),这个提供了非常强大的功能,能够在抛出异常的时候,执行Apple脚本,Debugger命令,log打印,执行Shell脚本,还可以播放声音等等。

Automatically continue after evaluating选项可以使项目运行到断点时,不进入暂停状态,常用于断点打印信息(后面会讲到)。
一般使用异常断点,是为了定位抛出异常的代码位置,帮助快速解决Bug。
PS:可以在LLDB中输入bt命令,控制台会列出相关的函数栈Crash信息(LLDB相关使用方法,后面会讲到)。

• 运行时修改变量的值
相关LLDB命令:

在下面例子中,断点处,在LLDB中利用expr命令修改相关变量的值。
(关于expr命令需要说明的是需要知道明确的返回类型,即使返回类型为void,例如expr (void)NSLog(@"test"))

下面我们用断点来完成相同的功能。先编辑断点(或cmd+option,点击断点),执行相关Debugger命令。

执行输出结果如下,用断点,完成了相同的功能,变量值在运行是被改变了。

• 触发条件断点
这是一个很有用的技巧,可以检测程序是束运行在正确的轨道上,条件生效时,进入调度模式,使用方式类似于断言语句(Assert) 。

程序运行,进入断点并执行Action。
ps:使用条件断点时,Automatically continue after evaluating复选框不要勾上,否则断点永远不会生效。

• 符号断点
也是一个非常有用的调试技巧,程序会在遇到特殊符号时进入调试模式,符号可以是一个方法名、类中的一个方法、或者任意C方法(objc_msgSend)。
PS:通常用于观察你需要关注的方法,比如:-[NSException raise],malloc_error_break,-[NSObject doesNotRecognizeSelector:]等,可以快速帮你定义EXC_BAD_ACCESS等异常问题。

应用启动后,进入调试模式,并执行Action。

• 一些注释符号的使用
1、#warning add warning info,使用warning后,编译会产生警告,加在临时修改代码的地方,可以有效的防止错误提交代码等,特别是发布版本的时候,保证无任何编译警告,可以有效的降低风险。
2、#error add error warning info,error的使用更加严格,会让你的代码不能通过编译,适合忽略编译警告的人使用。
3、// TODO:这里还没有写完 优先级:1,TODO不会有编译问题,它会显示在跳转栏里(是不是很醒目),这个可以用来保留任务列表和评论,很实用。
关于Xcode调试的帖子,感觉不错,转来看看的更多相关文章
- IOS调试技巧:当程序崩溃的时候怎么办 xcode调试
转自:http://www.ityran.com/archives/1143 ------------------------------------------------ 欢迎回到当程序崩溃的时候 ...
- 推荐一些常用感觉不错的jQuery插件
转:http://www.cnblogs.com/v10258/p/3263939.html JQuery插件繁多,下面是个人在工作和学习中用到感觉不错的,特此记录. UI: jquery UI(官方 ...
- 最近发现docker感觉不错
最近发现docker感觉不错,接下来开始学习docker方面的技术.lxc也可以学学. storm,kafka也要熟悉起来.
- Mac OS X 10.9 Mavericks安装后,Xcode调试时模拟器黑屏的处理方法
请耐心的等下去吧,少年! 装了Mac OS X 10.9 Mavericks的同学,如果碰到Xcode调试App时,模拟器黑屏(重置也无效),请耐心的等下去吧,大约10来分钟左右黑屏就会消失,App启 ...
- xcode调试打印QString
xcode调试打印QString xcode内置GDB,在调试工程过程中可以通过print命令打印基本的数据类型,但像QString这样复杂类型就不行了.虽然我们可以在程序代码通过添加Qt的调试打印语 ...
- Xcode 调试技巧 --常用命令和断点
Xcode 中的调试技巧与我们的日常开发息息相关,而这些调试技巧在我们解决Bug时,常常有事半功倍的作用,经常会用到的有各种断点 和 命令.而这些调试技巧也经常会在面试中问到,所以不知道的就来看看吧. ...
- 逛csdn看见的一个知识阶梯,感觉不错
逛csdn看见的一个知识阶梯,感觉不错: 计算机组成原理 → DOS命令 → 汇编语言 → C语言(不包括C++).代码书写规范 → 数据结构.编译原理.操作系统 → 计算机网络.数据库原理.正则表 ...
- Xcode调试LLDB
一.简介 关于Xcode调试,相信大家很多会用断点调试,今天无意间在苹果开发的群里看到了po,瞬间心中有个疑问:po是什么?下面我就百度搜索了一下,介绍一点皮毛. 首先是LLDB,它的全名是lower ...
- 如何使用Xcode调试Shader代码Bug导致的渲染问题
我最近发现了一个与Unity中的表面着色器有关的小Bug. 你可以看到如下所示的渲染瑕疵. 有时人们会将相似的渲染瑕疵归因于同时使用HDR和Bloom效果,但实际上,表面着色器是错误的,至少在本文中所 ...
随机推荐
- windows下重新安装TCP/IP协议栈
一.windows重装TCP/IP协议 前两天在windows下安装开发环境的时候,把系统的TCP/IP协议栈给搞跪了,导致系统无法ping localhost.无法在程序中创建socket等 ...
- Element can be click when out of view
WebDriver can't action the element when out of view Webdriver can't action the element when the elem ...
- 设置DIV最小高度以及高度自适应随着内容的变化而变化
<!--退租账单--> <div id="bilsli" onmouseover="showBill(this)"> #bilsli{ ...
- JavaScript window
window -- window对象是BOM中所有对象的核心 window,中文"窗口" window对象除了是BOM中所有对象的父对象外,还包含一些窗口控制函数 全局的windo ...
- Gradle 教程:第一部分,安装【翻译】
原文地址:http://rominirani.com/2014/07/28/gradle-tutorial-part-1-installation-setup/ 在这篇教程里,我们将主要讲解如何在我们 ...
- word-break:break-all和word-wrap:break-word的区别
了解word-break属性 /* 关键字值 */ word-break: normal; word-break: break-all; word-break: keep-all; /* 全局值 */ ...
- bfs A strange lift
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1548 There is a strange lift.The lift can stop can at e ...
- CentOS 7.x安装配置
简述 VMware可以创建多个虚拟机,每个虚拟机上都可以安装各种类型的操作系统.安装方法也有很多种.下面,主要以ISO镜像安装为例,介绍CentOS 7.x的安装过程及相关的参数设置. 简述 创建虚拟 ...
- Java 多线程 —— synchronized关键字
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- 20145236 冯佳 《Java程序设计》第1周学习总结
20145236 冯佳 <Java程序设计>第1周学习总结 教材学习内容总结 因为假期在家的时候并没有提前自学Java,所以,这周算是真正开始第一次接触Java.我对Java的了解也仅仅停 ...