【问题标题】:How can I see Objects Inside Heap & Stack in C#.Net如何在 C#.Net 中查看堆和堆栈中的对象
【发布时间】:2011-11-24 17:31:28
【问题描述】:

是否可以在每行执行后查看堆栈和堆的内容。我想看到它,因为它可以清楚地了解.Net 中的内存分配和释放。用你的

如果有任何文档或链接可以用您的答案消除我的疑问,请分享。

【问题讨论】:

  • 这是很多数据,它可能不会告诉你太多。 (或者更糟的是,你会抱怨它在你查看的 20 行中从不收集任何垃圾。)如果你对内存分配和垃圾收集有疑问,提出问题和/或寻求高级解释,那更有可能把事情弄清楚。
  • 当然,我现在肯定会这样做

标签: c# .net heap-memory stack-memory


【解决方案1】:

堆栈:

var stackInfo = new StackTrace();

堆?不,您需要使用分析器、调试器或适当的 API。不是一个简单的任务。如果您尝试并遇到困难,最好提出更具体的问题。

【讨论】:

    【解决方案2】:

    SOS 或PssCor 是一个很好的起点,与WinDbg 并驾齐驱。

    一旦你解决了这个问题;将 WinDbg 附加到您的进程,加载调试器扩展。例如:

    .load C:\pathtoextensions\psscor4.dll
    

    之后,您可以发出!dumpheap!dumpstack 命令。

    这两个命令的输出都非常原始。 !dumpheap -stat 将为您提供堆的“统计”概览。所有分配的类型、分配的数量和总字节数。

    这不是一个超级简单的任务。如果您以前没有使用过 WinDbg,则需要一段时间来获得足够的练习。

    您可以做的是在使用!bpmd 的方法上设置断点,然后使用上面提到的命令,然后使用p 命令跳过并重新运行这些命令。

    我确信还有其他商业工具,如 ANTS ProfilerdotTrace 可以完成工作 - 但我对这两种工具都没有太多经验。

    一旦开始,您可以询问(新的)有关 SOS 或 Psscor 的更具体的问题。

    【讨论】:

      猜你喜欢
      • 2011-07-24
      • 2015-03-13
      • 1970-01-01
      • 2018-09-02
      • 2017-08-05
      • 2012-05-09
      • 2018-01-06
      • 2011-06-30
      • 2013-09-25
      相关资源
      最近更新 更多