iOS 调试技巧

1. 什么是LLDB?

LLDB,底层调试器,在xcode的Debug区域,能看到蓝色的小字 (lldb)

2. 什么dsYM文件?

  dsYM是调试信息文件,因为后缀名.dsYM,所以叫sdYM文件,创建新工程时,默认就会创建dsYM文件,Build Setting里有相应的设置

3. 什么是符号化?

程序运行时,是将源代码转成机器码运行的,程序一旦崩溃,所能收集到的崩溃信息,无非是一些内存地址,十六进制码,必须转成方法名或变量名,才能看懂崩溃信息,这个转换的过程称为符号化,符号化依据dsYM文件,因为dsYM文件中,存储着内存地址和方法名之间的映射。

4. 符号化的方法

http://www.cocoachina.com/industry/20140514/8418.html

5. 断点

5.1 添加异常断点

5.2 添加符号断点

  和添加异常断点同一按钮,选Symbolic Breakpoint,符号断点,通常用来关注你想关注的方法(感觉比较鸡肋)

5.3 编辑断点

  开发创建的任何断点,都可以编辑,进入编辑界面,可以在condition中编辑条件。比如一个100次的循环,需要在执行第50次时,打上断点,可以在condition中写上index>50 (不一定是index,由for循环中条件变量决定),这个比较有用

5.4 共享断点

  在xcode的左侧导航栏,切换至断点导航栏界面,按住crtl点击某一断点,可以选share,可以将断点上传到版本控制系统中,这个很鸡肋

6. 观察点

  程序运行时,可以在debug区域的左部分,选中某个变量,按住ctrl,点击某一变量,再点击watch,一旦这个变量的值发送变化,会自动在控制台中打印old值和new值,并且观察点会自动被添加到断点导航中,这个比较有用,用来监控全局变量或单例的属性值

7. 在LLDB中调试神器

  7.1 打印变量

  当用断点跟踪问题时,如果忘记NSLog了,可以用p或po打印,p打印非容器变量,po打印容器变量,例如字典、数组、集合的。

7.2 打印视图层级结构

  recursiveDescription是没有自动补全的,敲回车就能看到打印效果,例如 [self.tableView   recursiveDescription]

7.3 打印寄存器

  register read,程序一旦崩溃,可以看看打印寄存器,列出的方法,缩小排查范围。

7.4 LLDB支持python脚本语言

8. 启用僵尸对象检查

  ARC下,貌似没什么太大用处了。不过MRC下,这个用处挺大

9. 崩溃类型

9.1 EXC_BAD_ACCESS

  在访问一个已经释放的对象或向它发消息时,就会出现

9.2 SIGSEGV

  段错误信号,是操作系统产生的一个更严重的错误。可能原因有 硬件出现错误,访问不可读的内存地址,或向受保护的内存地址写入数据。

9.3 SIGBUS

  访问的内存是一个无效的内存地址

9.4 SIGTRAP

  遇到这种错误时,通常LLDB会自动在相应行代码上暂停

9.5 EXC_ARITHMETIC

  除0时,会出现

9.6 SIGILL

  非法指令信号

9.7 SIGABRT

  中止信号

9.8 看门狗超时

  错误码0x8badf00d,常读作ate Bad Food(很像),常见于在同步队列中发请求,阻塞主线程

10. 自定义C函数处理SIGABRT信号

  可以看看UncaughtExceptionhandler开源类

11. 断言

   建议在发布版本中删除断言,并用其他方式将断言记录在日志系统中。

断言最好总是和if条件匹配

  int i = 4;

  if (i == 4){

    // do something

  } else {

    NSAssert(NO,@"i 不等于4");

  }

12. oc程序中,不建议使用@throw和@catch捕获异常,还是用断言吧(如果是发布版本,则记录在日志系统中)

13. 收集崩溃报告,第三方崩溃报告服务,QuincyKit(收费),TestFlight(免费)

时间: 2024-10-22 03:22:36

iOS 调试技巧的相关文章

IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS

转载:http://article.ityran.com/archives/1143 有这样一种情形:当我们正在快乐的致力于我们的app时,并且什么看都是无比顺利,但是突然,坑爹啊,它崩溃了.(悲伤地音乐响起) 我们需要做的第一件事就是:不要惊慌. 修复崩溃不是很困难的.假如你崩溃了,并且胡乱的改些东西,而且还在不停的念着咒语希望bug神奇的自动消失,你大多数情况下都会使情况更麻烦.相反的,你需要知道一些系统的方法,并且学习怎么找到崩溃和他的原因. 第一件需要知道的就是在你的代码中准确的找到cr

