【发布时间】:2012-08-31 21:48:02
【问题描述】:
为了追踪内存泄漏,我一直在使用 Visual Studio 和 SOS.dll 来提供对象堆的转储,并查看什么是 GCRooting 特定对象。
我开始使用 AutoIt 来自动化这个过程来控制我的鼠标和键盘。这是我的脚本第一部分的近似值:
在 Visual Studio 中,按 F5 开始执行
让程序完全加载
切换到 Visual Studio 并中断执行将焦点切换到即时窗口
加载 SOS.dll
致电!dumpheap -stat
将转储结果复制到剪贴板
粘贴到记事本中,另存为dump1.txt恢复执行
多次执行泄漏操作
切换到 Visual Studio 并中断执行将焦点切换到即时窗口
清除输出
致电!dumpheap -stat
将转储结果复制到剪贴板
粘贴到记事本中,另存为dump2.txt运行一个 Python 脚本来比较两个转储并定位泄漏的对象
不过,我对我目前的方法有一些顾虑。我不仅依赖于 Visual Studio 的安装,而且在脚本运行时,我无法使用鼠标或键盘而不会使自动化顺序混乱。
有没有办法在 C# 程序而不是 Visual Studio 中使用 SOS.dll?理想情况下,此解决方案将附加到指定进程并将!dumpheap -stat 的结果输出到文本文件,而无需自动化 Visual Studio。
【问题讨论】:
-
不,sos.dll 是一个调试器扩展。
标签: c# .net debugging memory-leaks sos