大家平时都是怎么找一些很抽象的 bug 的

6 天前
 billbur

我一般靠日志和 debug 都能解决大部分 bug ,这些都没什么好说的,但是遇到一些非常规手段就能找到问题原因的 bug 就纯靠经验然后做假设再验证了。比方说之前遇到过一次数据库表的统计信息不准确导致 sql 不去走索引,后面又走索引了搞的我们查问题查的要死。 想听听大家的经验之谈,在可以分享的范围内细说,学习学习

4309 次点击
所在节点    程序员
44 条回复
whp1473
6 天前
复现问题、抓异常日志、debug 日志看详细调用链、代码分析、Arthas 反编译比对代码、Arthas 拦截、调用链查看,一般这样只要能复现的问题都能排查出来,比较难的是偶现甚至不可复现,理论上不可复现你也没法验证修复,所以可复现是必须的。还有一种是开源框架内异常,这种一般是少了什么配置或依赖导致的,报错与实际差异可能完全不一样,需要熟悉开源框架的运行原理,然后分析源码和看文档排查。
heronlyj
6 天前
iosyyy
6 天前
@guguji5 你这感觉是经验不足一般我写放在 usereffect 依赖里面的应该保证都是状态不要直接用变量 eslint 有个选项也可以帮你完成这个
pkoukk
6 天前
可复现的就在上下加一整套观测方法, 就像 21 楼说的那样
不可复现的,那能叫 BUG 么?不理,找到稳定复现方式了再处理
WingYo
6 天前
大部分是在梦里解决的,我说的解决是真的有解决办法的那种解决。
sayitagain
6 天前
直觉。。。
xueling
6 天前
经验+猜测+验证+猜测+验证...,循环往复,有些 bug 的发现真是纯靠执着。 数据异常、数据波动类的问题,可以用我的开源项目解决: https://github.com/xl-xueling/xl-lighthouse
KIDJourney
6 天前
世界上没有抽象的 bug

只有 print 不够多的代码(
dddd1919
6 天前
白眼看空格,之前遇到若干奇葩问题是因为多了个空格,比如密码粘错,ng 配置失效,然后让对方用鼠标框选一下,果然......
Kumo31
6 天前
share 一个概念:确定性模拟。很多 bug 难以复现主要是由于系统中不确定性的因素太多了,例如网络延迟,进程调度等等都会导致不同的执行历史,而某些 bug 只有在特定的执行历史下才会复现。

特别对于我们做分布式系统的人来说,平均半年才复现一次的 bug 也不少见,写过共识算法的人应该都能理解。而如果故障现场的日志和信息不足,基本没有排查的可能。

确定性模拟的方案就是通过模拟器,将一切不确定的事物转变为确定性的,整个系统在模拟器上运行 结合故障注入,当 bug 出现时,只要记录模拟器最初的 seed ,使用同样的 seed 再次运行 就能复现当时的执行历史。同时,时间也是输入的一部分,系统相当于一个随着时间不断变化状态的状态机,因此在模拟器上并不需要真正等待时间流逝,模拟器可以直接跳转到系统这个状态机的下一个状态,实现时间加速的效果。

具体实践可以看看这个项目: https://github.com/madsim-rs/madsim?tab=readme-ov-file
及其在 RisingWave 的落地: https://risingwave.com/blog/deterministic-simulation-a-new-era-of-distributed-system-testing/,https://risingwave.com/blog/applying-deterministic-simulation-the-risingwave-story-part-2-of-2/
Belmode
6 天前
按图索骥呗
Planarians
6 天前
没办法只能靠经验猜 有些 bug 解决了也不知道 bug 产生的原理是什么 有些 bug 真的是不讲逻辑的
giiiiiithub
5 天前
一定数量的经验 + 直觉
crazyu
5 天前
@iosyyy 那个 eslint 具体怎么设置,可以说一下嘛?
guguji5
5 天前
@iosyyy 你说的对。虽然已经写了 3 年 react 了,但是依然是这吊水平。
iosyyy
5 天前
@crazyu exhaustive-deps 我们现在用的是这个不过我试了下好像不支持这个 感觉我有点印象流了..
iosyyy
5 天前
@crazyu 大概率是记错了
snipking
5 天前
@billbur apm+日志的信息,绝大多数情况下你都能复现出来,你觉得复现不了那说明监控还没做到位
as5739
5 天前
我现在就有一个离谱的问题,支付宝小程序请求偶尔会提示超时,但是无法复现,官方的质量检测有记录到,千分之几的概率。为此查了 nginx 日志,程序日志都没看到问题。

偶尔真机调试的时候会看到请求接口缓慢,耗时都在 Dns lookup 上,大概 5~10s ,猜测是 dns 问题,换了 dns 服务商,没用。后面看到证书认证失败也会报这个错,换了新 ssl 证书,还是没用,到现在也没解决呢。。
StudyProject
5 天前
添加多个日志输出点,逐步缩小 BUG 的代码范围。多线程的情况下就减少线程数

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1052665

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX