跟查問題總結

2021-10-10 17:27:54 字數 1363 閱讀 5992

最近一直在跟測問題,每次出現問題,心裡面多多少少會有點難受。程式設計師最不喜歡的就是出現bug,我們永遠覺著我們的**不可能出現bug。最簡單的不出bug就是不寫**!

但當確確實實出現問題出現bug的時候,我們又不得不親自參與解決問題。

通過日誌記錄查詢到出現段錯誤的函式。經查發現該函式中有乙個全域性變數為null,結果二次使用該函式導致程式出現段錯誤。

// g_ptisptemplate = null

*iispinfomode = g_ptisptemplate[itemplateid]

.elementlist[iispinfoid]

.m_ielementmode;

刪庫導致的全域性變數為空值???正常的應該會有乙個賦值 的過程。刪除isp庫導致的空值出現。顯然兩者之間沒有必然的聯絡。程式中也沒有開啟isp庫的函式。

繼續沿著程式賦值過程進行查詢。發現有乙個介面的作用是malloc記憶體空間給這個變數,清空記憶體,然後從配置檔案中讀取數值賦給全域性變數。如果該變數為null,那麼這乙個介面基本上是沒有被呼叫的。

int isp_templateattrinit

(int _itemplatecnt)

{ int iret =-1

; int itemplate =0;

g_ptisptemplate =

(isp_template_list*)

malloc

(sizeof

(isp_template_list

)* _itemplatecnt)

;

繼續向上查詢發現,該介面上面有好幾個函式介面。且介面都存在報錯goto跳轉過程。可能為上面的報錯導致程式直接goto跳過初始化malloc的過程。經過列印程式發現確實是乙個函式在呼叫失敗的時候直接導致程式進行goto然後return了。
int isp_templateattrinit

(int _itemplatecnt)

{ int iret =-1

; int itemplate =0;

g_ptisptemplate =

(isp_template_list*)

malloc

(sizeof

(isp_template_list

)* _itemplatecnt)

;

至此意識到程式的框架設計的重要性。每個程式的先後設計順序導致不同問題的出現。本來是不存在這種問題的。但當我們刪除某乙個檔案的時候,導致了問題的出現。排查問題不可能一直都是自己熟悉的邏輯。也不一定就是自己熟悉的模組。就像之前常聽的一句話一樣。我們做技術面臨的問題永遠都是未知的,我們需要把我們的問題封鎖在我們研發層。希望自己在以後的工作中排查問題慢慢總結經驗~

日誌排查問題總結

寫在前面 因為公司負責的專案流程鏈路很長,經常需要排查問題定位問題。目前專案是把每個service的方法前後都加上了入參和返回值的列印。接管專案後,總結了一下通過日誌定位問題的經驗,希望以後排查問題能有一些幫助。第二版 運單後台排查問題的方法總結 邏輯熟悉時 4.再根據測試 現場人員描述的描述以及自...

HAProxy 心跳檢查問題

haproxy可以提供到對後端伺服器的心跳檢查 即埠監測 預設情況下沒有,需要手動在配置檔案中配置,例如 backend new server server first 10.1.1.1 1080 check inter 1000 server second 10.1.1.2 1080 check ...

排查問題思路(一)

問題前提 今天回歸測試用例時,上午回歸用例正常,下午回歸用例98 的用例均報錯,返回空指標異常,伺服器執行正常未宕機。排查思路 1.重跑用例,檢視日誌,因為是錄製的流量,很多資料都是自動mock了,所以無法排查鏈路上是否存在問題。2.重跑全鏈路用例,發現服務基本正常,無問題,排除鏈路上的問題,問題可...