原因在于在对代码进行编译的时候默认开启了-O2选项,解决方法;

1.单个C/C++文件进行编译时,可直接将-o更改为-O0,即编译时不进行优化;

2.工程文件MakeFile中,可添加如下标签:

# C optimization flags

COPT =-O0 -funroll-loops

3.利用Cmake进行编译时,在cmakelist中修改如下:

# Add -O0 to remove optimizations when using gcc
IF(CMAKE_COMPILER_IS_GNUCC)
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
ENDIF(CMAKE_COMPILER_IS_GNUCC)

4.关于优化等级的说明:
这个选项控制所有的优化等级。使用优化选项会使编译过程耗费更多的时间,并且占用更多的内存,尤其是在提高优化等级的时候。 -O设置一共有五种:-O0、-O1、-O2、-O3和-Os。你只能在/etc/make.conf里面设置其中的一种。除了-O0以外,每一个-O设置都会多启用几个选项,请查阅gcc手册的优化选项章节,以便了解每个-O等级启用了哪些选项及它们有何作用。
让我们来逐一考察各个优化等级:

-O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。
-O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。
-O2:-O1的进阶。这是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。
-O3:这是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x,-O3生成的代码也只是比-O2快一点点而已,而gcc4.x中还未必更快。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)。这样做将得不偿失,记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。
-Os:这个等级用来优化代码尺寸。其中启用了-O2中不会增加磁盘空间占用的代码生成选项。这对于磁盘空间极其紧张或者CPU缓存较小的机器非常有用。但也可能产生些许问题,因此软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的。
正如前面所提到的,-O2是推荐的优化等级。如果编译软件出现错误,请先检查是否启用了-O3。再试试把CFLAGS和CXXFLAGS倒回到较低的等级,如-O1甚或-O0 -g2 -ggdb(用来报告错误和检查可能存在的问题),再重新编译。
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。

参考文献:https://blog.csdn.net/lemonaha/article/details/76391683

GDB调试时,出现value optimized out的解决办法小结相关推荐

  1. VS调试时opencv_world400d.pdb not loaded 的解决办法

    vs调试opencv程序出现下图错误 我搜索了一下全部的文件,发现在这个pdb文件其实在opencv文件夹下面,那就拷过来到DEBUG文件夹下,就解决了...

  2. gdb调试时,Program received signal SIGPIPE, Broken pipe.

    今天在gdb调试时,发现总是出现Program received signal SIGPIPE, Broken pipe,搜索了网上的资料,发现是在调试时,接收到了SIGPIPE这个signal信号导 ...

  3. Linux——gdb调试时多进程切换方法(attach/follow-fork-mode)

    对于程序中创建子进程的情况,进行gdb调试时会默认选择父进程进行调试,假如需要对子进程进行调试就需要使用特殊方法. 共有两种方法可供选择: 目录 一.attach子进程PID ①.运行进程 ②获取进程 ...

  4. vs2015调试时不显示vector内容的解决方法

    vs2015调试时不显示vector内容的解决方法 参考文章: (1)vs2015调试时不显示vector内容的解决方法 (2)https://www.cnblogs.com/Joetao/artic ...

  5. Fluent UDF 调试时中文乱码问题不优雅解决

    Fluent UDF 调试时中文乱码问题不优雅解决 在Fluent 15 版本以上,进行UDF调试时,无论代码是否正确,都会显示有乱码问题.现提出一个较为笨拙的解决方法. Transcript可以将用 ...

  6. phpstudy mysql端口_PHP集成环境phpstudy启动时80或者3306端口占用解决办法

    <PHP集成环境phpstudy启动时80或者3306端口占用解决办法>要点: 本文介绍了PHP集成环境phpstudy启动时80或者3306端口占用解决办法,希望对您有用.如果有疑问,可 ...

  7. 打开Office时出现“运行时错误91”问题的解决办法

    打开Office时出现"运行时错误91"问题的解决办法 一.将 C:/Documents and Settings/All Users/Application Data/Micro ...

  8. mysql出现1499错误_连接MySQL时出现1449与1045异常解决办法

    连接MySQL时出现1449与1045异常解决办法 mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解 ...

  9. lombok使用中出现继承关系的对象时,出现的问题及解决办法

    lombok使用中出现继承关系的对象时,出现的问题及解决办法 参考文章: (1)lombok使用中出现继承关系的对象时,出现的问题及解决办法 (2)https://www.cnblogs.com/h- ...

最新文章

  1. 递归 尾递归_代码简报:递归,递归,递归
  2. Linux下运行java DES解密失败,报javax.crypto.BadPaddingException:Given final block not properly padded
  3. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
  4. python读取mysql数据_Selenium(Python) ddt读取MySQL数据驱动
  5. ShardingSphere(七) 读写分离配置,实现分库读写操作
  6. mysql exists依赖查询_MySQL EXISTS 和 NOT EXISTS 子查询
  7. Git和Github实现代码同步
  8. 作词家下岗系列:教你用 RNN 算法做一个写词软件
  9. mysql 分页 pageindex_mysql 超1亿数据,优化分页查询
  10. Weblogic下载安装以及部署
  11. android开发动画和壁纸,Android静态壁纸和动态壁纸的使用和理解
  12. Android 源码编译mk里导入androidx下的包
  13. 顶级期刊:关于提升人体免疫力的一切!5点有益建议
  14. Mac环境安装Win虚拟机
  15. 骨骼的动作识别数据集_基于关节数据的人体动作识别
  16. Unity HDRP室外场景打光流程分享(下篇)-白天和夜晚场景打光
  17. log4j2远程代码执行漏洞学习总结
  18. TreeMap、TreeSet简介
  19. u盘怎么数据恢复?靠这四种解决方法
  20. HTML5和CSS3 介绍开发实战需要的(二)

热门文章

  1. Jeecg-Boot上传附件异常问题处理
  2. Docker安装Redis(docker-compose.yml)
  3. 常见的SQL笔试题和面试题:SQL经典50题
  4. [Asp.Net Core] Blazor Server Side 项目实践 - 切换页面时保留状态
  5. 三范式理解 数据库原理
  6. CCF 201412-1 门禁系统
  7. 【Day09】JavaScript 为什么要区分微任务和宏任务
  8. PHPStorm开启Debug
  9. 一种通用的动作解决方案
  10. gatsby_使用TinaCMS + Gatsby编辑Markdown的3种方法