工欲善其事必先利其器

作为一名开发经常会接到一些交接的项目,时间紧、任务重、没有文档、代码风格迥异,阅读和分析代码特别费劲。

怎么办呢?针对这种难以维护的系统,很多人都会想到埋点的办法,通过埋点来理清楚各个业务线的数据流和控制流。这样后续调整功能、添加新功能什么的才不会出现大的问题。当然通过手动埋点的方式太花时间了,有没有办法可以自动化一点?

另外,平时开发过程中经常会遇到一些bug很难定位的情况,特别是那种基于复杂计算、流程复杂或者数据跨越多条业务线的情况,当发现结果不正确的时候,要想定位到具体是哪个环节出了问题,绝对是一个耗时耗力的工作。测试人员想要重现这种bug,也得花很多时间重新构建数据,遇到业务复杂的情况还可能要跨越多个团队合作才能构建测试数据。

即便是有了测试数据,调试的过程也得要步步小心,一不小心步子迈的太大跳过了产生问题的点,相关数据可能就废掉了,一切又得推翻重来。有没有什么办法可以间化一下这种繁琐的工作?

针对以上痛点,笔者想到写一套程序来解决这些问题。程序员嘛,能够让机器去做的事情,为什么要自己做呢?

于是就有了 jsnapshot,它基于javaagent实现,跟踪Java Web服务中每一行代码的执行,并生成快照(记录堆栈、变量、对象的值)。快照使用重做日志实现,以便后续任意时间恢复到之前任意代码处的状态,查看、分析程序和数据(显示堆栈、变量、对象的值,分析值的来源等)。

实现对变量、对象进行取值溯源,可准确回滚至变量赋值时刻,高亮展示对应代码行,重现当时的上下文(可查看当时的堆栈、对象等)。可便捷地找出程序中各个对象间的数据依赖关系。比如A->B, B->C,C->D只需要对D进行取值溯源可以找到数据来源C,再对C进行溯源....。

参考调试工具引入了"运行到此"、"单步执行"、"运行到Frame结束"等功能,可便捷地查看后续代码执行后的数据状态。并且开创性地提供了向前回退功能,比如"单步回退"、"回退到Frame开始"、"回退到此"的功能,可以回滚到之前的任意状态。

集成简单,只需要4步即可完成。 1、注册账号获取Token -> 2、在“使用说明”页下载agent库和配置 -> 3、填写agent等配置 -> 4、在Web应用的启动命令中加上-javaagent参数指定agent库。此后正常访问Web应用就可以在“请求列表”中查看和分析。 详细的集成步骤请参考"使用说明"。

数据和代码安全,快照数据在用户本地,本网站只保存请求id、类名、服务入口方法名等少量信息用于页面上检索,无需担心代码和数据泄露的问题。

使用说明

操作步骤说明


建议反馈

反馈意见和建议


常用工具

代码生成、代码格式化、重构、代码示例搜索、单元测试生成、请求录制回放、请求监控等