Memory leaks 使用WinDbg对非托管代码进行内存泄漏调试
我正在使用WinDbg调试一个潜在的内存泄漏和一些进程转储 快跑!堆-针对新启动的转储:Memory leaks 使用WinDbg对非托管代码进行内存泄漏调试,memory-leaks,windbg,Memory Leaks,Windbg,我正在使用WinDbg调试一个潜在的内存泄漏和一些进程转储 快跑!堆-针对新启动的转储: Result: ************************************************************************************************************************ NT HEAP STATS BELOW ************
Result:
************************************************************************************************************************
NT HEAP STATS BELOW
************************************************************************************************************************
LFH Key : 0x000000db58680073
Termination on corruption : ENABLED
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-------------------------------------------------------------------------------------
0000005a8f4c0000 00000002 48620 24056 48228 280 269 8 3 0 LFH
0000005a8f2e0000 00008000 64 4 64 2 1 1 0 0
0000005a8f5f0000 00001002 1472 96 1080 7 6 2 0 0 LFH
0000005a8f7b0000 00041002 508 8 508 5 1 1 0 0
0000005a8f6b0000 00001002 3516 1544 3124 12 42 3 0 0 LFH
0000005a8f9b0000 00041002 900 136 508 0 2 1 0 0 LFH
0000005a8f860000 00001002 900 248 508 2 20 1 0 0 LFH
0000005a911e0000 00041002 508 8 508 5 1 1 0 0
0000005aa9eb0000 00001002 900 44 508 3 3 1 0 0 LFH
0000005aad550000 00001002 1472 88 1080 5 6 2 0 0 LFH
0000005aad670000 00001002 508 8 508 5 1 1 0 0
0000005aaf260000 00001002 452 32 60 7 3 1 0 0 LFH
0000005aaf230000 00001002 1472 136 1080 4 6 2 0 0 LFH
0000005ab14c0000 00001002 900 196 508 45 12 1 0 0 LFH
0000005ab6790000 00001002 1472 84 1080 10 4 2 0 0 LFH
0000005ab5b50000 00001002 900 188 508 128 16 1 0 0 LFH
0000005ab5c70000 00001002 452 40 60 1 3 1 0 0 LFH
0000005ab5cf0000 00001002 452 44 60 5 3 1 0 0 LFH
-------------------------------------------------------------------------------------
快跑!在执行某些操作后,针对转储执行heap-s:
Result:
************************************************************************************************************************
NT HEAP STATS BELOW
************************************************************************************************************************
LFH Key : 0x000000db58680073
Termination on corruption : ENABLED
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-------------------------------------------------------------------------------------
0000005a8f4c0000 00000002 858020 438588 857628 43794 1185 167 8 ac LFH
Virtual address fragmentation 48 % (167 uncommited ranges)
0000005a8f2e0000 00008000 64 4 64 2 1 1 0 0
0000005a8f5f0000 00001002 1472 164 1080 5 6 2 0 0 LFH
0000005a8f7b0000 00041002 508 8 508 5 1 1 0 0
0000005a8f6b0000 00001002 7608 3448 7216 90 101 4 0 0 LFH
0000005a8f9b0000 00041002 900 152 508 4 2 1 0 0 LFH
0000005a8f860000 00001002 1920 604 1528 4 43 2 0 0 LFH
0000005a911e0000 00041002 508 8 508 5 1 1 0 0
0000005aa9eb0000 00001002 900 56 508 7 5 1 0 0 LFH
0000005aad550000 00001002 1472 160 1080 7 8 2 0 0 LFH
0000005aad670000 00001002 508 8 508 5 1 1 0 0
0000005aaf260000 00001002 452 32 60 7 3 1 0 0 LFH
0000005aaf230000 00001002 1472 392 1080 30 14 2 0 0 LFH
0000005ab14c0000 00001002 900 216 508 53 13 1 0 0 LFH
0000005ab6790000 00001002 1472 160 1080 4 5 2 0 0 LFH
0000005ab5b50000 00001002 900 188 508 130 18 1 0 0 LFH
0000005ab5c70000 00001002 1472 84 1080 5 5 2 0 0 LFH
0000005ab5cf0000 00001002 1472 100 1080 4 4 2 0 0 LFH
-------------------------------------------------------------------------------------
0000005a8f4c0000上的堆增长了很多
快跑!heap-stat-h0000005a8f4c0000:
Resut:
heap @ 0000005a8f4c0000
group-by: TOTSIZE max-display: 20
size #blocks total ( %) (percent of total busy bytes)
1000 2 - 2000 (19.45)
146a 1 - 146a (12.41)
110 11 - 1210 (10.98)
100 b - b00 (6.69)
900 1 - 900 (5.47)
468 2 - 8d0 (5.36)
82e 1 - 82e (4.97)
800 1 - 800 (4.86)
400 2 - 800 (4.86)
4e8 1 - 4e8 (2.98)
50 f - 4b0 (2.85)
228 2 - 450 (2.62)
410 1 - 410 (2.47)
26c 1 - 26c (1.47)
238 1 - 238 (1.35)
208 1 - 208 (1.23)
30 8 - 180 (0.91)
20 b - 160 (0.84)
68 3 - 138 (0.74)
60 3 - 120 (0.68)
我得到的大小和块数与清洁启动完全相同
接下来我该怎么办?如何找到0000005a8f4c0000增长的原因
我应该在gflag中启用某些功能吗?!heap无助于调试托管内存泄漏,因为运行时使用
VirtualAlloc
API分配自己的堆。在网上查看有关如何使用SOS扩展的说明,尤其是!SOS.DumpHeap
@SteveJohnson:为什么你认为它是一个托管应用程序?!heap
命令是本机命令。如果它显示了一些东西,那么它就不是.NET。然而,我同意这个堆中的虚拟块的数量已经从3个增加到了8个,因此研究VirtualAlloc的片段是正确的方法。只是推理(.NET)不适合我。HeapAlloc将把大于512kB的分配直接转发给VirtualAlloc(),因为在其上应用堆模式几乎没有意义。因此,新的5个虚拟块可能很大。对不起。我回答了几个.NET调试问题,而你的问题是我列表中的下一个问题,所以我错误地认为它是一个托管应用程序。“对不起,误传了。”@ThomasWeller:谢谢你,托马斯。如何使用WinDbg追踪虚拟化的作品?我还没有任何线索。