文档章节

调试

阿元
 阿元
发布于 2016/05/17 21:07
字数 903
阅读 48
收藏 1

1.使用LLDB进行调试:

1.1 dSYM文件存储于目标相关的调试信息。创建工程时默认创建DSYM文件

工程下DSYM文件:

 

1.2 断点:

1.2.1 异常断点:程序停在抛出异常的哪行,而不会崩溃在MAIN函数里。

1.2.2符号断点:在symbol里设置关注的符号

使用malloc_error_break[NSObject doesNotRecognizeSelector:]对调试内存相关的崩溃相当帮助,等效异常断点。

 

1.2.3编辑断点:
断点导航面板中 ctrl+点击断点  进行编辑。进行状态设置,比如循环i<1000,可以设置断点 i=500时起作用。而不用遍历到500次。

1.3LLDB控制台

1.3.1 打印标量变量

处理整形或结构体用p  

p(int) self.maAge 

p (CGPoint) self.view.center

po  打印对象

expr   可以在调试时动态执行指定表达式,并将结果打印出来。常用于在调试过程中修改变量的值。

call 

call即是调用的意思。其实上述的po和p也有调用的功能。因此一般只在不需要显示输出,或是方法无返回值时使用call。 和上面的命令一样,我们依然在viewDidLoad:里面设置断点,然后在程序中断的时候输入下面的命令: 

call [self.view setBackgroundColor:[UIColor redColor]]

继续运行程序,看看view的背景颜色是不是变成红色的了!在调试的时候灵活运用call命令可以起到事半功倍的作用。

常见问题 

上面我们简单的学习了如何使用LLDB命令。但有时我们在使用这些LLDB命令的时候,依然可能会遇到一些问题。 

不明类型或者类型不匹配 

比如下面这个命令。 

(lldb) p NSLog(@"%@",[self.view  viewWithTag:1001])
error: 'NSLog' has unknown return type; cast the call to its declared return type
error: 1 errors parsing expression

如果在使用LLDB命令中发现有 unknown type 的类似错误(多见于id类型,比如NSArray中某个值),那我们就必须显式声明类型。比如上面这个命令,我们得这么修改。 

p (void)NSLog(@"%@",[self.view  viewWithTag:1001])

1.3.2打印寄存器

register read

1.3.3调试脚本编程 适合Python程序员

1.4 NSZombieEnabled标识

利用僵尸对象显示日志到调试器,在非ARC作用很大。在Xcode->Product->  scheme 选择Enable Zombie Objects开启。

1.5不同类型崩溃

EXC_BAD_ACCESS:访问一个被释放的对象或向它发送消息时。

 SIGSEGV:常见原因是不正确的类型转换。

SIGBUS:代表无效内存访问。

SIGTRAP:陷进信号,并非崩溃信号。收到原因不明的SIGTRAP,先清除上次的输出,然后重新构建通常能解决问题。

SIGABRT:中止信号。当SIGABRT出现时,控制台通常会输出大量的信息,说明具体哪里出错了。由于它是可控制的崩溃,在LLDB控制台输入bt命令打印回溯信息。

看门口超时: 固定错误码:0x8badf00d.出现在同步网络调用而阻塞主线程的时候。

 

1.6 断言&&异常:有效的防止程序错误。

异常出现时会中止程序。

可用来记录崩溃日志。

1.7 收集崩溃报告

iTunes Connect下载崩溃报告。

第三方崩溃报告服务:

集成SDK,负责上传dSYM文件到他们自己的服务器。

免费:TestFlight   桌面客户端

付费:HockyApp

 

参考文章:

http://my.oschina.net/u/1244672/blog/615445?fromerr=8f1t5RAh

http://my.oschina.net/u/2340880/blog/665265

http://my.oschina.net/u/1244672/blog/650633?fromerr=bQnCwLIu#OSC_h1_4

Crash文件解析:

http://ios.jobbole.com/82120/

 

© 著作权归作者所有

共有 人打赏支持
上一篇: GIF图片制作
下一篇: FMDB使用
阿元
粉丝 5
博文 163
码字总数 108443
作品 0
浦东
程序员
私信 提问
WebStorm 和 VSCode 中调试代码的配置教程

发现绝大多数前端开发者不会在IDE中对代码进行调试,其中不乏一此已经工作很多年的老手,很多人甚至认为IDE中不可能调试经过编译的代码;其实,在IDE中调试前端代码是完全可行的,即便是经过...

科研者
2017/12/09
0
0
INSTRUMENTS 调试工具的使用

1.INSTRUMENTS调试工具的使用(一) 2.INSTRUMENTS调试工具的使用(二) 3.INSTRUMENTS调试工具的使用(三) 4.INSTRUMENTS调试工具的使用(四) 5.INSTRUMENTS调试工具的使用(五) 6.INST...

maskmale
08/18
0
0
使用 ndb 调试你的 Node.js 项目

代码调试按照调试方式大致分为日志(Log)和断点(Breakpoint)两种办法。其中日志就是手动的在代码中增加日志打印获取过程信息来判断问题。这种方法的好处是调试简单,一个对业务熟练的工程...

ThinkJS
08/06
0
0
Debug Source Code in .NET Framework

摘要:一直以来有听说微软公开了.NET Framework的一些类,可以让我们通过VS2008进行调试查看,最近尝试了一下该功能,通过断点调试微软提供的源代码,总体感觉微软还是向开源迈开了一大步,不...

长平狐
2012/06/11
360
0
调试 .NET Framework 源代码、.DotNetCore源码

调试 .NET Framework 源代码、.DotNetCore源码 如何调试 .NET Framework 源代码 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件 .NET Framework 源代码下载 条件 加载符号文件:调试之前...

xxred0324
09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
2
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
4
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
今天
3
0
十万个为什么之什么是resultful规范

起源 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点...

尾生
今天
3
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform Configuration Terraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。...

buddie
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部