Windows 本机内存泄漏-如何查找分配源的调用堆栈

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

基于以下输出的!地址摘要命令,我想我有一个本机内存泄漏。为了确定这些分配发生在哪里的调用堆栈,我在

但是当我跑的时候!heap-p–一个命令,我没有得到任何callstack,只得到以下命令。你知道如何获取分配源的调用堆栈吗

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)