本文以流水線的方式記錄了一次難以忘懷的調試經歷。模塊化
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 分
記錄下來了此次可貴難得的經歷。