作為軟體工程師,在 除錯 的時候,為確認系統發生的情況,會運用什麼思路?
我有這樣的思路:
1. 時間
依據事件發生的時間,盡可能縮小搜尋 log 的範圍
2. 事務 (Transaction)
看見 log 中的事務,相同事務通常有以下特徵:
- 相同進程 or 線程 id (多線程系統)
- 相同 trace_id or uuid (分散式系統)
就是找到事件中一到多個工作單元的開始與結束
3. 關鍵字
事務中有哪些關鍵字,足以代表系統當時進行的是何種行為、交易與異常?
4. 因果關係
- 行為、交易與異常的上下文關係,結合時間順序,便可推測什麼行為開始有後續這異常的發生
- 認識系統上下游:對整個系統架構的認識能幫助認清問題
5. 異常訊息的語義
有無異常代號,官方文件對此異常的說明是什麼?異常觸發的條件是什麼?
6. 異常訊息顯示在哪一行程式碼或套件源碼發生?
7. 這行程式碼或套件源碼上下文 (input、output、call tree) 與 log 上下文的因果匹配
8. 找到什麼 input,會造成這行程式碼,或套件的源碼報錯?
input 可能是動詞或名詞:
- 如跟後台或 DB 取資料,就是動詞
- 如前台傳遞參數為空,就是名詞
9. 重現問題
製造發生同樣異常的案例,視情況可規劃為測試案例,避免之後再出錯
10. 解決出現這個 input 的原因
常見原因通常有這幾種:
- 本身系統程式 BUG (如忘記覆值…)
- 上游系統的問題 (如資料格式不正確…)
- 下游系統的問題 (如 DB、Server 無回應…)
11. 最後盡可能地發揮“通靈”的能力
私訊《畫家帽の龍》FB 粉絲專頁“666” 就送給你《轉職軟體工程師攻略圖》,助你朝想要的方向前進。
祝你職涯順利~Go~