我怎么能看到堆中的对象&c# . net中的栈

本文关键字:net 对象 怎么能 | 更新日期: 2023-09-27 18:09:52

是否可以在每一行执行后看到堆栈和堆的内容?我希望看到它,因为它会给。net中的内存分配和释放提供清晰的概念。用你的

如果有任何文件或链接可以澄清我的疑问与你的答案,请分享。

我怎么能看到堆中的对象&c# . net中的栈

SOS或PssCor是一个很好的开始,与WinDbg一起。

一旦你把它整理出来;将WinDbg附加到进程中,加载调试器扩展。例如:

.load C:'pathtoextensions'psscor4.dll

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

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

这不是一个超级简单的任务。如果你以前没有使用过WinDbg,那么你需要一段时间来练习它。

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

我相信还有其他商业工具,如ANTS Profiler或dotTrace可以完成这项工作,但我对这两种工具都没有太多的经验。

一旦你开始了,你可以问(新的)关于SOS或psscore更具体的问题。

Stack:

var stackInfo = new StackTrace();

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

您还可以使用dotnet-dump工具检查堆:

  • https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-dump
dotnet tool install --global dotnet-dump
dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag]