UMDH没有给出调用堆栈

时间:2016-10-25 05:16:49

标签: windows memory-leaks 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 个答案:

答案 0 :(得分:1)

Using UMDH to Find a User-Mode Memory Leak (MSDN)中所述,您需要在使用UMDH之前定义环境变量_NT_SYMBOL_PATH

如果从命令行运行它,请使用

set _NT_SYMBOL_PATH=c:\mysymbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols