有时候我需要把现在的 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 |