找回密码
 立即注册
搜索
查看: 14197|回复: 89

[欢乐] 改屎山代码修bug,简直约等于现代侦探

[复制链接]
     
发表于 2024-6-15 03:13 | 显示全部楼层 |阅读模式
本帖最后由 BigDaddyN0tail 于 2024-6-15 09:28 编辑

最近一直在改屎山代码修bug,愈发觉得这简直就是现代版的侦探工作

收集线索,顺着报错信息一点点往上查,不能放过任何蛛丝马迹
而就像凶手是红毛大猩猩一样,不管最后查出来的原因多么不可思议,它就是真相
最近有个任务无法复现,然后查明是以下两个离谱bug造成的:
1. 同一个任务,在不同的cpu上跑会有不同的结果
2. 数据库存储造成的1e-14级别浮点数误差,导致最后结果差了几千万
这原因离谱到,每次我无法复现,老板都觉得是我跑任务的命令有问题

再考虑到编程有自己一套逻辑和规则,这可以算是设定系侦探小说了

评分

参与人数 4战斗力 +5 收起 理由
Linjiangzhu + 2 下周一我将化身屎山侦探查案
丁兔 + 1 精确计算要用高精度类型啦
条码人 + 1 工作就是使劲拉屎,真是抱歉
谢同学 + 1

查看全部评分

回复

使用道具 举报

     
发表于 2024-6-15 03:28 | 显示全部楼层
本来排查bug就需要相当的分析推理能力,每次修bug就和破案一样,修好了也特别有成就感(大概)
回复

使用道具 举报

     
发表于 2024-6-15 04:29 | 显示全部楼层
修bug还好,没有bug的屎山其实更可怕
回复

使用道具 举报

     
发表于 2024-6-15 05:20 | 显示全部楼层
本帖最后由 董卓 于 2024-6-15 05:23 编辑

你有没有修过,只有压缩混淆后代码、没有源码的情况下的bug?
这时感觉已经不是屎山的问题了
而是直接让你闭着眼、在屎山里一手一手地滤屎摸bug,修问题完全靠调试和猜
回复

使用道具 举报

     
发表于 2024-6-15 05:24 | 显示全部楼层
是这样,有时候玩点推理游戏感觉还不如在屎山里debug有意思,从各个角度旁敲侧击抽丝剥茧,比什么奥波拉丁好玩多了

—— 来自 S1Fun
回复

使用道具 举报

     
发表于 2024-6-15 05:33 来自手机 | 显示全部楼层
我司产品一直从一套祖传代码上面缝缝补补,有新需求就加一点。先前是一位外包开发一直维护,去年开始老板不准备再用外包,自己招人接着搞,感觉不是屎山要崩溃了就是自己要崩溃了

—— 来自 realme RMX3820, Android 14上的 S1Next-鹅版 v3.0.0.81-alpha
回复

使用道具 举报

     
发表于 2024-6-15 05:39 | 显示全部楼层
在一个庞大的代码库里面抽丝剥茧改动一个模块然后还得保证系统不崩,这一点我觉得有点赛博纺织的味道了
回复

使用道具 举报

     
发表于 2024-6-15 05:55 来自手机 | 显示全部楼层
debug就是搞侦探破案的。特别是别人的代码。
特别特别是跟内存cpu编译相关的玄学bug。
回复

使用道具 举报

     
发表于 2024-6-15 06:05 | 显示全部楼层
本帖最后由 巨魔已被忠诚 于 2024-6-15 06:10 编辑

你说的1其实不算太离谱。
现代CPU架构为了追求运算速度,主线程不再等着其他线程运算出结果,直接留个寄存坑位跑去算其他东西去了,等到有结果再塞进去得到返回值。
就像送快递,货直接从工厂送到目标城市了,订单信息才通过邮政系统到,最后贴上送到你家。
你不锁线程,就像货物到了物流中心随便找个订单贴上就送走。
回复

使用道具 举报

     
发表于 2024-6-15 06:13 | 显示全部楼层
浮点数的设计机制导致的根本性误差的确蛋疼,而且最麻烦的是精度会随着数字变大而失真越来越大。还有其他很多蛋疼的因素,这个文章阐述得很详细:

  1. https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
复制代码


改屎山代码就像是你拿个汤勺从屎山里掘地求生,得时刻当心被屎崩掩埋了。
回复

