解决部分在Debug模式下程序没问题但是Release模式下出现问题的方法
编译策略介绍
关于优化级别:GCC_OPTIMIZATION_LEVEL 描述如下
None: Do not optimize.
[-O0]With this setting, the compiler’s goal is to reduce the cost of compilation and to make debugging produce the expected results. Statements are independent: if you stop the program with a breakpoint between statements, you can then assign a new value to any variable or change the program counter to any other statement in the function and get exactly the results you would expect from the source code.Fast: Optimizing compilation takes somewhat more time, and a lot more memory for a large function.
[-O, -O1]With this setting, the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of compilation time. In Apple’s compiler, strict aliasing, block reordering, and inter-block scheduling are disabled by default when optimizing.Faster: The compiler performs nearly all supported optimizations that do not involve a space-speed tradeoff.
[-O2]With this setting, the compiler does not perform loop unrolling or function inlining, or register renaming. As compared to the ‘Fast’ setting, this setting increases both compilation time and the performance of the generated code.Fastest: Turns on all optimizations specified by the ‘Faster’ setting and also turns on function inlining and register renaming options. This setting may result in a larger binary.
[-O3]Fastest, smallest: Optimize for size. This setting enables all ‘Faster’ optimizations that do not typically increase code size. It also performs further optimizations designed to reduce code size.
编译策略资料:
https://gcc.gnu.org/onlinedocs/gnat_ugn/Optimization-Levels.html
拓展问题
1.今天在测试app时,发现app store上版本有奔溃现象,但是直接用xcode跑本地程序没问题。猜测release&debug版本造成的,后发现targets的 optimization level设置问题,将release版本的optimization level改为none后程序不再崩溃
2.问答
问:写了个程序。但在release模式下真机测试 ,不能正常工作。例如界面从网络上获取的图片等等。 但当optimization level设置成NONE后所有问题都正常了。
发布到APPSTORE上的程序编译时必须设置optimization level为 [-Os] 吗?如果设置为NONE会不会不通过审核?
答:Optimization Level 应该是编译器的优化程度。
比较早期的时候,硬件资源是比较缺乏的。为了提高性能,开发编译器的大师们,都会对编译器(从c到汇编的编译过程)加上一定的优化策略。优化后的代码效率比较高,但是可读性比较差,且编译时间更长。
优化是指编译器一级的措施,与机器指令比较接近,所以很可能会导致硬件不兼容,进而产生了你目前遇到的软件装不上的问题。
他是编译器的行为,与你代码理论上不相关的。 苹果的检查应该是检查你的代码一级的规范程度,隐私侵权相关的问题。 应该是与编译的过程是无关的。请放心。
解决部分在Debug模式下程序没问题但是Release模式下出现问题的方法的更多相关文章
- 终于解决了用JAVA写窗口程序在不同的windows界面下的显示保持一致。
好像是两三年前的时候发现这个问题. 由于在windows经典界面与windows xp界面下,窗口的标题栏的高度是不一样的. 所以我们在用Java写GUI程序的时候,会遇到一个问题. 当我把一个JFr ...
- OpenCV在debug和release模式下选择不同的lib静态库文件
这两天测试OpenCV显示到MFC的Picture控件上,终于测试成功了,但是换到release模式下就会imread失败.发现问题是导入的lib问题. 因为VS如果通过Property Manage ...
- log4net在release模式下无法生成文件或不写入日志
在Debug模式一切正常,但是在release模式下log4net不工作,查了很多资料,终于解决.具体做如下检查修改. 1.检查log4net写入日志文件路径是否正确: 2.检查对应日志文件路径是否有 ...
- 一键开关VS的release模式优化
因为我们公司的项目规模非常大了,如果日常调试使用debug模式的话,每次调试启动都要非常长的时间,因此大多数人使用release关优化的方式来进行日常开发.但是因为持续集成的存在,上传的代码要求是开启 ...
- Debug模式下程序卡
Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用. D ...
- 在debug模式下运行不报错,换到release模式下报找不到某某库或文件的错。。解决办法
我遇到的问题是:把edit secheme调到debug模式运行没有问题,然后调到release模式的时候报目录下没有libTuyoo.a 解决办法 把断开真机设备,用IOS device下relea ...
- ASM:《X86汇编语言-从实模式到保护模式》第13章:保护模式下内核的加载,程序的动态加载和执行
★PART1:32位保护模式下内核简易模型 1. 内核的结构,功能和加载 每个内核的主引导程序都会有所不同,因为内核都会有不同的结构.有时候主引导程序的一些段和内核段是可以共用的(事实上加载完内核以后 ...
- Xcode/iOS: 如何判断代码运行在DEBUG还是RELEASE模式下?
原帖链接:http://stackoverflow.com/a/9063469 首先确定下项目的 Build Settings 是否已经设置过宏定义 DEBUG,如何看呢? 点击 Build Sett ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
随机推荐
- 2011-12-14 调用cmd并获得输入输出+网络访问
System.Diagnostics.Process pro = new System.Diagnostics.Process(); pro.StartInfo.FileName = "cm ...
- composer update的错误使用以及如何更新composer.lock文件
用composer update装包是错误的. 安装包标准的方法应该是 require ,或者手动写 compose.json 文件,然后 composer install .如果只是需要更新 com ...
- Oracle 11g oracle 用户密码过期问题 (ZT)
http://www.blogjava.net/freeman1984/archive/2013/04/23/398301.html Oracle 11g 之前默认的用户时是没有密码过期的限制的,在O ...
- doker 笔记(1) 架构
Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 ...
- 部署和调优 3.1 dns安装配置-1
安装配置DNS服务器 装一个bind,首先搜一下. yum list |grep bind bind.x86_64 我们安装这个 安装 yum install bind.x86_64 -y 看一下 ...
- Mysql Hive 通用的行列转换
就是简单的一个字符串拼接,意义和所用场景自己体会下 insert into table agent_library1 select concat_ws(':',collect_set(name)) a ...
- day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询
Hibernate: insert into Customer (cname) values (?)Hibernate: in ...
- FactoryMethodPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...
- little case1
这句话有问题: frame.setContentPane().add(button); The method setContentPane(Container) in the type JFrame ...
- Inheritance with EF Code First: Part 1 – Table per Hierarchy (TPH)
以下三篇文章是Entity Framework Code-First系列中第七回:Entity Framework Code-First(7):Inheritance Strategy 提到的三篇.这 ...