iOS调试Bug技巧
本文转载自唐巧大神的博客,
让XCode的 Stack Trace信息可读
让XCode的 Stack Trace信息可读
NOV 14TH, 2012
昨天在写iOS代码的时候,调试的时候模拟器崩溃了。异常停在了如下整个main函数的入口处:
1 2 3 4 5 6 7 |
|
XCode的Console界面报出了一些出错信息, 如下图所示:
我根据Console里面的文字提示信息,猜出应该是出现了空指针nil的操作。但是具体出错在哪一行,却不知道。最终虽然找到了bug,但是debug的过程确实费了些时间。考虑到这个stace trace信息应该对我挺有帮助才对的,所以我就查了一下如何让这原本一堆16进制的调用栈信息更可读。于是在stackoverflow上找到了2个比较好的解决办法,在这里分享给大家。
方法一
该方法的步骤是,首先在你的AppDelegate中定义一个方法, 用于处理异常:
1 2 3 4 5 |
|
然后在应用启动时,设置这个方法作为自己的自定义异常回调:
1 2 3 4 5 |
|
完成之后,当对于上面的异常,在定义了这个回调之后,Log信息变成如下所示,出错行一目了然,根据下面的可读的stack trace,我一下就可以找到是QuestionParser这个类的第378行导致的异常,进而可以跳到出错行分析原因,很容易就把bug修复了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
方法二
方法二相比方法一更加简单,具体做法是在XCode界面中按cmd + 6跳到Breakpoint的tab,然后点击左下角的+号,增加一个Exception的断点,如下图所示。这样,当异常出现时,会自动停在异常处,而不会抛出到UIApplicationMain。拿我的有bug的程序来说,代码会自动断在QuestionParser这个类的第378行。
总结
其实以前XCode是能显示出可读的stack trace信息的,似乎到了XCode4.2以后就出问题了。所以上面提到的2个办法相当于walk around解决了XCode4.2以后出现的bug。如果该文章对你有用,希望你能帮我点击下面的分享按钮,分享给更多朋友,同时也帮我宣传一下博客,这将有助于我分享更多的心得给大家,Have fun!
Posted by 唐巧 Nov 14th, 2012 iOS
iOS调试Bug技巧相关推荐
- iOS调试奇巧淫技(一)
你以为,你以为的就是你以为的吗? 你以为你代码写的很OK啦? 你以为你的是大牛啦? 你以为的就是你以为的吗? 你的代码经得起考验吗?(PS:爱经得起考验吗) iOS调试的技巧很多,通过调试我们不仅可以 ...
- Eclipse调试Bug的七种常用技巧(转)
注意事项及小结: (1)Line Breakpoint: 如果设置Conditional,监控的变量需要比当前行高一级block,譬如for(int i=0;i<20;i++)中的i,for循环 ...
- 调试小技巧---利用调用堆栈
2019独角兽企业重金招聘Python工程师标准>>> 调试小技巧---利用调用堆栈 如图:在解决bug的时候,不能确定下一步程序执行到哪,可以利用Xcode中的调用堆栈 来快速查 ...
- # Idea 调试 Debug 技巧
Idea 调试 Debug 技巧 IDEA 为我们提供了很多简单且非常强大的调试功能 在需要调试的行打上断点,debugger 方式启动Idea 控制台如下 调试功能说明 Show Execution ...
- Xamarin.iOS调试提示需要iOS SDK
Xamarin.iOS调试提示需要iOS SDK 错误信息:The version of Xamarin.iOS requires th iOS 9.3 SDK (shipped with Xcode ...
- 调试笔记--keil 断点调试小技巧
调试笔记–keil 断点调试小技巧 给变量打断点 调试不熟悉的项目时,卧槽!怎么这么多全局变量?这玩意又在那修改了??这个时候会给变量打断点就能省好多事. 将要监视的全局变量添加到watch窗口 选中 ...
- 12个Visual Studio调试效率技巧
在这篇文章中,我们假定读者了解VS基本的调试知识,如: F5 开始使用调试器运行程序 F9 在当前行设置断点 F10 运行到下一个断点处 F5 从被调试的已停止程序恢复执行 F11 步进到函数内(如果 ...
- GDB调试使用技巧 - 专职C++ - C++博客
GDB调试使用技巧 - 专职C++ - C++博客 GDB调试使用技巧 现在的linux下面开发,调试程序还是GDB好啊!杯具的slickedit,linux下面有不少问题.只好放弃! 1.使用TUI ...
- iOS开发小技巧 -- tableView-section圆角边框解决方案
iOS开发小技巧 -- tableView-section圆角边框解决方案 参考文章: (1)iOS开发小技巧 -- tableView-section圆角边框解决方案 (2)https://www. ...
最新文章
- 备忘-常用工具/网页
- Drupal 为前台(Front page)页面添加区域(Regions)
- C语言关系 是行还是列,C语言行优先和列优先的问题深入分析
- 所需依赖_注意细节,阿里架构师一文详解SpringDI的四种依赖注入方式
- 计算机检索基础知识,[转载]四 计算机文献检索基础知识(原理、结构和功能)...
- 【米课】思维导图与深度思考
- redis缓存穿透,缓存击穿,缓存雪崩原因和解决方案
- 知了课堂 python_知了课堂Python Flask系列(1)-基础篇 flask视频教程下载
- 罗升阳 51test 博客
- 数据结构(2)时间复杂度——渐进时间复杂度、渐进上界、渐进下界
- 全国湿地分类数据:内陆沼泽、盐碱地、红树林、潮汐平地
- 卡塔尔世界杯除了没有中国队以外,都是中国元素!
- Terraform学习2
- 微信支付结算费率怎么降低至0.2~0.35操作方法
- DAO跨事物调用---转账
- mysql怎么看端口号_mysql端口号(怎么查看mysql的端口号)
- 云主机Centos7下WordPress部署指南
- R语言计量经济学:工具变量法(两阶段最小二乘法2SLS)线性模型分析人均食品消费时间序列数据和回归诊断
- css中的单位换算_css 长度单位转换器
- 解决U盘在Linux系统只读的问题:[sdb] Write cache: disabled, read cache: enabled, doesn‘t support DPO or FUA
热门文章
- Infrared and Visible Image Fusion using a Deep Learning Framework解析
- 计算机专业英语的特点 1,计算机专业英语的的一些特点.doc
- 技术文摘9 刘 樱桃
- 互联网营销方法十五个
- [1]数据分析中变量取对数的意义
- 无法启动MySQL服务,提示“错误1069,由于登录失败而无法启动服务”
- 逻辑运算符 位运算符_在现代PHP中,按位运算符仍然有意义吗?
- 2022年5月8日 解决手机连接电脑无法选择“传输文件”
- Git-2.12.0-64-bit .exe下载持续更新最新版下载
- ASP.NET程序员常用的85个工具