UMDH не дает стек вызовов

Я использую UMDH(x64) для проверки утечки памяти. Мой код не оптимизирован ни для FPO, ни для использования пользовательских распределителей. Используется только "новый" оператор.

"Создать базу данных трассировки стека в пользовательском режиме" включена в Gflags(x64) для тестируемого изображения.

Я отслеживал свое приложение, используя UMDH, как в случае без утечек, так и в случае утечек, и получил журналы в обоих случаях.

И сравнил логи с UMDH. Он выбрал правильный pdb, что видно из строк комментариев в верхней части.

Проблема:

Стек вызовов не показывает стек моего кода. Он просто отслеживает имена общих функций Windows. Я пытался с отладочной и выпускной версиями в x64. Я что-то пропустил?

Полученный код и трассировка различий приведены ниже:

// code:
#include <iostream>
using namespace std;

void myFunc()
{
   int k;
   cin >> k;
   int* ii = new int[1998];

   if (k == 0) delete[] ii;
}

int main()
{
   myFunc();
   return 0;
}


// stack trace obtained:
+     390 (   390 -     0)      1 allocs    BackTraceAC905E8D
+       1 (     1 -     0)  BackTraceAC905E8D   allocations

ntdll!RtlpCallInterceptRoutine+0000003F
ntdll!RtlpAllocateHeapInternal+0000069F
ntdll!TppWorkerThread+00000ADB
KERNEL32!BaseThreadInitThunk+00000022
ntdll!RtlUserThreadStart+00000034
.....
.....
...

1 ответ

Решение

Как описано в разделе Использование UMDH для поиска утечки памяти в пользовательском режиме (MSDN), необходимо определить переменную среды _NT_SYMBOL_PATH перед использованием UMDH.

Если вы запускаете его из командной строки, используйте

set _NT_SYMBOL_PATH=c:\mysymbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols 
Другие вопросы по тегам