有人需要快速把 log 定位到代码上的工具吗?

83 天前
 liuchao719
目前准备做一个把 log 匹配到代码上的工具,大概是这个样子:



目的是帮忙定位 log ,理解系统运行时发生了什么。

当然我知道大家手动也能搜索到,或者有些大牛扫一眼 log 就知道怎么回事。

但有时候问题牵涉到的模块很多,或者没研究过具体代码。

或者突然丢来一个问题和 log ,借助工具能很快理解代码流转,比一点一点抠架构要快一些。

有人感兴趣吗?
2674 次点击
所在节点    奇思妙想
11 条回复
julyclyde
83 天前
sourcemap 是不是就是做这个的?
davin
83 天前
类似于 Sentry Java SDK 的东西么?
liuchao719
83 天前
@julyclyde 不太一样,sourcemap 是让人看到代码真正的出错行数,这个工具是想把一很多行 log 对应的代码同时展示出来,方便跟着 log 理解代码是怎么走的。
liuchao719
83 天前
@davin Sentry 应该是侧重解决错误,定位错误。 我的想法其实是更偏向于“理解系统运行时发生了什么”,就不管有没有错误,也可以通过 log 快速串联起代码执行路径,感觉更像是一个运行时代码路径追踪工具。
liuchao719
83 天前
可能我和大家做的方向不太一样,我现在在搞鸿蒙系统开发,从 bsp 到 hal 再到 framework ,只要某个功能出了问题,就得跟全链路。

比如显示不正常,可能得从框架的图层状态,跟到渲染,合成,再到驱动,dts 。
再比如上层 app ANR 了,得从 app 跟到 framework service ,看看究竟系统出了什么问题。

做这个工具的初衷,是快速在眼花缭乱的 log 中,梳理出真正的代码执行流……而不是从每个模块的 readme 开始看起,这样太慢了……
startisan
83 天前
这个东西做出来是很有用的,以前我也有过类似的想法,在 IDEA 导入 log 文件或者直连服务器定位到日志文件,然后可以根据线程号或者请求唯一 ID ,筛选日志来匹配代码,进一步的话可以根据 log 文件来模拟 IDEA 的 debug 。

不过我也只是想过,没啥实现思路。😂
liuchao719
82 天前
@startisan 不谋而合!其实 log 本身就是精准的运行时,难点还是怎么根据用户意图筛选 log ,以及从 log 和代码中确定真正的执行流。实现基本就是人怎么根据 log 搜代码,程序就怎么搜。
fulln
82 天前
单纯根据日志里面的堆栈信息定位,可以解决 99 的问题。 至于剩下的 1 ,要解决的话缺少的是需要一个带参数的日志回放系统,因为大部分难定位的问题都是循环套循环,同步转异步。这种情况下很难排查到底是什么情况下中断的异常。
liuchao719
81 天前
@fulln 赞同,要排查这种问题确实很难,log 一般都不会为了调试打印全部参数,而且也不会随处打印,不像断点一样,能精确知道栈和内存。但是从最近用 AI Coding 的经验看,AI 貌似很会加 log ,数量多,而且关键参数信息也比较全。所以感觉日志回放可能是未来调试的大趋势。
coder001
77 天前
C♯ 基础库 CompilerServices 里面的 CallerFilePath CallerLineNumber CallerMemberName 参数特性
简直是 C 的 __FILE__ 和 __LINE__ 宏,把这些 log 起来就可以准确记录源代码位置
(这里不是 java 板块,我说 C♯ 应该不算离题吧?
liuchao719
77 天前
@coder001 哈哈哈当然不算,开头的图只是 gpt 生成的,其实我是搞 C 的。

C 能打出 file ,line 和 func name 我是知道的,不过你这个真神,居然能打印 caller 。属实涨见识了

其实我还想过编译器插桩,或者搞个 hook 统一打印所有函数的调用记录和参数。不过现阶段看起来没有必要,开销太大,而且有点麻烦,还得搞各种特殊版本。所以现阶段思路还是清洗 log ,RAG 代码然后分析出执行流。

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

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

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

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

© 2021 V2EX