2014-09-18 11 views
2

Я пытаюсь изолировать утечки памяти в собственном коде в 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>> 

Я настроил символы правильно, теперь я хотел бы знать, как извлечь больше информации из стека вызовов.

  1. Журналы UMDH также имеют номера строк (с именами файлов) в своих журналах различий. Однако в отчете DebugDiag я не нахожу номера строк этих функций. Если функции действительно очень длинные, становится сложно описать контекст, просто глядя на стек вызовов, не имея номеров строк. Есть ли способ извлечь номер строки функции (файл) из журналов DebugDiag?

  2. Еще одна вещь, которую я хотел знать, - это значение гексагонального смещения с каждой записью в столах вызовов.

  3. Каков размер распределения в стеке вызовов? это выделенная память, которая не была освобождена (следовательно, утечка) за выполнение этого стека вызовов?

  4. Любые указания на полную документацию о возможностях DebugDiag?

ответ

0

журналы UMDH имеют номера строк тоже (с именами файлов) в их журналах дифф. Однако в отчете debug diag я не нахожу номера строк этих функций.

Хорошо, тогда идите с журналами UMDH.

Значимость смещения гексагоналей с каждым module!function Запись в столах вызовов.

Шестнадцатеричное смещение указывает на конкретную инструкцию ассемблера в скомпилированном методе. Это примерно связано с смещением номера строки в исходном коде, но на него могут влиять оптимизация компилятора.

Каков размер распределения в стеке вызовов? это выделенная память, которая не была освобождена ...

Да

... за выполнение этого стека вызовов?

No. Выполнение того же метода снова может выделять другой размер. Рассмотрим такую ​​функцию, как AllocateSomeMemory(int bytes), которая будет зависеть от параметра о том, сколько памяти выделено.

Любые указатели на полную документацию о DebugDiag возможности

Извините, я не могу не отметить хороший сайт с моей головы.