UMDH 不提供调用堆栈
UMDH not giving call stack
我正在使用 UMDH(x64) 来测试内存泄漏。我的代码既没有经过 FPO 优化,也没有使用自定义分配器。它仅使用 "new" 运算符。
"Create User Mode stack trace Database" 在 Gflags(x64) 中为正在测试的图像启用。
我在非泄漏案例和泄漏案例中都使用 UMDH 跟踪了我的应用程序,并在这两种情况下都获得了日志。
并将日志与 UMDH 进行了比较。从顶部的评论行可以看出,它选择了正确的 pdb。
问题:
调用堆栈不显示我的代码堆栈。它只是跟踪通用 windows 函数名称。我在 x64 中尝试过调试和发布版本。
我错过了什么吗?
得到的代码和diff trace如下:
// 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
.....
.....
...
如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
我正在使用 UMDH(x64) 来测试内存泄漏。我的代码既没有经过 FPO 优化,也没有使用自定义分配器。它仅使用 "new" 运算符。
"Create User Mode stack trace Database" 在 Gflags(x64) 中为正在测试的图像启用。
我在非泄漏案例和泄漏案例中都使用 UMDH 跟踪了我的应用程序,并在这两种情况下都获得了日志。
并将日志与 UMDH 进行了比较。从顶部的评论行可以看出,它选择了正确的 pdb。
问题:
调用堆栈不显示我的代码堆栈。它只是跟踪通用 windows 函数名称。我在 x64 中尝试过调试和发布版本。 我错过了什么吗?
得到的代码和diff trace如下:
// 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
.....
.....
...
如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