Xcode7的发布后的crash跟踪,轻松定位崩溃代码 Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS

Xcode7中苹果为我们增加了两个重要的debug相关功能。了解之后觉得非常实用,介绍给大家。

1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS?

EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误。苹果这次带来了革命性的提升。

在项目的Scheme中Diagnostics下,选中enable address sanitizer(注意选中后Xcode会重新编译整个项目)。

这样设置后,如果再出现类似的错误会有更详细的错误信息提示,甚至会有内存使用情况的展示。

2.发布后的crash跟踪,轻松定位崩溃代码

在升级iOS9后,苹果会询问用户是否同意收集应用崩溃报告。这样在itunes connect的后台统计中就可以看到一些收集到的数据(通常会有相当一部分用户不同意,所以只是部分数据)。

2.1查看崩溃统计信息

在connect后台中选择app分析

进入分析页面后,tab中选择“指标”

然后在左侧的菜单中选择“崩溃”

这样就可以看到苹果收集到的崩溃统计,一定要注意这里只是一部分的数据,举例来说如果你看到的崩溃是10次,但是可能苹果只收集了20%的用户信息。所以你可以大概估计应该是10*5=50次崩溃。

2.2在Xcode中查看具体崩溃信息

在xcode中菜单的window下选择organizer,在打开的窗口中选择Crashes,这样Xcode会开始下载相关的崩溃信息到本地中(网络环境不好时可能要等待一些时间)。

organizer窗口

可以在左侧选择你要查看崩溃信息的发布版本

在崩溃信息这一栏苹果会按照崩溃数量排序,将崩溃数量最多的排在最前。右侧的详细信息会显示是崩溃时的调用堆栈,可以看到是哪行代码导致的崩溃。

选中要解决的崩溃后,可以在窗口右侧选择open in project。

神奇的事情发生了!!!在打开的项目中,会直接定位到崩溃的那行代码。这大大提高了调试的效率!我已经的迫不及待要和开发安卓的同事分享这份喜悦了。

注意!注意!

因为之前的项目发布时没有用xcode7打包,所以猜测符号表可能没有上传到苹果服务器,所以以前的项目可能不能直接显示是哪行代码,而是显示调用时出错的内存地址。不过下个版本你用xcode发布后就可以正常看到啦。

在解决完这个crash后可以标记为已经解决。有两个地方可以标记。

时间: 2024-10-05 04:19:37

Xcode7的发布后的crash跟踪,轻松定位崩溃代码 Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS的相关文章

SmartAssembly 6 + ClickOne 混淆发布,妈妈再也不用担心程序裸奔了

最近有个客户端项目用到ClickOne发布,用它主要也是因为它能检测并自动安装framework,而且也能自动更新. 后来由于项目需要,领导要求对程序进行加密处理,我们也当然照办了,于是找来了SmartAssembly,找到发布后的程序集是这样子的 使用ClickOne发布后程序集都是.deploy后缀的,那么只要把要加密的程序集改回dll,然后放到SmartAssembly里面进行混淆处理后再改回去,是不是就可以了呢? 答案是NO 因为这样做了之后自动更新就会异常,具体原因不明,不过根据个人推

[尝鲜]妈妈再也不用担心 dotnet core 程序发布了: .NET Core Global Tools

什么是 .NET Core Global Tools? Global Tools是.NET Core 2.1 中一个初次出现的特性.Global Tools提供了一种方法,让开发人员编写的.NET Core应用可以打包成NuGet包交付.如果.NET Core运行在目标平台上,那么一个恰当打包的Global Tool就可以在那上面运行.JavaScript开发人员可能会发现一件有趣的事,就是这个工具直接借鉴了NPM Global Tools. 安装程序(工具)命令如下: dotnet insta

[翻译]如何安装ACRA-一个Android应用Crash跟踪系统

[翻译]如何安装ACRA-一个Android应用Crash跟踪系统 -在你自己的服务器上 How to setup ACRA, an Android Application Crash Tracking system, on your own host 原文地址: http://inthecheesefactory.com/blog/how-to-install-and-use-acra-android/en 开发一个手机应用有如此多的限制,比如硬件限制(CPU,内存,电池等等).如果你的代码不

eclipse、eclipse_rcp工程发布前、eclipse_rcp工程发布后

接着上节说到的相对路径问题 eclipse的相对路径是相对于项目工程的路径:在这里可以直接使用Document doc = reader.read(new File("student.xml")); eclipse_rcp产品发布前的相对路径是相对于源码路径 InputStream in = MAC.class.getClassLoader().getResourceAsStream("student.xml"); Document doc = reader.rea

CocoStudio游戏发布后资源加密大致实现思路

截 止到目前,CocoStudio版本已经发展到1.5,各个子工具间也已经发生了巨大变化.但是,无论是动画编辑器,UI编辑器,场景编辑器还是 数据编辑器,它们生成(导出)的文件在商业开发中往往需要进行加密处理(当然,对于其中的一些部分加密也实在没有必要). 那么,版本发布时,如何对资源进行加密? 对此,以前官方没有给出任何回答.最近,我从cocoachina论坛上了解了几句,但是已经足够我们参考之用了.大致思路如下: NOTE: hanrea是cocoachina论坛中的一位高人,我有事经常与他

α发布后的感想(组长作业)

今天α发布后,组长作业,谈谈心得体会,谈谈哪些做的好的地方,哪些做的不好.耐撕团队组长因有事缺席,耐撕团队的α发布由齐同学来主持,所以这个作业由齐同学代理. 先谈谈耐撕团队在α发布会中齐同学认为做的好的地方吧:(傲娇状) 1.关于提前准备 说起提前准备,如果熟悉足球运动或篮球运动的同学一定知道,大部分的优秀运动员在比赛前都有"踩场地"的习惯,就是提前进比赛场地适应性热身.在α发布会之前,同样,耐撕团队的三名队员也提前30分钟来到了教室,提前30分钟的时间是齐同学提出的(此处窃喜状),原

WCF发布后远程访问的域名解析问题

环境: VS2010 sp1,.net framework 4.0,windows server 2003 x64 ,iis 6.0 症状: WCF开发测试,本地调用都正常.发布后,在浏览器中访问http://ip/Service.svc,可以正常浏览,但svcutil.exe 显示的是域名:http://域名/Service.svc. 在VS中,添加服务引用,地址输入http://ip/Service.svc,点击前往,提示错误,内容如下: URI http://ip/Service.svc

code first网站发布后数据表中没有数据问题

code first网站发布后数据表中没有数据问题 (1).将internal sealed class Configuration类访问修饰符改为public  class Configuration : DbMigrationsConfiguration<SimpleNews.EntityModels.SimpleNewsContext> (2).在Global文件的Start()方法中加入下面一段代码 Database.SetInitializer( new MigrateDatabas

非80端口的网站发布后外网访问的问题

今天在公司服务器(Windows 2008 server)上部署了两个网站,非80端口,完事后发现在外网无法访问.关闭防火墙发现OK,但是我们并不希望关闭防火墙,于是google,baidu,找到了解决方案. 控制面板=>windows防火墙=>高级设置=>窗口左侧选择"入站规则",中间选择"Branchcache内容检索(HTTP-IN)",右侧选中"新建规则",在弹出窗口中选择"端口"一项,输入端口号,下