【发布时间】:2011-09-21 13:51:20
【问题描述】:
假设 .net 托管应用程序通过 InterOP 与非托管组件交互。如果我必须调试内存问题;非托管组件究竟在哪里分配内存?它是 GC 使用的同一个堆(我怀疑)还是其他一些区域?我正在做 Windbg 调试,想知道是否可以通过像 !dumpheap 这样的 SoS 命令查看非托管组件的分配?
【问题讨论】:
标签: .net windbg sos unmanaged-memory
假设 .net 托管应用程序通过 InterOP 与非托管组件交互。如果我必须调试内存问题;非托管组件究竟在哪里分配内存?它是 GC 使用的同一个堆(我怀疑)还是其他一些区域?我正在做 Windbg 调试,想知道是否可以通过像 !dumpheap 这样的 SoS 命令查看非托管组件的分配?
【问题讨论】:
标签: .net windbg sos unmanaged-memory
在 Windbg 中,您可以使用 !heap 到 inspect native heap memory。 GC(托管)堆与本机代码堆的使用不相交,尽管在某种程度上我的假设是托管堆必须映射(在 CLR 内部)到一个或多个本机堆。
SoS 纯粹用于托管代码调试 - WinDbg 首先是本机代码调试工具。
umdh.exe 也可能有用,虽然我没有在混合模式应用程序中尝试过。
【讨论】: