ios开发答疑录系列​---xcode release 和 debug 模式造成的不同

============================================================
博文原创,转载请声明出处
电子咖啡(原id蓝岩)
============================================================
公司的应用在本地测试没有问题,于是提交到app store,审核通过后,自己下下来看看,去发现了一个crash。回到自己的mac上断点调试,正常。思考片刻,想起自己在本地开发是debug模式,而app store发布的是release模式,难道是两者的不同?于是我切换到release模式重新运行(切换方式如下图),报错。好吧,打断点找原因。却发现断电的log不打印,而且查看内存也是乱起八糟,疯掉。于是开始思考ios的debug和release有什么不同。


Release是发行版本,比Debug版本有一些优化,文件比Debug文件小 Debug是调试版本,Debug和Release调用两个不同的底层库。
一、"Debug是调试版本,包括的程序信息更多"
二、只有DEBUG版的程序才能设置断点、单步执行、使用TRACE/ASSERT等调试输出语句。
三、REALEASE不包含任何调试信息,所以体积小、运行速度快。

说一下我这次遇到的错误:

代码是一段循环,错误原因是我数组越界了

 int emojiRangeArray[12] = {0,10,20,30,40,50,60,70,80,90,100,104};
    for (int j = 0 ; j<12 ; j++ ) {
        int startIndex = emojiRangeArray[j];
        int endIndex = emojiRangeArray[j+1]; //【1】、这里j最大是11,所以j+1是12,越界了
        printf("showEmojiView---startIndex: %d, endIndex: %d\n",startIndex,endIndex);
        for (int i = startIndex ; i<= endIndex ; i++ ) { //【2】、这里由于上面越界,这里提供的数值不对,所以内部NSArray objectAtIndex调用时候越界了
但是在debug中,emojiRangeArray[12]=12,小于startIndex,【2】处条件不符,循环结束,没有触发exception。

但是在release中,emojiRangeArray[12]=1094795585(应该是内存地址),大于于startIndex,【2】处条件符合,继续循环,触发了exception。

关于release和debug的不同,我还会继续记录,今天先写到这里吧,下班了,久违的双休啊微笑

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值