我试图隔离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>>我已经正确地配置了符号,现在我想知道如何从调用堆栈中提取更多信息。
module!function条目中的重要性。发布于 2015-09-17 22:00:08
UMDH日志的diff日志中也有行号(带有文件名)。但是,在调试报告中,我没有找到这些函数的任何行号。
那就跟UMDH日志一起去吧。
调用堆栈中每个
module!function条目的十六进制偏移的重要性。
十六进制偏移量指向编译方法中的特定汇编程序指令。它与源代码中的行号偏移量大致相关,但可能受到编译器优化的严重影响。
调用堆栈中的分配大小是多少?是分配的内存没有被释放..。
是
..。每次执行这个调用堆栈?
不是的。再次运行相同的方法可能分配不同的大小。考虑一个像AllocateSomeMemory(int bytes)这样的函数,它将取决于分配了多少内存。
指向有关DebugDiag功能的全面文档的任何指针
抱歉,我不能从脑子里说出一个好地方。
https://stackoverflow.com/questions/25918183
复制相似问题