非托管组件用于分配/释放的内存区域
假设 .net 托管应用程序通过 InterOP 与非托管组件进行交互。如果我必须调试内存问题;非托管组件到底在哪里分配内存? GC 使用的堆是同一个堆(我对此表示怀疑)还是其他区域?我正在进行 Windbg 调试,想知道是否可以通过像 !dumpheap 这样的 SoS 命令查看非托管组件的分配?
Let's say a .net managed application interfacts with an unmanaged component via InterOP. If I have to debug a memory issue; where exactly unmanaged component allocates memory? Is it the same heap that is used by GC (which I doubt) or is it some other areas? I am doing Windbg debugging and wondering if I can look at allocation by unmanaged component via SoS commands like !dumpheap?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 Windbg 中,您可以使用
!heap
来 检查本机堆内存。 GC(托管)堆与本机代码堆的使用是分离的,尽管在某种程度上我的假设是托管堆必须映射(在 CLR 内部)到一个或多个本机堆。SoS 纯粹用于托管代码调试 - WinDbg 首先是一个本机代码调试工具。
umdh.exe 也可能有用,尽管我还没有在混合模式应用程序中尝试过此操作。
In Windbg you can use
!heap
to inspect native heap memory. The GC (managed) heap is disjoint from native code heap usage, though at some level my assumption is that the managed heap must be mapped (inside the CLR) onto one or more native heaps.SoS is purely used for managed code debugging - WinDbg is first and foremost a native code debugging tool.
umdh.exe may also be useful, though I've not tried this in a mixed-mode app.