Debug 龍爪手 (1)

Yotlin
Parenting 數位研發
Jun 13, 2022

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

--

--

Yotlin
Parenting 數位研發

22年以上 Web 全端工程師經驗,目前任職於親子天下數位研發中心技術部,帶領團隊共同成長