求一个可以把程序流程复现的工具

2021-09-20 18:42:56 +08:00
 cs5117155

有时候我需要把现在的 bug 复现出来,但是鉴于要通过第三方 api 联动才跑完整个流程,单纯通过日志与 sql 日志进行推断问题所有,会占用很多时间。能否有一个工具,可以把当时的程序流程可以通过像电影这样回放,那么能定位到问题就会非常的快了

3127 次点击
所在节点    程序员
16 条回复
lizheming
2021-09-20 19:14:48 +08:00
Suinn
2021-09-20 19:30:57 +08:00
还有这种好东西吗,插个眼
1vonzhang
2021-09-20 20:27:42 +08:00
概念:Reverse debugging, 参考 https://undo.io/resources/reverse-debugging-whitepaper/

工具:
C/C++: rr https://rr-project.org/
Python: RevPDB, timetravelpdb
learningman
2021-09-20 20:34:32 +08:00
要用第三方的话,mock?
abc11
2021-09-20 20:56:14 +08:00
Rx.NET in Action 》讲过一个鼠标画线的案例,可以参考一下
shyrock
2021-09-20 21:23:21 +08:00
感觉能大幅提升 debug 效率,然而看了一下 py 的几个实现,都是 15 、16 年就停止了。。。

另外,看了一下这几个实现的能力,还是在于比较容易复现的 bug,通过更少的调试迭代定位到问题。
但是,lz 的问题,或者说我们更痛苦的问题,是不易复现的 bug,比如在业务环境出现了偶发问题,在调试环境很难复现,这个似乎还是无解。
akira
2021-09-20 21:25:29 +08:00
即使不涉及到 3 方, 要复现 “当时的程序流程” 也是个很困难的事情
ClericPy
2021-09-20 21:29:20 +08:00
不限语言??? 那只好招个 QA 了...
LifStge
2021-09-20 21:42:08 +08:00
这种东西吧 我感觉最终还是 log 不过是把 log 更细化 比如自动化的 hook 打点记录 然后就是对记录的结构化 流程化 分组啥的 最终缺少的还是针对性的自动化工具..
fuse
2021-09-20 22:01:50 +08:00
问这个问题, 计算机还没学好
这个其实就是个信息论问题, 程序执行所有信息, 难道所有信息都能记下来?
每 s 100w 次系统调用, 每次参数, 返回值都能记下来?
每次调用, 每个分支都记? 那存储比 cpu 还快

其实嘛? 只能记重要的部分, 比如 log

所以只能是 log, 或者加一些函数的 trace
Feiex
2021-09-20 22:11:55 +08:00
@fuse 他这个是关联数据比较多,制造复现 bug 的场景比较麻烦。有些企业有流量录制和回放工具,支持线上采样线下回放,可以解决他这种问题
xzysaber
2021-09-21 07:16:48 +08:00
是指流量复制吗?
https://github.com/buger/goreplay
YsHaNg
2021-09-22 06:52:26 +08:00
windbg 可以 time travel debug
fengjianxinghun
2021-09-22 10:31:24 +08:00
@fuse 能,qemu tcg replay 整个虚拟机指令执行。
RexG
2021-09-22 16:25:37 +08:00
也不说啥语言,前端可以用这个 https://github.com/rrweb-io/rrweb
sbilly
2021-09-23 12:59:47 +08:00
😂

“人不能两次踏进同一条河流”
思科:宇宙射线触发了路由器 BUG
https://news.mydrivers.com/1/501/501000.htm

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

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

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

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

© 2021 V2EX