我有一个使用Collecting User-Mode Dumps中描述的默认参数生成的小型转储。
当系统通过以下寄存器键中的右CTRL + SCROLL LOCK + SCROLL LOCK挂起时,生成了转储:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\Parameters]
"CrashOnCtrlScroll"=dword:00000001
因此,WinDbg在命令0: kd> !analyze -v
之后显示给我的调用堆栈是从kbdhid
设备驱动程序执行的线程之一。
[当我尝试切换到其他处理器时,出现错误:
0: kd> ~1
Can't switch processors on a single processor kernel triage dump
我该如何解决此错误?
什么是“单处理器内核分类转储”?如果我使用Google搜索,我将获得3或4个结果...更多,也许来自Microsoft的人可以在这里提供很大的帮助:-)。
我必须设置CustomDumpFlags
的某些特定值吗?参见MINIDUMP_TYPE enumeration。
我知道我的系统是多处理器,并且WinDbg确认了它:
0: kd> ~8
8 is not a valid processor number
0: kd> ~7
Can't switch processors on a single processor kernel triage dump
[单处理器内核转储或内核分类转储是一项功能
您可以在其中收集用户模式进程的内核模式堆栈跟踪
在未使用vista +的iirc上的/ DEBUG引导的计算机上]
您也可以使用kdbgctrl收集此转储
D:\>tasklist | grep -i edge xxxxxxxxxxxxxxxxxxxxxx MicrosoftEdgeCP.exe 12588 Console 5 41,892 K MicrosoftEdgeCP.exe 9152 Console 5 1,49,064 K xxxxxxxxxxxxxx D:\>kdbgctrl -td 9152 edgy.dmp Dump created in edgy.dmp, 1048564 bytes D:\>file edgy.dmp edgy.dmp: MS Windows 64bit crash dump, 1018708 pages
运行
!process -1 1f
命令以获取当前进程的所有线程的堆栈此转储中仅一个进程内核内存可用!process 0 0无法工作
它不是完整的内核内存转储,并且可能也没有任何其他处理器堆栈的信息
运行!cpuid,此转储中将仅显示有关0处理器的信息
0: kd> !cpuid CP F/M/S Manufacturer MHz 0 6,142,9 GenuineIntel 2304 Unable to get information for processor 1 Unable to get information for processor 2 Unable to get information for processor 3 0: kd>
或irql
0: kd> !irql 0
Debugger saved IRQL for processor 0x0 -- 0 (LOW_LEVEL)
0: kd> !irql 1
Cannot get PRCB address from processor 0x1
0: kd> !irql 2
Cannot get PRCB address from processor 0x2
0: kd> !irql 3
Cannot get PRCB address from processor 0x3
0: kd>