使用道具 举报

     
发表于 2024-6-15 06:57 来自手机 | 显示全部楼层
所以工作以前我是myst神秘岛系列的忠实粉丝,工作以后改玩rpg了
回复

使用道具 举报

     
发表于 2024-6-15 07:03 来自手机 | 显示全部楼层
第2点其实也不是很离谱,遇到过一次就知道了
回复

使用道具 举报

头像被屏蔽
     
发表于 2024-6-15 07:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2024-6-15 07:13 来自手机 | 显示全部楼层
第二条就是蝴蝶效应的本意吧
回复

使用道具 举报

     
发表于 2024-6-15 07:21 | 显示全部楼层
我感觉像考古,有断代分层,这个项目几年前转变过类型,有个人引入了个库跟原来的库重复了,有个人没理解整个系统就做模块了,各种原因交汇留下的残骸等等
回复

使用道具 举报

     
发表于 2024-6-15 07:27 来自手机 | 显示全部楼层
2的不轻 发表于 2024-6-15 03:28
本来排查bug就需要相当的分析推理能力,每次修bug就和破案一样,修好了也特别有成就感(大概) ...

前提是你修的东西不能有deadline
我修我的mod的bug或者给别人的mod找bug就很有意思
但到了工作上的东西有bug压力就起来了

—— 来自 Xiaomi 22122RK93C, Android 12上的 S1Next-鹅版 v3.0.0.81-alpha
回复

使用道具 举报

     
发表于 2024-6-15 09:01 来自手机 | 显示全部楼层
但是抽丝剥茧找到出问题的代码之后打开git blame看到写出那一行代码的真凶确实能给人一种破案的快感(前提是bug不是自己写出来的)
回复

使用道具 举报

     
发表于 2024-6-15 09:05 来自手机 | 显示全部楼层
真凶已死了(离职)
真凶是大人物(老板)
真凶竟是我自己

评分

参与人数 1战斗力 +1 收起 理由
evooil + 1 欢乐多

查看全部评分

回复

使用道具 举报

     
发表于 2024-6-15 09:25 | 显示全部楼层
第二点就是为什么见过很多关乎钱的地方的设计要么用string要么用bigint而抛弃了浮点

论坛助手,iPhone
回复

使用道具 举报

     
发表于 2024-6-15 10:02 | 显示全部楼层
思考可能场景再逐一排除,这个过程确实有一点点像。但是大部分情况果然还是只有
回复

使用道具 举报

     
发表于 2024-6-15 10:05 来自手机 | 显示全部楼层
昨天下班扫到隔壁组同事代码用double做map索引,说了句不能这样弄…

—— 来自 Xiaomi M2012K11AC, Android 13上的 S1Next-鹅版 v2.5.2-play
回复

使用道具 举报

     
发表于 2024-6-15 10:08 | 显示全部楼层
第二个问题真的不是洛伦茨吸引子吗?
回复

使用道具 举报

     
发表于 2024-6-15 10:22 | 显示全部楼层
Debug:在一部犯罪电影里扮演侦探寻找线索,而凶手就是失忆的你自己
回复

使用道具 举报

     
发表于 2024-6-15 10:36 来自手机 | 显示全部楼层
类似这种?



—— 来自 Xiaomi 23013RK75C, Android 14上的 S1Next-鹅版 v3.0.0.81-alpha
回复

使用道具 举报

     
发表于 2024-6-15 10:45 | 显示全部楼层
同一个任务,在不同的cpu上跑会有不同的结果


所以这到底是什么原因造成的?
回复

使用道具 举报

     
 楼主| 发表于 2024-6-15 10:59 | 显示全部楼层
pure_liquid 发表于 2024-6-15 10:45
所以这到底是什么原因造成的?

我们不同Cpu的一个叫Mkl的参数设定不同
问了一圈,没人说得明白这东西该怎么改
回复

使用道具 举报

     
发表于 2024-6-15 11:06 来自手机 | 显示全部楼层
我之前用Java验个科学计数法的问题,发现要声明strictfp才能返回预期效果,就知道这坑千万不能碰

— from Xiaomi 23049RAD8C, Android 14 of S1 Next Goose v3.0.0.81-alpha
回复

