如何在C#.Net中查看堆栈内部的对象

8

在每一行执行之后是否能够看到堆栈和堆的内容?我想看到这些内容,因为它会清楚地说明.Net中的内存分配和释放。如果有任何文件或链接可以澄清我的疑虑,请分享。


1
这是大量的数据,很可能不会告诉你太多信息。 (或者更糟糕的是,你会抱怨它在你查看的二十行中从未收集任何垃圾。)如果您对内存分配和垃圾回收有疑问,请提出问题和/或寻求高级解释,这更有可能澄清事情。 - user395760
当然,我会从现在开始做到这一点。 - funsukvangdu
3个回答

5

SOS或PssCor是一个不错的起点,同时还有WinDbg

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

.load C:\pathtoextensions\psscor4.dll

之后,您可以使用!dumpheap!dumpstack命令。

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

这不是一个超级简单的任务。如果您以前没有使用过它,那么需要一段时间才能练习足够的WinDbg技巧。

您可以使用!bpmd在方法上设置断点,然后使用上述命令,使用p命令跳过,然后重新运行命令。

我相信还有其他商业工具可以完成这项工作,例如ANTS ProfilerdotTrace,但我对这两个工具的经验不多。
一旦开始,您可以询问(新的)更具体的关于SOS或Psscor的问题。

4

堆栈:

var stackInfo = new StackTrace();

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

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接