我正試圖隔離Windows上的本機代碼中的內存泄漏。DebugDiag調用堆棧不顯示調用堆棧中函數的行數
我運行了一個測試用例的多次迭代,並將DebugDiag附加到進程中以收集有關可疑泄漏(通過PerfMon中的多次運行確認的內存泄漏)的信息。
DebugDiag資料指出可疑調用堆棧像
Call stack sample 1
Address 0x0f09e2c0
Allocation Time 00:22:38 since tracking started
Allocation Size 8.54 KBytes
Function Source destination
ntdll!RtlpReAllocateHeap+19c ntdll!RtlAllocateHeap
ntdll!_except_handler4
ntdll!RtlReAllocateHeap+22f ntdll!RtlReAllocateHeap
sqlncli11!MpReallocZeroMemory+66
sqlncli11!SQLReAllocateMemoryEx+22 sqlncli11!MpReallocZeroMemory
sqlncli11!AllocPlex+1a4 sqlncli11!SQLReAllocateMemoryEx
sqlncli11!SetADRec+2a4 sqlncli11!AllocPlex
sqlncli11!SQLBindCol+217 sqlncli11!SetADRec
odbc32!SQLBindCol+3c0
sscfdm!CSSLockSqlCursor::DoExecuteStmt+11a
sscfdm!CSSSqlCursor::Execute+129 sscfdm!CSSLockSqlCursor::DoExecuteStmt
sscfdm!CSSSqlObj::Execute+d86 sscfdm!CSSSqlCursor::Execute
sscfom!CSSBusComp::SqlExecute+3a sscfdm!CSSSqlObj::Execute
<<many multiple lines below>>
我已經正確配置的符號,現在我想知道我怎麼提取調用堆棧的詳細信息。
UMDH日誌在它們的差異日誌中也有行號(帶有文件名)。但是,在DebugDiag報告中,我沒有找到這些函數的任何行號。如果函數真的非常長,那麼通過查看沒有行號的調用堆棧來描述上下文變得很困難。有沒有什麼辦法可以從DebugDiag日誌中提取函數(文件)的行號?
我想知道的另一件事是調用堆棧中的每個
module!function
條目的十六進制偏移的意義。調用堆棧中的分配大小是多少?這是分配的內存還沒有被釋放(因此泄漏)每次執行此調用堆棧?
有關DebugDiag功能綜合文檔的任何指針?