使用道具 举报

     
发表于 2024-6-15 11:41 | 显示全部楼层
非程序员,但是日常给年龄大的一线同事做自动计算的表格和找这堆表格里的岔子。目前遇到过筛选汇总不一致出现的毛病大概有:
1-顺手把公式给你抹了填四舍五入后的数字然后怎么看怎么不对。
2-地名打了错别字(看上去还是五笔打的)类似于“洲”变“州”
3-筛选名称习惯性打了简称或者是十年前的名儿
4-地点不按照标准桩号填写,会自创人类听得懂但是计算机筛不出来,甚至人类也搞不清的位置。比如在xx后方30km(这都跨区县了大哥),或者更离谱的“x县到x县之间”。
5-不知道什么原因出现的奇怪的自动计算以及指针,或者拉了奇怪的项目(包括但不限于他们自己动手另存选了奇怪的选项等等)
6-吊诡的花式合并单元格来修改大小,理由是觉得这样比较好看

论坛助手,iPhone
回复

使用道具 举报

发表于 2024-6-15 12:26 | 显示全部楼层
那搞disassembly算盗墓吗
回复

使用道具 举报

     
发表于 2024-6-15 12:34 | 显示全部楼层
pure_liquid 发表于 2024-6-15 10:45
所以这到底是什么原因造成的?

如果想要细致入微的解释,您手上有没有 AI,麻烦看一下这篇文章 https://nju-projectn.github.io/ics-pa-gitbook/ics2020/why.html 如果有地方不能理解,整个代码贴过去问 AI,问它能不能用最浅显易懂的方式来解释原因,就能知道问题所在了。我没有能力去完整总结这些,只能说计算机大有不同

评分

参与人数 1战斗力 +1 收起 理由
桐江 + 1 可惜找了一圈,打不开南大SICP编程课的链接.

查看全部评分

回复

使用道具 举报

     
发表于 2024-6-15 12:36 | 显示全部楼层
Evilgurren 发表于 2024-6-15 12:26
那搞disassembly算盗墓吗

这应该是拉出来的屎深加工后用做化肥,然后根据地里庄稼的长势分析当初拉屎的人吃了哪种印度美食
回复

使用道具 举报

     
发表于 2024-6-15 12:37 | 显示全部楼层
遇到太多次了,所以公司要求对于金额,非整形的计算一律不允许使用浮点,要不decimal,要不转换整形去除
回复

使用道具 举报

     
发表于 2024-6-15 12:45 来自手机 | 显示全部楼层
还要从代码和注释中摸索当时人的动机和精神状态
回复

使用道具 举报

     
发表于 2024-6-15 12:57 | 显示全部楼层
所以很多人喜欢推倒重写。一来有成就感,二来容易跟领导吹。实际上是再造一座屎山
回复

使用道具 举报

     
发表于 2024-6-15 13:04 | 显示全部楼层
本帖最后由 要啥摩托车 于 2024-6-15 13:09 编辑

新接手一个屎山,看完觉得BUG多的不行,然后开始雄心勃勃地计划重构,这个约等于什么?
回复

使用道具 举报

     
发表于 2024-6-15 13:07 | 显示全部楼层
有一说一,debug确实比解谜游戏好玩
回复

使用道具 举报

     
发表于 2024-6-15 13:21 | 显示全部楼层
サワタリ 发表于 2024-6-15 10:05
昨天下班扫到隔壁组同事代码用double做map索引,说了句不能这样弄…

—— 来自 Xiaomi M2012K11AC, Androi ...

血压开始升高了
回复

使用道具 举报

     
发表于 2024-6-15 13:25 | 显示全部楼层
要啥摩托车 发表于 2024-6-15 13:04
新接手一个屎山,看完觉得BUG多的不行,然后开始雄心勃勃地计划重构,这个约等于什么? ...

冲旱厕,然后自己再拉一坨
回复

使用道具 举报

     
发表于 2024-6-15 13:26 | 显示全部楼层
子虚乌有 发表于 2024-6-15 12:57
所以很多人喜欢推倒重写。一来有成就感,二来容易跟领导吹。实际上是再造一座屎山 ...

有一说一,这也是自己构建的屎山,有啥追加需求修改比较方便
当然如果时一座屎山中做局部重构并且原来的屎山不倒,这个非常困难
回复

使用道具 举报

     
发表于 2024-6-15 13:27 | 显示全部楼层
最难查的还是海森堡BUG查到最后只能慢慢看代码推理可能的竞争条件。

以前有个同事,他在前一家公司,设备之间传输数据的时候会出现不一致,他一直不知道为啥,来到我们公司之后才知道是字节序不同导致
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-1-31 07:28 , Processed in 0.144277 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表