不行,这个bug什么时候炉石巫妖王bug修复了

最难调试修复的 bug 是怎样的? |
我的图书馆
最难调试修复的 bug 是怎样的? |
【知乎用户的回答(247票)】:手机版app好像没法设置引用,不过 whatever这是Dave Baggett发表在Quora上一篇The hardest
you've ever debugged,读起来让人十分惊叹。(如果是我的话,在代码中找不到可能就直接放弃了。。。)回想起这个bug,仍然让我有些痛苦。作为一个,在发现bug时,你学会了首先在自己代码中找问题,或许在一万次之后,你会把问题归咎于编译器。只有在这所有的都不起作用之后,你才会把问题归咎于硬件。这是我遭遇一个硬件bug的故事。抛开别的不说,我曾为《Crash Bandicoot》写存储卡(读写)代码。对于一个自大的游戏程序员,这就像是在公园里散步一样轻松愉快,我认为只要几天就写完了。我中止调试六个礼拜。在此期间我做一些其他的事情,但我一直回来处理这个bug——几天内每天几个小时。这个bug实在烦人。这个bug的症状是,当你需要保存你的进度时,代码会访问存储卡,而大部分情况下没有什么问题…但是偶尔读写会超时…没有任何明显的原因。一个短小的写入经常毁掉存储卡。玩家要保存进度,我们不仅不保存,还擦除他们存储卡上的全部东西。天哪。过了一段时间,我们在Sony的制作人Connie Booth慌了。我们显然不能带着这个bug发布游戏,而六个星期之后我对于问题出在哪一点线索都没有。通过Connie我们向其他 PS1 开发者求助:有没有人出现过像我们这样的情况?没有。绝对没有任何人在存储卡系统上出现任何问题。在你绞尽脑汁之后,你能做的唯一一个调试方法就是分而治之:一点点去除程序中的代码,直到留下的代码很少但你仍然出问题。像木雕一样去除没有问题的代码,留下的就是你的bug所在。在这样的背景下挑战在于,视频游戏是很难去除某一部分的。在你删除模拟重力或者显示字符的代码后,如何运行游戏?你必须做的是用一个假装做真正的事情,但实际上只是做很简单的不会出现bug事情的东西来替换掉整个模块。你必须写新的支撑代码来让这些玩意正常工作。这是一个缓慢而痛苦的过程。长话短说:我做完了。我移除了大片大片的代码,相当多,只留下了初始化代码——就是准备游戏运行系统,初始化底层硬件等等。当然,我不能显示加载/保存菜单,因为我截除了所有的图像代码。但是我能够假装用户使用(不可见的)加载/保存屏幕并且请求保存,然后写入卡中。我最终以一个带有这个bug的很少量的代码结束——但问题仍然随机出现!在大多数情况下没啥问题,但是偶尔会失效。基本上所有的Crash的实际代码都被移除了,但还是这样。这实在是莫名其妙:留下来的代码基本上都没做什么事。在那时——估计是凌晨3点——一个想法蹦了出来。读写(I/O)涉及精确定时。无论是硬盘、存储卡、蓝牙发送器——随便啥——做读写的底层代码都是根据时钟来的。时钟让不直接连接到CPU的硬件设备和cpu运行的代码同步。时钟决定了波特率——数据从一头传到另一头的速率。如果计时有什么问题,硬件或者软件或者两者都会乱七八糟的。这真的,真的很糟糕,并且通常导致数据损坏。如果我们的初始化代码以某种方式弄乱了计时会怎么样?我又看了一遍测试程序中和计时有关的代码,并注意到我们将PS1上的可计时器设置到了1kHz(1000跳每秒)。这是比较快了,当PS1启动的时候,默认状态大概是100Hz。因此,大多数游戏将他们的计时器设置为100Hz。这个游戏的带头(和除我外的唯一)开发者Andy,将计时器设置为1kHz,使得Crash的动作计算更加准确。Andy喜欢矫枉过正,如果我们要模拟重力,我们应该尽可能的提高精度!然而如果提高计时器频率莫名其妙的干扰了整个程序的计时,故而将这个计时器设置到存储卡的波特率上会怎样呢?我将计时器代码注释掉。然后我就无法复原这个bug了。但是这并不表示bug被修复了,这个问题是随机发生的。万一我只是运气好呢?几天过去了,我还是在玩我的测试程序。Bug没有再出现。我回到全部的Crash代码中,修改了加载/保存代码,在访问存储卡之前将可编程计时器重置为默认设置(100Hz),之后设置回1kHz。从此之后没有发现问题再次出现。但是…为什么?我重新回到测试程序上,试着检测当计时器设置为1kHz时出现的那些错误的模式。终于,我注意到这些错误出现在使用PS1手柄的人身上。因为我自己很少这样做,所以我没有注意到(为啥我要在测试加载/保存代码的时候用手柄)。但是有一天我们的美工等我去完成测试(我确定那时候我在爆粗口),而他紧张的摆弄着手柄。卡损坏了。“等下,怎么回事?喂,再来一次!”一旦我发现了这两件事是联系着的,就很容易重现bug:开始写入存储卡,动一下手柄,存储卡损坏。在我看来完全是硬件bug。我去找Connie告诉他我的发现。她转述给设计过PS1的硬件工程师。她被告知:“不可能,这不可能是硬件问题。”我跟她说问一下我能不能直接和他说。那个工程师给我打电话了,他用着他的烂英语,我用着我更烂的日语,我们争论一会。我最后说:“我给你一个30行的测试程序,让你在动手柄的时候能够出现这问题。”他答应了。他向我保证,这是浪费时间,而他正在一个新项目上很忙,但因为我们是Sony很重要的开发者,他会试的。第二天晚上(我们在洛杉矶,而他在东京,所以对于我来说是晚上而他是到了第二天),他给我打电话,不好意思的向我道歉。这是个硬件问题。我还是没有完全搞清楚问题到底在哪,但是我的印象中,从Sony总部的反馈听到的是,如果将可编程计时器设置到足够高的时钟频率,会影响到主板上时钟晶振附近的一些东西。这些东西之一就是存储卡的波特率控制器,同时也设置手柄的波特率。我不是搞硬件的,所以对于细节我相当模糊。但是主旨是主板上两个独立部分的串扰,以及手柄接口和存储卡接口数据发送的结合在1kHz的时钟频率下会导致丢位,从而数据丢失,以致卡损坏。这是我全部编程生涯中,唯一一次因为量子力学debug的问题。Retrieve fromBaggett, D.【小熊的回答(46票)】:Bug有一个特点,就是你没调出来之前千难万难,你觉得自己一辈子都不会忘,可是一旦调出来了,90%的时候都会觉得,怎么这么简单……然后不出一星期就全忘了……至少我现在是一个也想不起來了……【vczh的回答(28票)】:这个目录里面大部分文章是我在做本科的毕业设计(KernelFP)的时候顺手记下来的,当时正在山寨一个没有type class的haskell。当然type class并不是多余的,我删去了之后做了一半发现这语言不完整很多东西没法表达,因此加入了一个很傻逼的feature来弥补type class的缺失(),因为毕业设计不想大改,反正老师也看不明白。写这个东西的时候出现的bug是我调试得最痛苦的。这个东西的主要目的不是为了让程序运行起来,而是想做一个类型推导程序。这种算法跟普通的算法不一样,因为这是图论的算法,而且还有很多递归,因此运行起来就像你的函数只有那么几行但是callstack却有几千个。于是中间一个出了问题,你怎么知道挂掉的那个地方,程序是运行到你输入的KernelFP代码的哪一部分的时候挂掉的?你怎么知道是哪里算错了,才导致挂在了这个地方的?这是不可能知道的。所以当初采取的一个办法就是打log。log怎么打呢,类型推导程序运行到哪里我就把log打到哪里。而且这个算法不是扫描一次程序就可以把结果做出来的,当你遇到互相递归的函数的时候,你得一直做到他们收敛为止,你才知道类型是什么,或者程序写错了。于是这个类型推导程序会做大量的计算,产生大量的log。一个几十行的程序就可以log出好几M的推导过程。这里是log的例子:因此调试的时候就是这样的,运行一下,看看结果,发现不对,我就打开这几M的文件一行一行的看,看看哪里出了问题,然后猜一下代码哪里写错了,然后继续干,一直干到我所有的test case都过了为止。【YongHe的回答(27票)】:高中的时候试图用OpenGL在ATI的傻逼GPU上搞HDR渲染,结果总是全屏幕NaN。调试了一个月到现在都不知道为什么,在nVidia上则没有问题。现在想来可能是driver有bug(可能没开centroid sampling导致光照中某个像素算出了nan,blur之后就污染了全部像素).做GPU还是要珍爱生命远离ATI。【李刀刀的回答(16票)】:修改本地文件却预览线上版本,调了一天。【萧文彬的回答(2票)】:我实现了A,要跟现成的B整合在一起,然后在Benchmark上跑。结果A自己没有任何问题,B也没问题,但放在一起就是invalid pointer error, 用Valgrind跑出现如下结果:invalid read of size 8, the address xxxxx is 8 bytes before the alloc'd block of 32...作为一个C/C++完全没入门的人,被这个bug吓得生活不能自理,把关于A的论文又读了一遍,把Benchmark的论文读了一遍,把B的论文也读了一遍,结果找了一个星期,最后发现问题是在B的[这个文件]()的第31行。【知乎用户的回答(9票)】:放眼望去怎么基本都是软件的bug。。。。。。。。广大的硬件工程师在哪里?来吧,我来分享一下硬件方面的bug吧。在以前的回答中,我曾经零零碎碎写过一些,这里先搬一点儿过来。如这个答案()里的我的回答。本答案会继续更新,有空就来写点儿:(搬过来的答案,懒得重新整理了) 不严谨的USB驱动撰写者:一个英国的驱动高手(56岁的老头),有一次客户报bug说在一家医院里他们的一个USB设备就是没法在新一代电脑上用,而且是时好时坏,没有规律可言。客户派了硬件软件BIOS几个工程师过去解都没解出来。我请到这位高手出马,高手拿到USB设备和电脑后,花了一天的时间做初步验证,然后花了一个晚上写了个小程序模拟那个USB设备的驱动的挂起/卸载,然后花了2小时运行那个程序,发现USB设备的驱动在挂起/卸载很多次以后Windows就会有一定的几率拒绝挂载这个设备,然后他在和微软以及那个设备的厂商联系,花了一天时间确定USB设备的驱动里的一个bug,第三天,USB设备的厂商出了一个测试驱动,问题完美解决。粗心的硬件工程师某台式机机型,出厂后大约一年后,开始出现大批量的返厂。返厂的现象惊人一致:主板挂了无法开机,挂掉的是主板上的芯片组。 由于该机型芯片组损坏率远高于其他机型,我们一开始怀疑是客户使用不当(因为最早返回的都是某一特定大客户的在某国工厂退回来的机器),但随着时间的推移,全世界各地都有返厂的现象。于是目标转向怀疑该主板设计有问题。但是,妖异的来了,从工厂抽调数百台该机型进行压力测试(没日没夜跑高压程序,进烤箱,各种设备插拔),就是没有一台机器挂掉。前前后后折腾了一个月,大家都丧气了。最后,好不容易,从客户手中拿到一些坏掉的机器,我们把芯片组拆下,重新植球,检测后发现是芯片里有一部分电路已经损坏,多块芯片组损坏的地方完全一致。最后,我们去检查该主板的设计,发现芯片组的某个输入电源,应该使用1.5V,却使用了3.3V电压。由于芯片组本身质量不错,尽管设计需要1.5V但是在3.3V下仍旧可以忍辱负重工作很久才烧掉,所以这也就解释了为什么我们无论怎么压力测试都测不出来,要等机器在客户手里使用一年左右才会烧掉。 最后,全球召回更换主板,问题解决。奇异的环境某台式机墨西哥工厂生产线,操作系统有时会无法download(这边普及一下知识,生产线上的操作系统不是安装的,都是通过网络直接把image下载到硬盘)。该问题在其他国家的产线上完全无法复制。经过多个工厂严格的对比检验(工程师飞来飞去好几个星期),发现唯一的区别是墨西哥工厂生产线上的网络环境使用的是hub(有点穷),而其他工厂使用的是switch(别的富裕一点)。进一步debug发现,台式机自带的网卡的驱动,在用hub的环境下会丢包导致image download失败,而在switch环境下就不会。通过网卡厂商驱动程序工程师debug之后,更新了驱动,问题解决。睡觉去了,待续。。。。。。。。。。。。【知乎用户的回答(7票)】:说个欢乐的吧,室友学C++,第一次作业是输出Hello world,要提交到清橙平台上。四行代码,这姑娘调试了一晚上都没通过...第二天起床我们问她de出来没,她几乎是哭着说:“我把Hello world第一个字母的大小写搞错了……”这是我印象最深的一个bug了。至于自己不惜熬夜也要de出来的那些,谁记得啊~【麦加C的回答(5票)】:表示当前排名第一的所说的bug对整天搞软硬结合的小众系统的人来说就是家常便饭。特定的硬件,特定的操作系统,特定的组件,特定的应用,出了问题没有厂商支持,没有社区讨论,只能苦逼的调试。曾经遇到的一个逆天的bug是应用程序的数据,应该写入到作为存储使用的块设备中,但是居然结果就是有极低的几率把随机数据写入存储系统固件的空间。由于问题复杂,难以调试,追溯(这时候啥都不可靠了,系统?驱动?硬件?应用?),最后只能把这个问题绕过去了事。还有一个是,生产出来的外设可以对整个系统从SLEEP模式转换到普通模式的过程造成不可预知的影响。有的外设就OK,有的就不行。滋滋的电流声简直炫酷。@赵佳栋 说上述都是没能解决的不算。那就随便写个解决了的。特定的嵌入式设备和特定的某个品牌的笔记本电脑进行数据传输时可能会出现莫名其妙的中断。反复尝试后更改了一个容错设置,这项设置可以让windows在出现某种硬件错时对传输进行容错。然后,这个问题解决了。这个问题仅发生在使用自行编写的对时序有一定要求的通信程序与特定品牌的电脑进行通信的情况下,而且这种容错设置自我感觉是属于比较玄妙的范畴的……调试这个问题简直是噩梦。反复的压力测试,排查代码,比对不同设备出现的不同现象,尝试更改各种不同的针对硬件的设定。我想表达的是在特定平台,常跟硬件打交道的程序员都会遇到很多奇怪的问题。很虐心。能否解决问题往往不在于你个人有多优秀或者多努力。【王洪波的回答(4票)】:别人代码产生的bug【TottiChen的回答(3票)】:因为不小心引起的bug永远是最难找的,因为你总以为那地方是ok的,直到那天扫地大妈的出现...【刘晓翔的回答(3票)】:客户说这是BUG。【知乎用户的回答(3票)】:UTF-8 with BOM 的 html【Sven的回答(2票)】:java程序员,很久以前,刚接触javascript的时候,写了一个for循环for(int i=0; i&xxx.length; i++){xxxx}但是死活不起作用,那时候还不会用FF和Chrome这类的可以F12的神器,我自己调了好久好久,把身边的同学喊来,他们也都表示吃惊,然后纷纷摇头,结果我把教我的老师喊来了,老师也是java出身,也对这我这段代码表示不理解,怎么他妈的就没有结果呢。也不知道过了多久,我发现了问题,我偷偷的把int 改成了var,然后为了在同学面前保全老师的颜面,我说:你看,可以了,突然可以了,是浏览器问题吗?这太奇怪了。老师仍然不解,让我把这断代码发给他,他自己回去研究了。【Jeffchen的回答(3票)】:正好整理了最近解决的bug,十几个,每一个都至少花一个人天,还是因为我们有经验. 如果没有经验,不可想象.....但是,那又有什么意义?“一个bug要这么久?一定是你们能力不行”【达达的回答(4票)】:下一个BUG【邰文渊的回答(1票)】:印象最深的bug:;====分割线=====最难的一个?像 所说的那样,真忘了。个人感觉性能bug以及不必现的bug这类bug整体调试难度较大。
馆藏&70241
TA的推荐TA的最新馆藏
喜欢该文的人也喜欢&&守望先锋有哪些令人抓狂的BUG 有的至今没有修复
守望先锋有哪些令人抓狂的BUG 有的至今没有修复
来源:特玩网
作者:wb_szm
有哪些令人抓狂的BUG?今天小编给大家带来的是守望先锋令人抓狂的BUG分享,有兴趣的一起来看看吧。任何游戏都有BUG,守望先锋也不例外,而且守望先锋随着版本更新也在不断的修正这些BUG,例如我们经常看到的黑爪成员来到地图上的奇怪地方之类。但截至目前的最新版本的守望中,依然存在一些令人抓狂的BUG并没有得到修复。本文列举的BUG对玩家的影响由轻到重。空中的护甲包谁都吃不到如果你使用了托比昂,然后你又把护甲包扔到了运载车辆上——这看起来是个很自然很平常的操作对吧。毕竟很多时候有很多队友都会在车辆上面或者附近的。但是护甲包并不会跟着车辆一起移动,当车辆离开原地后,这些护甲包就会变成“浮空状态”。仅仅如此倒也罢了,但一旦护甲包变成这种浮空状态,就算你跳起来碰到它们,也吃不到了。这个BUG十分费解无语,当你在战斗中急需护甲包续命的时候,出现这个BUG简直令人抓狂。炮台只顾射击空气而无视旁边的敌人另外,托比昂的炮台会自动攻击秩序之光的传送门或者护盾发生器。但是传送门和护盾发生器只有攻击底座才可以摧毁,但有时候炮台会朝着护盾发生器的上半部分的空气中射击,完全不能理解它是怎么想的。特别是当它自动锁定了这个无效目标后,还会无视离他很近的其他敌人的活动。这时候这个BUG就很令人抓狂了。炮台可以穿透柱子但麦克雷的大招不能穿透柱子托比昂的BUG还不限于此,炮台的子弹可以穿透一些细长的障碍物,例如柱子或者栏杆。有时候在一些地图的奇怪敌方甚至会莫名其妙的穿透墙角射击敌人。但是游戏中其他人并不能这样,例如麦克雷的大招就无法穿透栏杆。炮台可以锁定轮胎麦克雷的大招无法锁定轮胎说到麦克雷的大招,其实游戏中的炮台是可以锁定并攻击狂鼠的轮胎的。秩序之光的哨戒炮也可以。但麦克雷的大招就不行,这种机制上的不统一虽然并不是严格意义上的BUG,但也并不清楚原因何在。黑百合射中了源氏但后者毫发无伤游戏中角色的判定框是存在很多问题的,只是因为游戏中并不能通过选项或者控制台直接显示出来这个判定框,所以玩家们很多时候不能轻易发现。例如之前曾经出现过的一个BUG,当蹲下时,温斯顿自己的爆头判定区域错误的被放在了人物的手肘部位,非常可笑。虽然温斯顿的判定BUG被修复了,但谁知道游戏中是不是还存在其他类似错误呢?例如源氏经常遇到自己明明按出了格挡但还是被打死,又或者像上图中黑百合明明命中了二段跳中的源氏但是源氏却完全没有费血。当然可能会有人说这不是BUG而是网络延迟。但是这种和玩家主观体验相违背的判定发生的时候,玩家们并不能明确知道问题出在哪里,确实比较令人抓狂。莱因哈特的大招实际判定演示除了判定框,游戏中的视觉效果和实际判定区域也在很多时候是不统一的。最典型的例子是莱因哈特的裂地猛击。虽然看上去是一次性的对地面造成的攻击判定。但熟悉莱因哈特的玩家都会明白。其实游戏中的判定是离开地面一定距离,而且会持续存在一定时间的判定范围。也就是说,不但离开地面一定距离的敌人会被晕到,而且在莱因哈特已经砸出大招之后几秒钟内,再进入判定区域的人也同样会被晕到。
守望先锋热点资讯:近期热点()()()()()()游戏工具()()()-------------------------------------------------- ----------------------------------()突击英雄防御英雄重装英雄支援英雄扫描下方 二维码收藏,随时随地都能看到守望先锋精彩视频:想要了解更多攻 略,敬请关注搞趣网。
【责任编辑:】qq群皇冠不能点亮,这个不能点亮的BUG究竟什么时候能修复???_百度知道
qq群皇冠不能点亮,这个不能点亮的BUG究竟什么时候能修复???
从去年修复到今年了???每次问客服,虽然服务态度好,但是还是不能给予准确的答复!好不能就算了,为什么群界面还是提示点亮皇冠,让人误解能点亮,进去了,也一点提示都没有,都没有点亮皇冠的介绍或者说通告不行??还有在里面提问也没有用,还必须加急吗...
我有更好的答案
这是商业机密,别人是不可能告诉你准确答案的,而且腾讯早就出公告了,只是你当初没关注而已。
采纳率:23%
你是要点亮皇冠吗?皇冠5级6级的我这里都有,都可以转给你。
我也纠结这个问题,但是最近发现没什么必要,壮大自己的群有很多方法的
为您推荐:
其他类似问题
qq群的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。(ERROR:15) & 访客不能直接访问

我要回帖

更多关于 虚拟城市2 bug修复 的文章

 

随机推荐