如何超快地根據日誌來確定是不是BUG?

2021-08-21 16:54:23 字數 1184 閱讀 6904

看**看了2個月,找bug也斷斷續續有乙個月了吧。已經各種詭異的疑難雜症,在這裡寫點心得記錄一下。

不過講道理我的工作就像是專門為了找bug而生的。測試或者線上可能出現的各種問題都有可能到我們這兒,我們再來推斷問題原因是自己、或是業務方、或是後台、或是演算法。我遇到過的還沒有bug原因是自己這邊的。然鵝,就算不是自己的也不代表就可以水水過去,還是要根據自身的**和日誌來分析問題究竟出在哪邊,就跟柯南的推理一樣,講究證據。

來了一條日誌,有個變數不知道它的值代表什麼意思怎麼辦?

比如下圖:

那麼怎麼進行上下文分析?

上文:想要知道是什麼函式呼叫了這個函式,那麼請查詢所有引用,在篩選結果中找到最合適的。然後一級一級地往上找,最後就能知道是從哪個入口呼叫了你這個模組的函式。

比如,你寫了個sdk,給了介面給業務方a、b、c,結果通過上文分析發現是業務方b的那個函式出現的問題,那麼就可以確定這個問題應該去找b跟進。

然而查詢所有引用有個蛋疼的問題,加入編譯器告訴你這個函式的被引用次數有幾千個,那完了,天知道應該從哪個洞口往上爬。這就考驗**寫得好不好了。

除此之外,查詢所有引用還有個作用,就是去檢視某個類的變數是被什麼東西設定或者修改的,這在動態執行的程式裡很常見。比如統計當前觀眾數的、統計攻擊次數、傷害值的等等。

下文:下文分析很簡單,函式a呼叫函式b,b又呼叫了函式c。當你想知道函式a的具體實現邏輯時,當然就是用下文分析,不停地檢視包含函式的定義,這樣就知道了底層實現邏輯。下文分析不可能有分支讓你選擇,它的定位就是這麼準確。

假如你想知道日誌裡的 value 值是啥意思。

2.搜尋到了,是在函式funsetvalue(int num)裡面,但是value值是被函式的引數num設定的;

3.怎麼辦,當然是上文分析,查詢該函式的所有引用,看看是誰設定了num這個函式引數;

4.ok,經過層層向上剖析,終於知道了是哪個函式,假設是loop()函式;

5.接下來又想知道funsetvalue(int num)的更底層邏輯,簡單,下文分析檢視定義就行了;

6.最後,又發現這個變數其實是被loop()根據私有變數m_ncount動態更新的,查詢m_ncount這個變數的所有引用,乙個乙個地看,就能知道它是怎麼變化的。

如何根據protobuf來Mock後台返回的資料

google protocol buffer 簡稱 protobuf 是 google 公司內部的混合語言資料標準,他們用於 rpc 系統和持續資料儲存系統。protocol buffers 是一種輕便高效的結構化資料儲存格式,可以用於結構化資料序列化,或者說序列化。它很適合做資料儲存或 rpc 資...

jquery如何根據多選框name來獲得選中的值。

根據多選框name來獲得選中的值可用如下 jquery 實現12 3 input checkbox name test checked each function 例項演示 給出兩組多選框,點選按鈕後分別獲得兩組中被選擇的專案 示例 如下 建立html元素12 3456 78910 1112 131...

如何設定nginx日誌格式來檢視負載分擔結果

nginx配置好負載分擔後,測試的時候,如何檢視負載分擔情況 通過設定nginx日誌顯示 nginx伺服器日誌相關指令主要有兩條,一條是log format,用來設定日誌格式,另外一條是access log,用來指定日誌檔案的存放路徑 格式和快取大小,一般在nginx的配置檔案中日記配置 usr l...