下载安装工具
http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx
编写问题程序
using System;
using System.Collections.Generic;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
private readonly List<Byte[]> _list = new List<byte[]>();
void CostMemory()
{
for (var i = 0; i < 10; i++)
{
_list.Add(new byte[1024 * 1024 * 10]);
}
}
void CostCpu()
{
new Thread(() =>
{
while (true)
{
Console.WriteLine(_list.Count);
}
}).Start();
}
static void Main()
{
var o = new Program();
o.CostMemory();
o.CostCpu();
Console.ReadKey(true);
}
}
}
执行程序并生成.dump文件
可使用操作系统的任务管理器,或adplus(adplus -hang -pn <进程名> -o <输出文件路径>)等工具,当然也可以直接使用WinDbg(使用invasive方式挂载进程后再使用.dump -m <输出文件路径>)
使用WinDbg进行分析
配置WinDbg
打开WinDbg,配置各路径
- Symbol File Path(.pdb文件目录路径)
C:\Users\Administrator\Desktop\ConsoleApplication1t;SRV*C:\symbolscache*http://msdl.microsoft.com/download/symbols
- Source File Path(源代码文件目录路径)
C:\Users\Administrator\Desktop\ConsoleApplication1
- Image File Path(可执行文件目录路径)
C:\Users\Administrator\Desktop\ConsoleApplication1
打开.dump文件
点击菜单File/Open Crash Dump
载入 SOS.dll扩展命令模块
执行命令&#x