Re: [請益] 埋log debug

看板Soft_Job作者 (I'm not Beloved)時間8年前 (2016/05/05 22:32), 編輯推噓4(400)
留言4則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《yshihyu (yshihyu)》之銘言: : 我最近在 debug 把主要函數關鍵地方埋log, bug 有好幾個 : 發現有個有問題假設稱為 A bug 埋log找原因, : 後來感覺函數關鍵log 跟 debug log 太多, 越來越亂很難分析 : 如果先mark掉函數關鍵地方的log 但是log很多地方感覺很麻煩, : 解掉問題又在umark在繼續找 B bug之類的, : 後來我作法是用gdb 只埋函數關鍵 log , 發現問題就用gdb 去看 : 但使用gdb 有時候沒辦法 log 可以分析整體 , : 因為有時候 log 不斷迭代幾次後才能看出前後數據找出問題點 : 大家用埋 log 有什麼技巧或是特殊工具方法嘛? : 謝謝 分享一下個人經驗拋磚引玉 套件: 其實不用自己重寫 開源套件很多 看平台跟語言搜尋一下 如log4net log4cpp等 功能: log module本身要穩且不能影響正常功能 例如不能吃太多記憶體 IO頻寬 運算效能 尤其注意multi-thread時的IO和queue 若time-stamp不準至少相對順序要是正確的 要自己實作的話可以用 singleton pattern + producer-consumer pattern 輸出的部分建議要能支援直接顯示或者寫到檔案 這樣正式發行後方便跟客戶要紀錄 分層: 一般套件都會分幾個層次 建議自己有個準則方便篩選 以Android logcat而例: Assert: 違反規格假設 例如不該是null的物件 或者數值超出假設範圍的情況等 Error: 內外系統錯誤 例如封包錯誤 資料庫錯誤 記憶體錯誤 底層套件崩潰等 Warning:邏輯流程警示 例如操作逾時 找不到檔案 輸入無效 連線中斷等 Info: 重要過程指標 例如檢查碼驗算值 資料總數 執行結果 判斷分歧點等 Debug: 巨觀函數除錯 例如"func(input1, input2) @ status = result" Verbose:底層函數除錯 例如"func.step3 @ (var1, var2) = temp" 正式發行時應該只要開到Info層就夠了 再往下主要是開發時除錯在用 release build時可用define等方法把低層級的log關掉以提升效能 因此要注意寫在log裡的內容千萬不能影響正常程式執行 例如對變數做運算等 以上 請不吝指教~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.223.54 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1462458747.A.D9E.html

05/05 23:34, , 1F
Good
05/05 23:34, 1F

05/06 03:11, , 2F
推推
05/06 03:11, 2F

05/06 19:06, , 3F
挺清楚的
05/06 19:06, 3F

05/11 13:08, , 4F
推~
05/11 13:08, 4F
文章代碼(AID): #1NArbxsU (Soft_Job)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1NArbxsU (Soft_Job)