看板 Soft_Job 關於我們 聯絡資訊
※ 引述《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
CaptainH: Good 05/05 23:34
happierway: 推推 05/06 03:11
roger00: 挺清楚的 05/06 19:06
zerofinal: 推~ 05/11 13:08