所有這些 API(DbgHelp、DbgEng、DIA SDK)都可用于從函式指標中恢復函式名稱/源檔案位置,因此可用于解密堆疊跟蹤。
但是,每個 DbgHelp 函式都有以下注釋:
所有 DbgHelp 函式,例如這個函式,都是單執行緒的。因此,從多個執行緒呼叫此函式可能會導致意外行為或記憶體損壞。為避免這種情況,您必須將來自多個執行緒的所有并發呼叫同步到該函式。
至于 DbgEng,沒有這樣的宣告,但是它似乎是基于 DbgHelp,所以不能是執行緒安全的:即使 DbgEng 保護對 DbgHelp 的每次呼叫,也可能不是來自 DbgEng 的對 DbgHelp 的呼叫,而是直接來自用戶的代碼。
恐怕 DIA SDK 也是使用 DbgHelp 實作的。
那么是否有任何健壯的符號 API 可用于為多執行緒應用程式設計的庫中?
uj5u.com熱心網友回復:
DIA SDK 被認為是一個執行緒安全的解決方案。
Boost.Stacktrace 存盤庫中有一個問題,要求切換到 DIA SDK。那里提到了 DbgHelp 和 DbgEng 的不安全性。
還有一個選項來滾動自己的實作;一個可能的起點在這里:https ://github.com/microsoft/microsoft-pdb
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/428295.html
