Debug 龍爪手 (1)
Clean code
要不要寫註解?
Unit test
xdebug
以上都不會講到
單純講提高debug別人程式的效率
先天條件:
1:眼力
大部份的問題都是打錯字。
2:記憶力
熟記程式內容,才能快速想到可能發生問題的地方。
3:腦內編譯能力
就算不執行程式,也要能大概理解每段程式的作用。
4:通靈
要能猜出當時為什麼會這樣寫,直覺很重要。
後天補強:
1:設斷點
2:加log (error log ,laravel log ,audit log,git log)
3:找原作者或第三個人對話
4:提升對infra的認識
5:sop
前端設斷點方式(非webpck):
打開chrome 進到source code,找到想要中斷js的位置,在行數數字前點一下
php斷點方式:
die or exit 兩者作用原全相同,差別在一個perl 派或c語言派
腦袋的斷點:
休息一下,喝口水再回來找問題,個人偏好邊騎車邊想。
加log:
除了一般php error_log() 技巧 和laravel log:info()
還有一個很重要的audit log要做,這樣才能知道資料經過誰去操作,經過哪些操作才變成現在的樣子。
git log:
個人是習慣用sourcetree 對檔案右鍵log selected ,點一下file status,或是直接改檔案
確認該檔案是不是因為某次修改才出問題,也可以直接切到那個commit之前確認看看是不是真的沒有問題
找原作者或第三個人對話:
有時候在對話的過程中就能直接找出bug,不一定要從程式去找,自己或對方可能在對話的內容中就提到問題了。
提升對infra的認識:
如果對於整個網站的架構,網路原理,資料庫原理, 還有一些作業系統的理解不足,查找問題自然就會慢,因為很可能連是不是程式的問題都搞錯了。當然和infra本人們也要好好認識,打好關係。
盤點一下我們目前有的debug資源:
考古工具 :
Slack search (in:),azure search,KM,Google drive, 老鳥的回憶,Google
Log:
ELK,GKE,telescope(部份有裝),自己補的audit log
監控:
Grafana ,GKE , cloudSQL, Slack notify
infra通報:
chat
Azure search:
除了一般的search之外,在boards下還有一個queries可以善用,條件更多
google : 善用建議搜尋,通常表示很多人遇到某個問題。
ELK:
各個index patten的作用要理解
基本技巧:
欄位名:關鍵字 ,排除 not 欄位名:關鍵字
ex: not message: ApiLogger and message :uuid
點擊欄位可以看前5名的內容,再點擊+ 或 -可以篩選或排除
點 add,可以只看該欄位,還原可以按remove
時間篩選:
點月曆 可以快速切換時間區間 ,點 < >可以直接加減時時
也可以選Absolute直接改時間
常用的查詢,可以按save把他存起來
進階技巧:
https://www.elastic.co/guide/en/kibana/7.9/kuery-query.html
圖表製作 Visualize