搜尋了下在windows下c++列印堆疊的相關資料,發現很多都是類似,且方法比較複雜,因此自己封裝了乙個介面。主要用到了capturestackbacktrace,symfromaddr,symgetlinefromaddr64這三個介面。capturestackbacktrace用於獲取當前堆疊,symfromaddr用於獲取符號資訊,symgetlinefromaddr64用於獲取檔案和行號資訊。
header.h
/// @brief 獲取當前呼叫堆疊
/// @details 預設獲取堆疊深度為5層。\n
/// \n
/// 在msdn示例**中獲取檔案行號資訊需要設定symsetoptions(symopt_load_lines),\n
/// 並強調只有在設定這個引數後才能檢索到檔案行號資訊。\n
/// 但本人在測試過程中,未設定該引數,仍然能獲取到行號資訊,因此在**中遮蔽了該設定。\n
/// 如果需要設定該引數,要注意symsetoptions並不是執行緒安全的,要注意同步問題。\n
/// 參見 \n裡面說明:\n
/// 所有的dbghelp介面,正如symsetoptions,是單執行緒的。因此,多執行緒呼叫這個介面,\n
/// 將很可能導致預料外的行為或者記憶體異常。為了避免這個問題,在多執行緒呼叫這個介面的時候要進行同步處理。\n
/// @warning 需要注意多執行緒問題。
string tracestack();
source.cpp
string tracestack()
else
} return oss.str();
}
相關資料 boost stacktrace堆疊列印
在windows下最方便的是minidump,其他2個平台麻煩不少,google breakpad使用起來又太麻煩.最近boost1.65版本出了個stacktrace使用起來簡單方便,只是無法看實際資料,對於快速定位bug還是很有幫助的.要注意的是異常的處理需要寫檔案,應用重啟之後再讀取檢視 用其...
C 中列印出當前堆疊
使用c 過程中,除了通過try catch中的exception來列印當前的堆疊資訊,我們還可以主動通過system.diagnosticsstacktrace這個類來主動列印出堆疊資訊。using system using system.diagnostics namespace test2 cl...
Lua呼叫C 時列印堆疊資訊
公司的手遊專案,使用的是基於cocos2d x綁lua的解決方案 引數quick x的繫結 雖然使用了lua進行開發,更新很爽了,但是崩潰依然較為嚴重,從後台檢視崩潰日誌時,基本上只能靠 猜 來復現bug。更為鬱悶的是很多時候並沒有使用log輸出,在崩潰日誌裡還無法檢視大概在哪一步操作崩潰的 後來在...