WRK有介绍编译和调试方法,不再赘述。WRK编译并不比普通工程更复杂,反而更简单。
编译大总管,根据WRK makefile做编译,调用cl.exe, lib.exe和link.exe完成最终内核生成。
VC++爱好者再熟悉不过了...

注: nmake -nologo amd64= 编译输出
> 不需要,pdb是给主机debugger使用。
VMware默认会把打印机作为第一个串行端口, 新建串行端口是串行端口2. 此时要注意虚拟机启动参数pipe的设定要对应。

如上,XP 64bit虚拟机后来移除了打印机, 虽然内核调试还显示串行端口2,实际对应串行端口1.
虚拟机boot.ini参数/port=com1就是正确的。(如果打印机没移除,就需要改为/prot=com2)

我的Win10虚拟机因为存在打印机串口,bcdedit设定debugport就是2.

XP系统默认启动参数带有/fastdetect, 当开启内核调试时,一定要关闭它,否则WinDbg没有机会连接到内核。
fastdetect本意是内核启动不检查串行口或并行口。
当开启了debug调试模式,内核变量KdDebuggerEnabled就变成TRUE. (详情参考: KD_DEBUGGER_ENABLED)

注: 启动参数/nodebug会覆盖/debug.

请确保虚拟机内核wrkamd64.exe与.pdb文件相符。
windbg.exe -b -k com:pipe,port=\\.\pipe\com1,baud=115200,reconnect -y E:\other_symbols;SRV*E:\xp_symbols*http://msdl.microsoft.com/download/symbols
注:symbol路径请自定义.
因SI工具预处理和C/C++预处理有差别,毕竟SI不是做预处理器,会出现误把一些macro当做函数。例如,如下DECLSPEC_ALIGN, SI是不认识的。

SI提供的解决方法是写Token Macro.

注: SI工具根目录c.tom增加DECLSPEC_ALIGN(x)为空。
Refer: Preprocessor Token Macros (sourceinsight.com)