Windows 本机内存泄漏-如何查找分配源的调用堆栈
基于以下输出的!地址摘要命令,我想我有一个本机内存泄漏。为了确定这些分配发生在哪里的调用堆栈,我在 但是当我跑的时候!heap-p–一个命令,我没有得到任何callstack,只得到以下命令。你知道如何获取分配源的调用堆栈吗Windows 本机内存泄漏-如何查找分配源的调用堆栈,windows,memory-leaks,windbg,Windows,Memory Leaks,Windbg,基于以下输出的!地址摘要命令,我想我有一个本机内存泄漏。为了确定这些分配发生在哪里的调用堆栈,我在 但是当我跑的时候!heap-p–一个命令,我没有得到任何callstack,只得到以下命令。你知道如何获取分配源的调用堆栈吗 0:000> !heap -p -a 0218e008 address 0218e008 found in _HEAP @ 4e10000 HEAP_ENTRY Size Prev Flags UserPtr UserSi
0:000> !heap -p -a 0218e008
address 0218e008 found in
_HEAP @ 4e10000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
0218e000 001c 0000 [00] 0218e008 000d4 - (busy)
我对Windows一无所知,但至少在Unix系统上,调试器(如Linux上的
gdb
)对于理解调用堆栈很有用
您还可以通过使用例如来规避一些问题。在许多系统上,如果没有从
获得调用堆栈,还可以借助查找内存泄漏!堆-p-a
原因可能是您没有正确使用gflags
请记住使用正确的名称,包括.exe
尝试以智能方式启动它并转到“图像”选项卡,可能会更容易
尝试使用页面堆,这也会给出调用堆栈,您应该使用deleaker。它是强大的调试工具。使用valgrind for linux和Delaker for windows。well windbg是windows上“所有调试器之母”。正如《参考codeproject》一文中所示,您似乎可以找到它,我一定是做错了。我刚刚将windbg连接到实时进程并开始运行命令。在这种情况下我也需要运行gflags吗?是的,在启动.exe之前需要使用gflags
0:000> !heap -p -a 0218e008
address 0218e008 found in
_HEAP @ 4e10000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
0218e000 001c 0000 [00] 0218e008 000d4 - (busy)