本文以流水线的方式记录了一次难以忘怀的调试经历。模块化
2019-10-29 13:02 分加密
接到紧急报告,某商业软件在解析特定数据格式时候出现故障,须要当即解决。而没法联系到供应商。debug
2019-10-29 13:20 分调试
开始进行问题复现。日志
2019-10-29 14:26 分源码
问题复现成功,打开debug级别日志,但愿从日志中找出线索。编译
2019-10-29 14:40 分软件
日志没有记录到更有效的信息,开始对程序安装目录进行结构分析。日志分析
2019-10-29 15:30 分bug
基本完成对程序的分析,主要使用Java和so进行连接,因为程序是很是模块化的,基本能够定位到某几个Jar包有Bug.
2019-10-29 15:50 分
从Jar包的名称中发如今一个关键位置多是引入了一个开源库,经过Google 找到该项目源码,但愿经过修改这个库以免这个Bug。
2019-10-29 17:10 分
第一个版本的修改版完成,尝试替换,解决了必定的问题,缩小了问题发生概率,但仍旧没有实际的进展。
2019-10-29 19:00 分
吃了个晚餐。
2019-10-29 19:20 分
通过两个小时的奋战,基本宣告这个方案失败,开始预备尝试对某个私有内部JAR包进行修改的方案。
2019-10-29 21:30 分
经过JBE将JAR包进行反编译,开始尝试直接修改Class文件。
2019-10-29 22:30 分
完成了Class文件修改版,进行替换后没法正常工做,形成了运行时的直接崩溃。
2019-10-29 22:50 分
喝了一杯焦糖加浓美式。
2019-10-29 23:10 分
经过上一个步骤对Jar的反编译已经发现源码没有进行加密与混淆,开始将整个JAR包进行反编译获得源代码,而且直接将该程序的全部JAR包都归入lib中,开始直接编译。
2019-10-30 01:15 分
项目构成完成,解决了源代码中的一些问题,对代码进行非破坏性的增长日志。上线一个版本。
2019-10-30 01:30 分
拿到更完整的日志,进行日志分析。对代码进行保护性调整,进行了屡次Debug。
2019-10-30 02:20 分
基本宣告调试完成,进行完整验证。在验证过程当中,发现有部分逻辑遗漏。
2019-10-30 03:20 分
完成了最终版本,调试经过。
2019-10-30 03:30 分
正式投入使用,替代旧版程序。将整个问题Email复现给了供应商。
2019-10-30 04:00 分
记录下来了此次可贵难得的经历。