工欲善其事必先利其器

作为一名开发经常会接到一些交接的项目,时间紧、任务重、没有文档,导致大家对代码很难有深入的理解,稍微进行点修改都会担心影响到其他业务。

并且平时开发过程中经常会遇到一些bug很难定位的情况,特别是那种基于复杂计算、流程复杂、不能调试的情况,要想定位到具体是哪行代码出了问题,绝对是一个耗时耗力的工作。

这些时候,大家是不是就会想“要是能够看到任意一处代码的执行情况(堆栈、变量值等)就好了”,测试人员或用户直接跑一下相关流程,开发人员就可以直观地看到任意代码的执行情况(每个变量的取值等)。不用一边查数据库和配置,一边阅读源代码,心中还要默默计算一下程序走到每一步的值,走的哪个分支....。这样既可以大大地提高分析问题的效率,也能让团队成员更好的了解到每种业务场景程序是如何执行的。

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

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

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

集成简单,只需要4步即可完成。 1、注册账号 -> 2、下载库文件和配置 -> 3、填写配置 -> 4、在Web应用的启动命令中加上-javaagent等参数。想了解详细的集成步骤请点击"使用说明"。

集成完成后正常访问Web应用就会在本地生成调用日志,然后在“请求列表” 中可以看到请求日志的列表,点击详情进入代码分析页面。如下图所示:

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