2

我使用收集用户模式转储中描述的默认参数生成了一个小型转储

转储是在系统通过right CTRL++挂起时生成的,如以下注册键中所设置SCROLL LOCKSCROLL 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

我该如何解决这个错误?

什么是“单处理器内核分类转储”?如果我用谷歌搜索,我会得到 3 或 4 个结果……不多了,也许微软的人可以在这里提供很大的帮助 :-)。

CustomDumpFlags我必须设置一些特定的值吗?请参阅MINIDUMP_TYPE 枚举

我知道我的系统是多处理器的,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
4

1 回答 1

3

单处理器内核转储或内核分类转储是一项功能

您可以在其中收集用户模式进程的内核模式堆栈跟踪

在未使用 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 won't work

它不是完整的内核内存转储,也可能没有关于任何其他处理器堆栈的信息

run !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>                                      
于 2020-05-10T20:40:26.847 回答