Windows内核调试:windbg双机实机联调总结

术语定义

主机端(Host):Debugger,用于控制调试的主控端。

目标端(Target):Debuggee,被控端、被调试端。

 

调试方式

在微软MSDN官网上,有详细记载着内核双机调试的所有方案:

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-kernel-mode-debugging-in-windbg--cdb--or-ntsd

  Host Target
Windows 7 1 4
Windows 8.1 2 5
Windows 10 3 6

 

 

 

 

 

Windows的内核双机调试,有以下几种方式:

  • USB 3.0
  • USB 2.0
  • 以太网Ethernet
  • 串口COM
  • 1394

目标端

模拟转换口

无论是哪种方式调试,目标端必须为原生主板支持的接口,不可用诸如USB转串口等转换口去模拟以上任意接口(例如用USB 2.0转以太网接口作为NET的调试方法——不可取)。

以太网口

对于以太网口调试,必须为原生以太网口,并且原生以太网口还分厂商、型号以及是Windows 8.1还是Windows 10,并非所有都支持内核调试。具体以微软公布的列表为准。基本上常用厂商常用的型号都支持。

另外,微软官网说的含含糊糊,实际上以目标端的以太网口为内核调试基础仅在Windows 8.1以及以后系统才支持。

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/supported-ethernet-nics-for-network-kernel-debugging-in-windows-8-1

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/supported-ethernet-nics-for-network-kernel-debugging-in-windows-10

主控端

对于主控端,部分可以用转换口代替:

USB 2.0 / USB 3.0转以太网口:◯

USB 2.0 转 USB 3.0:不存在这样的转换

本人也没有试验完所有,猜测太老的是不行的。X转串口、X转1394口应该可行(参考自《Windows内核设计思想》)。

部分老旧的USB 3.0接口也不支持,微软官网上没有详细描述,但我实测得来确实有部分机器是支持USB 3.0,但是却不能作为主控端(Debugger)。USB 3.0的调试需要满足一些基本条件(例如需要满足目标端 USB 3.0口支持调试),微软官网以及其他博客有详细描述,这里不再赘述。

Host + Target USB 3.0 USB 2.0 COM NET 1394
1+4 X X
1+5 X X
1+6 X X
2+4
2+5
2+6
3+4
3+5
3+6

 

 

 

 

 

 

 

 

 

 

USB 2.0

生产USB 2.0调试线的厂商五年前有一家,目前已经倒闭。据我搜索得知,网上已经没有这类线贩售。而且那家厂商销售的USB 2.0调试线也不便宜。

如果实在有需要,手工党大佬们可以尝试自己焊接一条,网上可以找到如何焊接这样支持调试的USB 2.0线缆。

 

推荐

VM

本文没有介绍到,虚拟机调试作为性能优越的台式机上,单机模拟双机内核调试确实有着非常高的优势。

节省一台机器的成本,支持虚拟串口跟以太网口调试(注意系统限制)。

虚拟机串口调试的资料也很多(暂时没有发现虚拟出USB 3.0进行内核调试)。

不过串口做不到热插拔,不过基本上也不会遇到这种操作。

USB 3.0

特别是目标端机器在初始化USB 3.0内核调试上非常快,比以太网口调试初始化要快得多。

调试开启后无论是软件还是硬件断开连接后再次插入仍旧可以继续调试。

以太网

作为最广泛存在的以太网口,无论是新老机器、台式机笔记本,都存在的接口。但是在系统启动初始化阶段比较慢(我的老笔记本关闭调试启动系统至进入桌面35秒,开启调试则需要8分钟左右)。不过一旦调试初始化成功后,速度也是飞快。

以太网口调试,主控端必须插着以太网线缆进行调试。WIFI之类的是不可行的。但是可以另一端可以插入到路由器,主控端可以通过桥接的其他路由器接出来进行调试。按照道理,主控端应该也可以通过WIFI与插着以太网线缆的目标端进行内核调试,但是这个没有操作过。非常灵活。

调试开启后无论是软件还是硬件断开连接后再次插入仍旧可以继续调试。

你可能感兴趣的:(Windows内核驱动)