【问题标题】:How to hook .NET memory manager / garbage collector?如何挂钩 .NET 内存管理器/垃圾收集器?
【发布时间】:2016-07-31 10:19:45
【问题描述】:

我一直在寻找 .NET 内存泄漏检测工具和 .NET 分析器 - 在互联网上有很多,但是 - 它们都是商业工具。我想检查是否有任何开源替代方案,它们的开发状态是什么(什么是有效的,什么是无效的),以及是否有可能 - 是否有人可以指出我使用哪些 API 来“挂钩”。 NET 垃圾收集器。

此外,我还了解到引用分析并非微不足道 - 如果 GC 不收集内存 - 那么这意味着有人引用了该数据 - 因此反过来需要某种引用回溯 - 还有什么 API 和技术也很有趣存在以分析参考。

我希望代码是低级的——最好是 C/C++——我怀疑它与 C++/COM 未记录的 API 有关。但如果还有 C# 接口来执行内存分析 - 我也可以使用它们。

如果可能的话:

  • 您能否在此处发布链接到开放源代码项目/挂钩 .NET 内存管理的代码。
  • 您能否发布与挂钩内存管理相关的 API 文档的链接。

【问题讨论】:

  • VS 2015 有内置分析器。不知道,社区版里有没有,不如去看看吧?
  • 我对底层技术很感兴趣——所以想创建类似于 Visual Studio 的内存分析器/分析器。我已经实现了本机内存泄漏检测工具,想更深入地分析一下如何将支持扩展到托管端。
  • 如果您真的对技术本身感兴趣,请务必访问 Microsoft 在 GitHub 上发布的 CoreCLR 和 CoreFX 存储库。这向您展示了所有实现细节,您应该能够找出可以挂钩的内容。
  • 任何使用这些 API 接口的示例项目?您可以将此添加为答案,因为它部分回答了我的问题。

标签: c# .net memory-management memory-leaks garbage-collection


【解决方案1】:

这是我到目前为止简要分析的内容 - 来自我自己的旧问题 - Resolve managed and native stack trace - which API to use?

我已经通过 SOS/Strike 链接进行了追踪,您可以在其中找到以下信息:

从此 git 存储库: https://github.com/dotnet/coreclr/blob/master/src/ToolBox/SOS/Strike/sosdocs.txt

您可以在以下位置找到有关 windbg 支持的命令类型的简要说明(例如 DumpHeap),以及相应的实现:

https://github.com/dotnet/coreclr/blob/master/src/ToolBox/SOS/Strike/strike.cpp

但这更多的是较少的windbg扩展-由于缺少项目而无法编译它,而且它看起来像问题出现后的分析工具-我更愿意主动挂钩到内存分配链中。

我猜sos/strike的对应代码不存在?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    相关资源
    最近更新 更多