我正在尝试通过网络进行 WinDbg 调试,但在我闯入调试器(调试->中断)后它总是失去连接,然后尝试再次启动它(调试->执行)。但是,如果我从不闯入调试器,看起来连接在“N”时间段内是稳定的。当我在此宽限期内使用目标系统时,我什至可以在 WinDbg 中看到调试打印语句。此外,在调试中断时连接似乎很好,因为我可以从目标系统收集信息。我使用“!ustr srv!SrvComputerName”来获取目标计算机名称,它会返回正确的名称。任何帮助将非常感激。
设置系统:我按照MSDN 网站上的说明设置目标和主机系统。
调试:以下是我解决此问题的尝试。
- 在网络适配器上禁用流控制并使用半双工模式。我在阅读这篇文章后尝试了这个:WinDbg, host machine lost network if test machine is on the same switch
- 购买新的网络适配器。根据这个网页,我的网络适配器应该支持网络内核调试。然而,进一步的调查显示,供应商有不更新其设备 ID 的坏习惯,因此我决定通过从不同供应商处购买新适配器来排除这种可能性。
- 更改网络端口。我已经尝试了很多不同的网络端口(49152-65535),以防其中一个被用于不同的目的。
- 拔下以太网电缆,然后将其重新插入。一旦连接丢失,我尝试了这个,希望它会重新建立连接。
- 重新启动目标系统。与#4 相同的原因。
- 更改 PCIe 端口。我的选择已经不多了。
- 将主机系统移动到不同的网络交换机。没变。
观察:
- Wireshark显示目标系统一启动就向宿主系统发送UPD包,但是宿主系统直到WinDbg启动后才响应。更有趣的是,即使在目标系统变得无响应之后,目标系统也会继续向主机发送 UPD 包。不幸的是,我不了解 UPD 包数据。
- 如果重新启动,WinDbg 可以始终如一地重新建立与目标系统的连接。目标系统似乎陷入调试中断。
系统信息:主机系统正在运行 Windows 8.1 Pro。目标系统正在运行 Windows 8.1 Enterprise 评估版(8GB RAM)。
WinDbg 打印出来:
Microsoft (R) Windows Debugger Version 6.3.9600.17237 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
Using NET for debugging
Opened WinSock 2.0
Waiting to reconnect...
Connected to target **.**.*.*** on port ***** on local IP **.**.*.***
Connected to Windows 8 9600 x64 target at (Fri Mar 27 18:58:06.217 2015 (UTC - 7:00)), ptr64 TRUE
Kernel Debugger connection established.
************* Symbol Path validation summary **************
Response Time (ms) Location
Deferred srv*C:\Symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is: srv*C:\Symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
Windows 8 Kernel Version 9600 MP (4 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 9600.17031.amd64fre.winblue_gdr.140221-1952
Machine Name:
Kernel base = 0xfffff801`00e70000 PsLoadedModuleList = 0xfffff801`0113a2d0
Debug session time: Fri Mar 27 18:58:06.918 2015 (UTC - 7:00)
System Uptime: 0 days 0:47:15.869
Break instruction exception - code 80000003 (first chance)
*******************************************************************************
* *
* You are seeing this message because you pressed either *
* CTRL+C (if you run console kernel debugger) or, *
* CTRL+BREAK (if you run GUI kernel debugger), *
* on your debugger machine's keyboard. *
* *
* THIS IS NOT A BUG OR A SYSTEM CRASH *
* *
* If you did not intend to break into the debugger, press the "g" key, then *
* press the "Enter" key now. This message might immediately reappear. If it *
* does, press "g" and "Enter" again. *
* *
*******************************************************************************
nt!DbgBreakPointWithStatus:
fffff801`00fcab90 cc int 3
0: kd> g
... Retry sending the same data packet for 64 times.
The transport connection between host kernel debugger and target Windows seems lost.
please try resync with target, recycle the host debugger, or reboot the target Windows.
... Retry sending the same data packet for 128 times.
... Retry sending the same data packet for 192 times.
此时WinDbg不再响应,继续发送数据包。目标系统也没有响应。