抓内核态dump的一些方法
-
为什么要抓内核态dump(kernel dump)
其实一直以来,测试都有反映我们的进程,有时候退不出,表现为:任务管理器能看到进程,但杀不掉;或者任务管理器看不到,但process explorer能看到,还是杀不掉。 这是因为,进程退出逻辑已到达操作系统内核,但操作系统内核逻辑出了问题,卡在内核了,所以进程对象没有完全释放。 -
怎么看内核callstack
使用local kernel debug,管理员命令行运行"bcdedit /debug on",然后重启电脑,用windbg->kernel debugging->local启动local kernel debug(简称lkd)。 特别注意,因为开启lkd需要重启电脑,所以建议提前把lkd设置好,因为程序出问题现场非常宝贵,重启之后很可能难重现问题。 -
没有启动lkd,怎么生成kernel dump
https://technet.microsoft.com/en-us/sysinternals/notmyfault.aspx NotMyFault工具可强制使windows进入崩溃,如果之前虚拟内存大小及位置不符合,需要设置完之后重启电脑:
a.系统->高级系统设置->高级->性能->设置->高级->虚拟内存 window所在安装盘设置大小必须大于物理内存
b.系统->高级系统设置->高级->启动和故障恢复->设置->系统失败->写入调试信息->完全内核转储
如果b项没有"完全内核转储",修改注册表
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl]
“CrashDumpEnabled”=dword:0000