簡介
CExceptionLogger 可免費用於商業/開源項目,源自 MSDN Magazine 2002 年 3 月 Matt Pietrek 的文章《Improved Error Reporting with DBGHELP 5.1》。能捕獲未處理異常(非法訪問、棧溢出、除零等),生成詳細日誌。
日誌記錄內容
- 異常發生日期時間、異常代碼
- 非法訪問的線性地址、段、偏移、模塊路徑
- 進程完整路徑、工作目錄、命令行、進程/線程 ID
- 所有線程信息(ID、優先級、創建時間、Kernel/User Time)
- 所有模塊信息(名稱、路徑、引用計數、句柄、大小、完整符號表)
- 所有 x86 寄存器值
- 調用棧(段、偏移、模塊、函數、行號)
- 每棧幀的所有變量/參數:基本類型、用戶定義類型(結構/聯合/類),含名稱、地址、類型、值,數組完整展開
版權與使用條件
- 可包含於任何二進制發布產品
- 保留各模塊頂部版權聲明前提下可任意修改
- 分發源碼僅限作者最新版本
編譯與部署要求
- 需安裝 2002 年 11 月後 Platform SDK
- 直接添加
ExceptHandler.cpp/h 或編譯為 DLL 動態加載
- 客戶機必須部署
DBGHELP 5.1 DLL(放置於應用程序同目錄)
- Release 模式需啟用調試信息生成 PDB,並分發 PDB 文件
- 優化選項建議設為「Disable (Debug)」以獲得有意義棧回溯
日誌體積說明
單次日誌可能超過 100KB,作者觀點:磁盤空間廉價,開發者排錯時間寶貴。
改進計劃
- 可配置日誌文件名
- 支援 Win64 平台
- 支援非 x86 棧回溯
參考資料:Bugslayer (MSJ 1998)、Under the Hood (MSDN 2002)。完整源碼隨文提供。