有时候我需要把现在的 bug 复现出来,但是鉴于要通过第三方 api 联动才跑完整个流程,单纯通过日志与 sql 日志进行推断问题所有,会占用很多时间。能否有一个工具,可以把当时的程序流程可以通过像电影这样回放,那么能定位到问题就会非常的快了
1
lizheming 2021-09-20 19:14:48 +08:00
|
2
Suinn 2021-09-20 19:30:57 +08:00
还有这种好东西吗,插个眼
|
3
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 |
4
learningman 2021-09-20 20:34:32 +08:00 via Android
要用第三方的话,mock?
|
6
shyrock 2021-09-20 21:23:21 +08:00
感觉能大幅提升 debug 效率,然而看了一下 py 的几个实现,都是 15 、16 年就停止了。。。
另外,看了一下这几个实现的能力,还是在于比较容易复现的 bug,通过更少的调试迭代定位到问题。 但是,lz 的问题,或者说我们更痛苦的问题,是不易复现的 bug,比如在业务环境出现了偶发问题,在调试环境很难复现,这个似乎还是无解。 |
7
akira 2021-09-20 21:25:29 +08:00
即使不涉及到 3 方, 要复现 “当时的程序流程” 也是个很困难的事情
|
8
ClericPy 2021-09-20 21:29:20 +08:00
不限语言??? 那只好招个 QA 了...
|
9
LifStge 2021-09-20 21:42:08 +08:00
这种东西吧 我感觉最终还是 log 不过是把 log 更细化 比如自动化的 hook 打点记录 然后就是对记录的结构化 流程化 分组啥的 最终缺少的还是针对性的自动化工具..
|
10
fuse 2021-09-20 22:01:50 +08:00
问这个问题, 计算机还没学好
这个其实就是个信息论问题, 程序执行所有信息, 难道所有信息都能记下来? 每 s 100w 次系统调用, 每次参数, 返回值都能记下来? 每次调用, 每个分支都记? 那存储比 cpu 还快 其实嘛? 只能记重要的部分, 比如 log 所以只能是 log, 或者加一些函数的 trace |
11
Feiex 2021-09-20 22:11:55 +08:00
@fuse 他这个是关联数据比较多,制造复现 bug 的场景比较麻烦。有些企业有流量录制和回放工具,支持线上采样线下回放,可以解决他这种问题
|
12
xzysaber 2021-09-21 07:16:48 +08:00
|
13
YsHaNg 2021-09-22 06:52:26 +08:00
windbg 可以 time travel debug
|
14
fengjianxinghun 2021-09-22 10:31:24 +08:00
@fuse 能,qemu tcg replay 整个虚拟机指令执行。
|
15
RexG 2021-09-22 16:25:37 +08:00
也不说啥语言,前端可以用这个 https://github.com/rrweb-io/rrweb
|
16
sbilly 2021-09-23 12:59:47 +08:00
|