文档章节

调试

阿元
 阿元
发布于 2016/05/17 21:07
字数 903
阅读 45
收藏 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/

 

© 著作权归作者所有

共有 人打赏支持
阿元
粉丝 5
博文 157
码字总数 102625
作品 0
浦东
程序员
不会调试的人不是程序员------------------>

通过调试,程序员可以学会如何运用断点,如何最快的找到可疑语句,如何迅速找到问题,从而改进程序. 调试初级: 1.运行程序 2.设置断点 ,取消断点 3.运行到断点 4.单步追踪 step into 5.单步执行s...

jinx88
2016/07/23
13
0
WebStorm 和 VSCode 中调试代码的配置教程

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

科研者
2017/12/09
0
0
java平台调试架构JPDA

最近使用WTP的Server功能很不爽,连tomcat服务器时java类中的任何改动都要重启服务器,一怒之下就改用JPDA了,以下是一些总结。   什么是JPDA   Java Platform. Debugger Architecture(...

五大三粗
2016/01/04
82
0
[连载]《C#通讯(串口和网络)框架的设计与实现》- 11.调试器的设计

目 录 第十一章 调试器设计... 2 11.1 调试接口... 2 11.2 界面方式调试... 3 11.3 命令行方式调试... 5 11.4 小结... 6 第十一章 调试器设计 SuperIO 框架平台设计、开发完毕后,想把代码编...

唯笑志在
2015/12/22
0
0
如何调试Android Native Framework

半年前写了一篇文章,介绍 如何调试Android Framework,但是只提到了Framework中Java代码的调试办法,但实际上有很多代码都是用C++实现的;无奈当时并并没有趁手的native调试工具,无法做到像...

weishu
2017/01/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windbg学习记录

我开始熟练使用windbg是从帮助手册开始的,也就是.hh命令。 就像学习windows开发从msdn开始一样,微软的产品虽然不开源,但是文档做的是相当的好。然而那些开源的东西呢?开源的竞争力其实就...

simpower
9分钟前
0
0
学习scala的网站汇总

https://www.codacy.com/blog/how-to-learn-scala/

Littlebox
11分钟前
0
0
配置本地的cloud9开发环境

前言 说到在线IDE开发环境,cloud9是不能绕过的,cloud9支持很多语言,默认支持的就有Node.js,Python,Ruby,PHP,Go,更逆天的是,他还支持数据库,包括MySQL,MongoDB,Redis,SQLite。但...

Kefy
15分钟前
0
0
springcloud应用程序上下文层次结构

如果您从SpringApplication或SpringApplicationBuilder构建应用程序上下文,则将Bootstrap上下文添加为该上下文的父级。这是一个Spring的功能,即子上下文从其父进程继承属性源和配置文件,因...

itcloud
20分钟前
0
0
新程序员最爱的免费资源

简评:国外美女程序员推荐了她自己用过的一些免费资源,对新手比较友好的那种。 原作者 Ali Spittel,是个美女程序员,以下这些资源都是她自己试过的。以下「我」代表 Ali Spittel。 学 HTML...

极光推送
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部