你们在编程时遇到过什么离谱的bug吗?

360影视 日韩动漫 2025-05-13 17:37 1

摘要:最近在某乎看到个问题,“你们在编程时遇到过什么离谱的bug吗?”,给大家分享。

最近在某乎看到个问题,“你们在编程时遇到过什么离谱的bug吗?”,给大家分享。

icon-meh

下班去接老公,在地库等了十多分钟不见他下来,上楼去找,看见他们好几个大老爷们正围在一个 PHPer 身后,帮他解决 bug......我说我在前台沙发那歪一会儿,等他,他说别介啊,你不是会点儿 PHP 嘛,你也过来跟我们一起找吧......项目是个不太复杂的、本地运行的、内部使用的,CLI 小工具......出 Bug 的地方已经被定位到了某个代码片段,为了更直观,我把代码抽象成这样:

if($var < 1 ) {exit("NO"); }
echo "YES";

在 VS Code 里看,是这样的:

直接运行,肯定是输出 YES 嘛,但凡懂点儿编程的都知道!然而,输出了 NO,而且不论怎么修改 var 的值,都是 NO ......

这没道理啊...... 后来,在他们技术老大的建议下,代码被改成了这样:

echo "YES";

在 VS Code 里看,是这样的:

这要再输出 NO,只能证明 PHP 不是...... 世界上最好的语言......

输出了:

然后大家一致决定 —— 回家!!!

......

......

......

第二天,老公跟我说,bug 解决了,你们看!

看啥?

看滚动条!

你把这个条往右边拉,拉到头......

更简单的方法是按 Alt + Z,开启自动换行:

我老公说,即便他们已经严刑拷打了该 PHPer,但他(天津人)仍坚持说——介不怪我啊,指定是有银儿给我下套儿啊!

gcd0318

不是我遇到的,但是上新闻的。

某两个大厂的 app 无法同时装在一个手机上,经过排查发现,两家的程序员抄了同一本教材里的例子代码,教材写的也是手潮点,竟然把appid直接写到了书上,这两家的程序员的手也都很潮,竟然直接抄了没改,三个潮人凑到一块,就出了这么个事,引起业界一阵小兴奋。

秋竹919

这就不得不提到我们大clang的经典空循环优化了。

2024.11.29补充:从评论区小伙伴的口中了解到,在P2809R3中,原本的平凡无限循环将不再是ub。

sfilata

当年我记得我发现 IDE某行报错了,知道有一个错误,但我一个字母一个字母看了十分钟死活看不出来。直到…………

我第一次知道了什么叫全角空格。

比如:" " 和 "",第一个正常,第二个会报错。


击破无尽虚空

说一个陈年旧事。

我是老码农了。

刚毕业时流行Desktop(胖客户端)。

公司研发部将近四十号人,总体分为两个小组,底层组件组和上层Desktop小组。

我是Desktop小组的负责人,我们小组的主要工作就是把底层组件封装成Desktop,底层组件还可以被别人拿去二次开发,这是当时比较流行的架构。

组件的设计基本照搬国外某著名软件,照虎画猫。

底层组件开发用的是C++,Desktop封装用Visual Basic。

有一天,测试部(独立部门,人还不少)提交了一个BUG,说About对话框一弹出就报内存错误,然后系统就挂了,这BUG并不是每次都出现,但出现几率很高。

我当时就纳闷了,About对话框的代码超级简单啊,弹出个框,把软件版本、公司名称logo展示出来就ok啦。

同事们调侃说,你们真行,写个About对话框都能出bug。

怎么查都查不出来,没办法,让组件组参与联调。

追了大半天,发现出现这个bug的原因是有一个哥们指针使用不规范导致了读地址错误,这个组件是算法组件,基本属于最低层,渲染组件也会调它,About对话框弹出的时候,有时会触发渲染,于是这bug就出来了。

问题解决。Desktop小组反过来嘲笑组件组。

直到现在,国内软件研发的水平都没有太大进步,技术上,一直追着别人跑,管理上,基本上没几家像样的。

bionukg

当我新声明了一个局部变量之后,某个性能测试函数所消耗的时间突然从100ms上涨到500ms。

原因是:

当且仅当使用MSVC++/x64/release编译时

如果在main函数中被声明了一个std::thread局部变量,一个32字节大小的8字节对齐的局部变量,以及一个volatile size_t局部变量,(以及若干time_point变量)

那么rbp(栈底寄存器)不是8字节对齐的

这导致,使用rbp+offset读写局部变量时,offset不是8的倍数——而CPU对8的倍数的offset访问是非常高效的。

因此非对齐的rbp会导致CPU读写局部变量的时间翻几倍

又由于MSVC优化自动内联了比较短的函数,所以这个名义上的函数并没有开辟新的函数栈,而是沿用了main函数的未对齐rbp

总而言之:

1.我声明了一个32字节的局部变量

2.这导致rbp的值在16进制下变成以9结尾

3.这导致某个局部变量的地址是rbp-9

4.由于-9不能被8整除,读写rbp-9地址变量的用时大幅增加

5.由于性能测试函数测试的是读写此变量的性能,所以性能测试函数的用时大幅提升

注:强制no_inline之后,调用函数新开辟了函数栈,此时rbp正常,用时也正常

原文:

来源:IT168企业级

相关推荐