博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
当异常出现时
阅读量:4113 次
发布时间:2019-05-25

本文共 1439 字,大约阅读时间需要 4 分钟。

错误类型
•EXC_BAD_ACESS访问一个已经释放的对像或向它发送消息
•SIGSEGV硬件错误,访问不可读的内存地址,受保护的内存地址写入数据。最常见的是不正确的类型转换
•SIGBUS访问无效的内存地址,可能是芯片的地址
•SIGTRAP
•EXC_ARITHMETIC , 算术错误,如除0
•SIGILL(SIGNAL_ILLEAL_INSTRUCTION)
•SIGABART底层错误

在系统抛出异常处设置断点

有时候我们的程序不知道跑到哪个地方就 crash 了,而 crash 又很难重现。

1: 保守的做法是在系统抛出异常之前设置断点,具体来说是在 objc_exception_throw处设置断点。

设置步骤为:首先在 XCode 按 CMD + 6,进入断点管理窗口;

然后点击右下方的 +,增加新的 Add Symbolic Breakpoint。

在 Symbol 一栏输入:objc_exception_throw,然后点击 done,完成。

这样在 Debug 模式下,如果程序即将抛出异常,就能在抛出异常处中断了。

比如在前面的代码中,我让 [firstObjctcrashTest]; 抛出异常。在 objc_exception_throw 处设置断点之后,程序就能在该代码处中断了,我们从而知道代码在什么地方出问题了。

2: 另一个方法是:增加新的Add Exception Breakpoint..., 然后直接点击完成就可.

2.1. 条件断点, 在某个地方点击使之增加一个符号断点,然后右击这个断点符号,点Edit BreakPoint..., 然后在弹出的对话框中的Condition处输入, if i==300  , 这样, 在这个断点运行处,如果当i值为300时, 就会自动断住,而如果不为300时,程序会继续运行。

2.2. 观察某个值的变化, 有时候程序运行了, 但却没有按我们设定的路线运行,如发现某个值变化了,但不知道是在代码中的什么时候变化的, 这个时候调试起来就比较麻烦, 会需要添加许多的log来进行跟踪, 所以使用断点来做这事,就比较简单,在这个值变化前的某个代码处,加断点, 运行代码,当运行到断点处时, 通过console中的variable View去找到这个变量, 右击, 选择, Watch “xxx”, 然后继续运行代码, 当这个值被改变后, 会自动停在改变的地方, 然后就知道问题所在了。

3: 在XCode中按CMD+5,打开Debug Navigator, decompress the thread list, 即把左边底部的滑块滑到最大,以显示全部的线程信息

4: 对于EXC_BAD_ACCESS类型的错误,可以尝试打开Zombie来查找错误

5: 崩溃时,如果使用的是模拟器,则输入:(po是用来打印一个对象的, p可以用来打印一个结构体或简单数据格式如int, float)

寄存器的值,可以直接通过register read来查看。

(lldb) po $eax
(lldb) po [$eax class]
(lldb) po [$eax name]
(lldb) po [$eax reaon]
如果是在真机上,则使用:
(lldb) po $r0
(lldb) po [$r0 class]
(lldb) po [$r0 name]
(lldb) po [$r0 reson]

转载地址:http://qrwpi.baihongyu.com/

你可能感兴趣的文章
百万年薪挖了个阿里P8“水货”程序员?佛曰,不可说
查看>>
HTML5实时语音通话聊天,MP3压缩传输3KB每秒
查看>>
【HTML 教程】列表标签
查看>>
来自于编程大师的职业建议:别老想着写码
查看>>
Facebook中国程序员之死:年仅38岁跳楼轻生,浙大EE毕业生,去年刚入职
查看>>
【JavaScript 教程】事件——其他常见事件
查看>>
Axios使用指南
查看>>
Chrome(谷歌)控制台,console实用教程
查看>>
精选 20 个优质的加载动画,附源码学习地址
查看>>
为什么这些阿里、腾讯、字节跳动的大佬们年薪百万,让他们的公众号告诉你...
查看>>
20个常用的JavaScript字符串方法
查看>>
【HTML 教程】图像标签
查看>>
处理 JS中 undefined 的 7 个技巧
查看>>
纯CSS3实现的几款条纹大背景
查看>>
CSS怎么实现内容不相同的左右两个div等高?
查看>>
CSS flex布局入门
查看>>
使用 ssh 连接 Github 代码库超详细教程
查看>>
21个React开发神器
查看>>
8种常见数据结构及其Javascript实现
查看>>
13 个 NPM 快速开发技巧
查看>>