现在我准备创建一个简单的 winform 程序,在 button 事件中故意让主线程sleep造成程序假姿配誉死,参考代码如下:
public partial class Form1 : Form { public Form1() { InitializeComponent()} private void button1_Click(object sender, EventArgs e) { Thread.Sleep(1000 * 10)MessageBox.Show("clicked me!")} }
卖搭
接下来启动 cmd 窗口,输入:
C:\Windows\system32>procdump -ma -h -w WindowsFormsApp1.exe E:\net5\hungwindow.dmp ProcDump v10.0 - Sysinternals process dump utility Copyright (C) 2009-2020 Mark Russinovich and Andrew Richards Sysinternals - www.sysinternals.com Waiting for process named WindowsFormsApp1.exe...
启迹段动程序后点击 button 让 winform 假死,可以看到 procdump 在 5s 之后自动输出了dump。
1. 进到 Control Panel -->System -->Advanced -->Startup/Recovery,请选complete memory dump并选中System Failure下的所有选项。请记住memory.dmp文件存放的位置,默认情况下此文件存放在%systemroot%下。请确认memory.dmp文件的存放路径下有足够的空间,即剩余空间大于等于物理内存的大小。如果默认目录下没有足够的空间,请把路径指定到有足够空间的分区的根目录下。好冲2. 进到Control Panel -->System -->Advanced -->Performance Options -->Change。请确定pagefile是放在%systemroot%分区的。pagefile的大小需设置成比物理内存大,如,机器内存为1G,可以把pagefile文件的大小设成1100M。如果系统提示要重新启动服务器,请暂时不要重启。
3. 添加注册表键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters
Value Name: CrashOnCtrlScroll
Data Type: REG_DWORD
Value: 1
4. 重启计算机使设置生效。
5. 在问题再次发生时按住键盘右边的Ctrl键不放,再按两次ScrollLock键。如果设置正确,机器会立刻进入蓝屏,并开始将内存快照写入页面文件。您可以看到其完成进度。待其完成后,机器将会自动重启,并在重启后产生一个内存转储文没没件在 c:\windows\memory.dmp。
6. 对于某些笔记本没有枯袜纳右Ctrl键,可以通过导入附件的注册表文件来实现由左Ctrl *** 作产生Dump文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)