我有一个与本机动态链接库互操作的.NET应用程序,具有以下层。
a) C++接口GetNames()返回wchar_t实例列表
b) C++/CLI接口GetNames2()代码调入wchar接口,将wchar列表编组成.NET字符串,返回该.NET字符串列表
c)托管代码C#调用互操作层GetNames2()接口并显示字符串列表
我正在调用互操作层中的CoTaskMemFree API来释放本机wchar字符串。然而,我只是想知道如何查看由于缺少CoTaskMemFree调用而导致的内存泄漏。所以我注释掉了对CoTaskMemFree的调用。在这种情况下,我的理解是,如果我附加windbg并运行!address -summary命令,在本机上完成的任何分配(尚未释放)都应该显示在RegionUsageHeap下,但它似乎不会报告它。我如何在windbg中查看本机内存使用情况(在托管代码的上下文中)?
发布于 2011-10-31 08:43:30
RegionUsageHeap是用于所有本机堆的总使用量,该值以相当大的块递增,并且在此变量中必须观察到相当大的内存泄漏。
您可以使用!heap命令。CoTaskMemAlloc使用默认的每进程堆,它通常是!heap -s输出中的第一个句柄,或者在!peb输出中关注“ProcessHeap”。
拥有此句柄后,使用!heap -stat-h查看分配了多少块。
您也可以转储整个堆,请查看windbg帮助中的!heap命令。示例:
0:011> !heap -stat -h 00150000
heap @ 00150000
group-by: TOTSIZE max-display: 20
size #blocks total ( %) (percent of total busy bytes)
44 82f - 22c7c (8.73)
20000 1 - 20000 (8.03)
<I have cut here>
https://stackoverflow.com/questions/7919155
复制相似问题