DebugDiag调用堆栈不显示调用堆栈中的函数行数

时间:2014-09-18 16:46:44

标签: c++ memory-leaks callstack debugdiag umdh

我正试图在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>>

我已正确配置符号,现在我想知道如何从调用堆栈中提取更多信息。

  1. UMDH日志的差异日志中也有行号(带文件名)。但是在DebugDiag报告中,我找不到这些函数的任何行号。如果函数真的非常长,那么通过仅查看调用堆栈而不使用行号来描述上下文变得困难。有什么办法可以从DebugDiag日志中提取函数(文件)的行号吗?

  2. 我想知道的另一件事是调用堆栈中每个module!function条目的十六进制偏移的重要性。

  3. 调用堆栈中的分配大小是多少?它是否是每次执行此调用堆栈时未释放(因此泄漏)的已分配内存?

  4. 有关DebugDiag功能的综合文档的任何指示?

1 个答案:

答案 0 :(得分:0)

  

UMDH日志的差异日志中也有行号(带文件名)。但是在调试诊断报告中,我找不到这些函数的任何行号。

那么,请使用UMDH日志。

  

调用堆栈中每个is_expected条目的十六进制偏移量的重要性。

十六进制偏移量指向已编译方法中的特定汇编器指令。它与源代码中的行号偏移大致相关,但可能会受到编译器优化的严重影响。

  

调用堆栈中的分配大小是多少?它是未分配的已分配内存...

  

...每次执行此调用堆栈?

没有。再次运行相同的方法可能会分配不同的大小。考虑像describe MyClass do describe '#initialize' do subject { -> { MyClass.new } } it { is_expected.not_to raise_error(Some::Error) } end end 这样的函数,它取决于分配了多少内存的参数。

  

有关DebugDiag功能的综合文档的任何指针

抱歉,我无法提及一个好网站。