[英]DebugDiag call stack does not display line number of functions in call stack
我試圖隔離Windows本機代碼中的內存泄漏。
我運行了一個測試用例的多次迭代,並將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功能的綜合文檔的指針?
UMDH日志的差異日志中也具有行號(帶有文件名)。 但是,在調試診斷報告中,我找不到這些功能的任何行號。
好吧,然后處理UMDH日志。
調用堆棧中每個
module!function
條目的十六進制偏移的重要性。
十六進制偏移量指向已編譯方法中的特定匯編程序指令。 它與源代碼中的行號偏移量大致相關,但可能會受到編譯器優化的嚴重影響。
調用堆棧中的分配大小是多少? 是分配的尚未釋放的內存...
是
...每次執行此調用堆棧?
否。再次運行相同的方法可能會分配不同的大小。 考慮一個類似AllocateSomeMemory(int bytes)
的函數,該函數取決於分配多少內存的參數。
有關DebugDiag功能的全面文檔的任何指針
抱歉,我不能提一個好的站點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.