IOS调试技巧

资料:http://www.cnblogs.com/daiweilai/p/4421340.html#undefined 一.断点 基本操作:添加 .移除.监视(Watch)某个变量. 普通断点 Edit Breakpoint 1.Condition 这里可以输入条件表达式,满足条件的时候断点就会生效. 2.Ingore 在这里可以设置忽略断点次数. 3.Action Action有6中类型 常用的就是Log Message和Debugger Command Log Message:%B会打印断

iOS调试技巧之打印输出 -----A: (NSString *)description B:自定义LOG C:使用第三方插件快速打印

A:重写- (NSString *)description函数 如果有一个Product 产品对象  Product.h中 1 #import <Foundation/Foundation.h> 2 3 typedef enum : NSUInteger { 4 RED = 1, 5 GREEN, 6 } ProductColor; 7 8 @interface Product : NSObject 9 10 @property (nonatomic, assign) ProductColor

iOS各种调试技巧豪华套餐

转载自http://www.cnblogs.com/daiweilai/p/4421340.html 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoints) 打印的艺术 NSLog 开启僵尸对象(Enable NSZombie Objects) 进击的码农 Console(lldb 命令) Profile(instruments) Xcode视图调试 结语 前言 最近博主临近毕业季

iOS开发之Xcode常用调试技巧总结

两种最常见最普通的方法: 1.NSLog,最简单的方法,查看变结 中是否有值,有什么值,是不是自己需要的值,然后找到bug. 2.po命令,在程序进入断点处,在控制台中输入po 变量名,也可以像NSLog一样查看变量是否有值,有什么值. 今天主要介绍点高大上的方法. 一.Memory Graph Xcode8新增:Memory Graph解决闭包引用循环问题 这个时候就进入了断点模式,可以查看issue面板,注意选择右边Runtime: 有很多叹号说明就有问题了.看内存中object的名字,有一

iOS开发调试技巧总结(持续更新中)

作者:乞力马扎罗的雪  原文 对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的调试,有同性也有个性.今天我们就来学习一下iOS开发中的调试技巧,语言暂用为OC,IDE当然是强大的Xcode.首先说明下,Xcode已经为我们调试项目提供了极大的方便. [1.普通断点] 断点(Breakpoint)绝对是调试程序的第一大选择,也是掌握的基础技能.顾名

iOS SDK:iOS调试的技巧

iOS SDK:iOS调试的技巧 为什么你的数组包含3个项目而不是5个?为什么你的游戏运行缓慢?这些都跟调试有关,调试是开发过程中必不可少的一部分.本文所列举了一些重要的调试功能(当然并不全面)可以帮你用更少的时间来解决bug问题. 本文内容主要包括3个方面: 使用console检查app状态 进行日志记录,并熟练的驾驭NSLog 使用对象的生命周期来跟踪内存的使用. 使用Console检查app状态 Xcode底部的小黑盒是我们调试时的好朋友,它可以输出日志信息.错误信息以及其他有用的东西来帮

ios autolayout debug调试技巧

这篇文章并没有具体介绍自动布局的一些基本概念,主要讲解了一些高级的调试技巧. 这篇文章不是用来介绍Auto Layout的.如果你还没用过它,那还是先去WWDC 2012看看基础教程吧(1,2,3). 如果我们在iOS中遇到不可满足的约束条件,我们只能在输出的日志中看到视图的内存地址.尤其是在更复杂的布局中,有时很难辨别出视图的哪一部分出了问题.然而,在这种情况下,还有几种方法可以帮到我们. 首先,当你在不可满足的约束条件错误信息中看到NSLayoutResizingMaskConstraint

iOS开发——调试篇&amp;Xcode常用调试技巧

Xcode常用调试技巧 Enable NSZombie Objects(开启僵尸对象) Enable NSZombie Objects可能是整个Xcode开发环境中最有用的调试技巧.这个技巧非常非常容易追踪到重复释放的问题.该技巧会以非常简洁的方式打印指出重复释放的类和该类的内存地址. 怎么开启僵尸对象呢?首先打开“Edit Scheme”(或者通过热键?<),然后选择Diagnostics选项卡,勾选Enable NSZombie Objects选项. 现在我们可以关掉ARC来测试重复释放的问