Windows下C 列印堆疊

2021-08-20 03:28:16 字數 893 閱讀 7989

搜尋了下在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輸出,在崩潰日誌裡還無法檢視大概在哪一步操作崩潰的 後來在...