VS编译器优化诱发一个的Bug】的更多相关文章

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,我们不知道它是多少.…
阅读目录: 递归运用 尾递归优化 编译器优化 递归运用 一个函数直接或间接的调用自身,这个函数即可叫做递归函数. 递归主要功能是把问题转换成较小规模的子问题,以子问题的解去逐渐逼近最终结果. 递归最重要的是边界条件,这个边界是整个递归的终止条件. static int RecFact(int x) { ) ; ); } RecFact(); 上面是个经典阶乘函数的实现.这里分2步: 转换,把10的阶乘转化成10*9!,10(9*8!)....每次转换规模就变的更小. 逼近,转换到最小规模时0!,…
本文为第六部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/cpp-rvalue-references-explained-introduction.html. Move语义和编译器优化 考虑下面这样的函数定义: X foo() { X x; // perhaps do something to x return x; } 现在同以前一样进行假设,给出一个X类,我们可以通过重载它的拷贝构造函数和拷贝赋值操作符来实现move语义.如果你看了一眼上面的函…
gcc编译器优化给我们带来的麻烦??? 今天看到一个很有趣的程序,如下: ? 1 2 3 4 5 6 7 8 9 int main() {     const int a = 1;     int *b = (int*)&a;     *b = 21;       printf("%d, %d", a, *b);     return 0; } 当我第一眼看到这个程序的时候,我想当然的认为输出结果是21, 21,但是我错了 一时很难理解,于是我又输出了它们的地址: ? int …
使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的. 优化代码开关即optimize开关,和debug开关一起,有以下几种组合. 在Visual Sutdio中新建一个C#项目时, 项目的"调试"(Debug)配置的是/optimize-和/debug:full开关, 而"发布"(Release)配置指定的是/optimize+和/debug:pdbon…
C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码开关即optimize开关,和debug开关一起,有以下几种组合. 在Visual Sutdio中新建一个C#项目时,项目的“调试”(Debug)配置的是/optimize-和/debug:full开关,而“发布”(Release)配置指定的是/optimize+和/debug:pdbonly开关…
C#编译器优化 https://www.cnblogs.com/podolski/p/8987595.html 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的. 优化代码开关即optimize开关,和debug开关一起,有以下几种组合. 在Visual Sutdio中新建一个C#项目时,项目的"调试"(Debug)配置的是/optimize-和/debug:full开关…
对于上面的课程我们很好的处理了一个小bug,那么我们现在讲程序进行优化一下,前一节的程序中,我们处理处理的属性都是写死了的.为了我们能够很好的对某个属性进行操作的话.我们这样来设置. js文件 window.onload=function(){ var ls=document.getElementsByTagName("li"); for(var i=0,l=ls.length;i<l;i++){ ls[i].timer=null; ls[i].onmouseover=funct…
title author date CreateTime categories win10 uwp 禁止编译器优化代码 lindexi 2018-08-10 19:16:50 +0800 2018-2-13 17:23:3 +0800 Win10 UWP 有时候写了一些代码,但是在优化代码的时候出错,但是如果不优化代码,性能很差.如何让编译器不优化一段代码? 一般发布的软件都会选优化代码,点击属性选择生成就可以看到优化代码 假如有方法 Foo ,这个方法里面写了一些特殊代码,不想让编译器优化,那…
Java中String不是基本类型,但是有些时候和基本类型差不多,如String b = "tao" ; 可以对变量直接赋值,而不用 new 一个对象(当然也可以用 new). Java中的变量和基本类型的值存放于栈内存,而new出来的对象本身存放于堆内存,指向对象的引用还是存放在栈内存.例如如下的代码: int  i=1; String s =  new  String( "Hello World" ); 变量i和s以及1存放在栈内存,而s指向的对象”Hello…
摘要:为了保障华为云GaussDB产品的可靠性,每一款产品发布前都要通过多轮严苛的测试用例. 说明:本文中的MySQL,如果不做特殊说明,指的是开源社区版MySQL. 华为云数据库新版本在发布之前,会面临一系列严苛的测试规则,除了要求通过MySQL的所有测试用例之外,还需要通过由华为百万级更丰富.更贴近用户业务场景的测试用例构筑的测试防护网,以此充分验证新版本是否满足用户经典场景的稳定性. 正是在这样严苛的验证过程中,我们发现了MySQL的一个潜在Bug. Bug描述 测试环境: 基于相同的测试…
摘要:本文中,我们将介绍通过代码移动(插入)的方式消除冗余计算的一个典型方法. 本文分享自华为云社区<编译器优化那些事儿(3):Lazy Code Motion>,作者:毕昇小助手. 导语 本文中,我们将介绍通过代码移动(插入)的方式消除冗余计算的一个典型方法. 下图给出的简要程序流图中, ①是我们想要优化的代码,②和③是优化后的代码,让我们先思考下面几个问题: ②和③哪个优化效果更好一点? ③ 更好一点,相比 ② 寄存器生存周期更短 ③这种情况,在 p 点直接插入 t=b+c 会带来安全或性…
摘要:SLP矢量化的目标是将相似的独立指令组合成向量指令,内存访问.算术运算.比较运算.PHI节点都可以使用这种技术进行矢量化. 本文分享自华为云社区<编译器优化那些事儿(1):SLP矢量化介绍>,作者:毕昇小助手. 0.Introduction Superword Level Parallelism (SLP)矢量化是llvm auto-vectorization中的一种,另一种是loop vectorizer,详见于Auto-Vectorization in LLVM[1]. 它在2000…
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:Visual C++中的编译器优化.…
python初学者,非常喜欢虫师的文章. 练习时发现一个小bug,http://www.cnblogs.com/fnng/p/3782515.html 验证邮箱格式一题中,第三个x不允许有数字,但是测试发现abc@de.f2g 仍显示验证邮箱地址正确 发现 re.match() 匹配的只是开头,故想到了分组的方法,代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- #Myemails.py import re def Myemails(e):…
最近调试HEVC中码率控制, 发现里面一个重大bug! 码率控制中有这么一个函数: Int TEncRCGOP::xEstGOPTargetBits( TEncRCSeq* encRCSeq, Int GOPSize ) {   Int realInfluencePicture = min( g_RCSmoothWindowSize, encRCSeq->getFramesLeft() );   Int averageTargetBitsPerPic = (Int)( encRCSeq->ge…
1     从数据库中找出一个学生能选的毕业设计(毕设的select or not 字段表示本题目是否已经被选 此时就按照其值为n来查询) 2     用户选择某个毕设后,先更新毕设表(select or not 字段置y 默认为n,选择后就是y),同时在新的一张表中记录某个用户选了某个题目 最后发现多个学生选了同一个毕设 最后发现了一个逻辑bug 我本来以为经过第一步后的毕设题目都是这个学生能选的,所以在第二步就没有判断这个题目是否还能选 但问题就恰恰出在这: 用户a提交请求获得10个题目 然…
Lazarus下面的javascript绑定另外一个版本bug修正 从svn 检出的代码有几个问题 1.fpcjs.pas 单元开始有 {$IFDEF FPC} {$MODE delphi} {$ENDIF} 设置的delphi模式,可是后面有这样的代码 {$ifndef fpc} // inc(argv,i); pom := pjsval(argv^); dec(argv,i);}   // this original code does not work in delphi 7 // pom…
本来按理说这个小问题不值得写一个博客的,不过正是这个小问题造成了一个大bug. 本来每月对数据都好好的,但是这一两天突然发现许多数据明显不对,这一块的代码和sql有些不是我写的,不过出现了bug,还是要迎难而上,我就从数据源头查起,发现数据源好像也没有问题. 地毯式搜索,中间的sql,逻辑一个一个对. 突然发现了有个sql有些不对,是个A RIGHT JOIN B +group by这种类型的. 左表查出来4条数据,右表6条数据.按理说 右查询的结果,应该也是6条数据,但是结果却是5条数据. 我…
终于解决了贴吧手机版的一个重大BUG 别诧异虽然同一个域名,但是,PC 和手机打开完全不一样的体验 http://tieba.yunxunmi.com/ 吃点夜校准备做梦去!! 发现 我云贴吧 一个 重大漏洞赏黄金千两啊…
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源代码传送:http://dwz.cn/Nret1 例如以下图示[美团和大众点评]: 实现分类控件功能的思路: 1.实现collection v…
本来想简化 ThinkSNS 系统里面的一个缓存管理函数: <?php /** * 用来对应用缓存信息的读.写.删除 * $expire = null/0 表示永久缓存,否则为缓存有效期 */ function S($name, $value = '', $expire = null) { static $_cache = array(); //减少缓存读取 $cache = model('Cache'); //$name = C('DATA_CACHE_PREFIX').$name; if (…
java nio的一个严重BUG Posted on 2009-09-28 19:27 dennis 阅读(4588) 评论(5)  编辑  收藏 所属分类: java .源码解读      这个BUG会在linux上导致cpu 100%,使得nio server/client不可用,具体的详情可以看这里http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6403933 .令人失望的是这个BUG直到jdk 6u4才解决,sun的拖沓让人难以相信.…
当我修复一个隐藏Bug时 然后,陷入了死循环中....   扩展阅读 趣图:大佬如何解决bug的 趣图:快下班了,剩一个bug,修复一下再走 趣图:当我给老板展示我修复了那个 bug 时 趣图:当同事问你昨天加班情况时 趣图:好好干,今天再加个班  …
一:背景 1. 讲故事 周五下午运营反馈了一个紧急bug,说客户那边一个信息列表打不开,急需解决,附带的日志文件也发过来了,看了下日志大概是这样的: 日期:2020-11-13 12:25:45,923 线程ID:[3924] 日志级别:INFO 错误类:xxx property:[(null)] - 错误描述:应用程序出现了未捕获的异常,Message:该字符串未被识别为有效的 DateTime.; StackTrace: 在 System.DateTimeParse.Parse(String…
1. 一个小Bug 最近和同事提起一个几年前的 Bug,那是一个很小很小的 Bug,没什么技术含量.那时候我刚入职,正好公司卖了一款仪器到某个国家,但是那边说配套的软件运行不起来,一打开就报错.经过排查发现出错的代码很简单,大致是这样: public static int GetSecond(DateTime time) { return Convert.ToInt32(time.ToString().Split(":")[2]); } 当时真是哭笑不得.这段代码应该是从旧语言迁移过来…
convert_int_to_char函数在使用时出现过一个BUG. 当使用值是13200020099时,返回的字符串是"13200020111",结果是错误的. 在gcc编译器里,使用32位整型时对一个数value除于100时会默认优化成先将value乘以0x51eb851f再右移37位:而使用long long类型时就不做任何优化,即便做除于100的value实际是小于32位整型的最大值也是如此. 在函数covert_int_to_char函数里有部份代码有除以100的逻辑,使用了…
  以下内容来自搜狗实验室技术交流文档,搜狐公司研发中心版权所有,仅供技术交流   摘要 --------- 乱序优化是现代编译器非常重要的特性,本文介绍了什么是乱序优化,以及由此引发的一个bug,希望引起各位开发者的注意.   乱序优化 --------- 乱序优化和cpu的乱序执行很类似. 现代cpu都采用流水线结构,流水线的各级可以同时执行不同的指令,也只有用多条指令将流水线填满以后,cpu的能力才能得到充分发挥. 乱序执行(out-of-order execution)是指cpu允许将多…
摘要:一个有意思的 Crash 探究过程,Clang 有 GCC 没有 本文首发于 Nebula Graph 官方博客:https://nebula-graph.com.cn/posts/troubleshooting-crash-clang-compiler-optimization/ 如果有人告诉你,下面的 C++ 函数会导致程序 crash,你会想到哪些原因呢? std::string b2s(bool b) { return b ? "true" : "false&q…