起因 一次偶然碰到一个诡异的bug,现象是同一份C++代码使用GCC4.4.x版本在开启优化前和优化后的结果不一样,优化后的代码逻辑不正确. 示例代码如下: //main.cpp #include <stdio.h> enum Type { ERR_A = -1, ERR_B = 0, ERR_C = 1, }; void func(Type tt) { switch(tt){ case ERR_A: printf("case ERR_A, tt = %d\n", tt);…
直接上程序: setjmp和longjmp是处理函数嵌套调用的,goto语句不能跨越函数,所以不选择goto. #include <setjmp.h> int setjmp(jmp_buf env); //返回值:若第一次直接调用则直接返回0,若从longjmp调用则返回下面的val void longjmp(jmp_buf env, int val); 对程序进行不带优化编译: [henry@localhost c]$ gcc -g youhua.c -o youhua 对程序进行带优化的编…
https://askubuntu.com/questions/26498/choose-gcc-and-g-version https://stackoverflow.com/questions/7832892/how-to-change-the-default-gcc-compiler-in-ubuntu https://codeyarns.com/2015/02/26/how-to-switch-gcc-version-using-update-alternatives/ 关于 updat…
http-paser是一个用c编写的http消息解析器,地址:https://github.com/nodejs/http-parser,目前版本2.9 今天用gcc 7.3.0编译其2.1版本时,编译器报错如下: 找到对应的代码: http-parser的编译同时打开了-Wall -Wextra -Werror -Wimplicit-fallthrough,是C++17标准引入的警告选项,因为这个地方没有break.如果编译时有编译选项-Wextra,该编译选项将添加.-Werror将警告视为…
版本优化 标签(空格分隔): 测试 需求经手人太多,直接提bug,开发不乐意,跟Leader确认不靠谱,跟PM确认,不熟悉流程,跟第三方PM确认靠谱了,结果被开发三言两语,变成了不改bug 而改需求 ----多沟通,除此之外,别无他法 目标对象包括素材.文字.图片.背景,不一样的场景,包含的目标对象不一致,有PM漏考虑,开发漏做,QA漏测的现象 ----多沟通,多开会 组合特例(2素材重叠).tab反复切换后的默认选中状态,要考虑 更换渲染后图,会导致意想不到的结果(缓存被带入) 锁定/非锁定状…
VS编译器优化诱发一个的Bug Bug的背景 我正在把某个C++下的驱动程序移植到C下,前几天发生了一个比较诡异的问题. 驱动程序有一个bug,但是这个bug只能 Win32 Release 版本下的驱动才能重现.在 Win32 Debug 版本下,和 Win64 Release/Debug 版本下均无法重新. 随着一步步的分析,最终发现问题是由于VS编译器的一个优化诱发的.当然这并不是VS编译器的bug,只是由于优化诱发程序里面的某个bug. 调试的思路 1. Debug Vs Release…
C 编译器优化过程中的 Bug 一个朋友向我指出一个最近他们发现的 GCC 编译器优化过程(加上 -O3 选项)里的 bug,导致他们的产品出现非常诡异的行为.这使我想起以前见过的一个 GCC bug.当时很多人死活认为那种做法是正确的,跟他们说不清楚.简言之,这种有问题的优化,喜欢利用 C 语言的“未定义行为”(undefined behavior)进行推断,最后得到奇怪的结果. 这类优化过程的推理方式都很类似,他们使用一种看似严密而巧妙的推理,例如:“现在有一个整数 x,我们不知道它是多少.…
react native的0.56.0版本在windows下有bug不能正常运行请init 0.55.4的版本 react-native init MyApp --version 0.55.4 注意version前是两个杠…
---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update....   yum install 或者 添加yum 的 repo 文件 也不行, 只能更新到 4.4.7! then,  只能手动编译安装了,那么开始第一步下载源代码吧,GO! 1. 获取安装包并解压 wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.bz2 tar -jxvf gc…
protobuf-net优化效果图 protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的源代码不支持Unity3D游戏在各个平台上的动态库构建.它是一个网络传输层协议,对应的lua版本有两个可用的库:一个是proto-gen-lua,由tolua作者开发,另外一个是protoc,由云风开发.protobuf-net在GC上有很大的问题,在一个高频率网络通讯的状态同步游戏中使用发现GC过…