WinDbg теряет отладку соединения по сети, и целевая машина зависает

Я пытаюсь заставить работать отладку WinDbg по сети, но она всегда теряет соединения после того, как я вхожу в отладчик (Debug->Break), а затем пытаюсь запустить его снова (Debug->Go). Однако, если я никогда не взламываю отладчик, похоже, что соединение стабильно в течение периода времени N. Я даже могу видеть отладочные операторы печати в WinDbg, поскольку я использую целевую систему в течение этого льготного периода. Кроме того, похоже, что соединение в перерыве отладки хорошее, потому что я могу собирать информацию из целевой системы. Я использую «!ustr srv!SrvComputerName», чтобы получить имя целевого компьютера, и оно возвращает правильное имя. Любая помощь приветствуется.

Настройка систем. Я следовал инструкциям веб-сайт MSDN, чтобы настроить целевую и хост-системы.

Отладка. Ниже приведены мои попытки решить эту проблему.

  1. Отключение управления потоком и использование полудуплексного режима на сетевом адаптере. Я попробовал это после прочтения этого сообщения: WinDbg, хост-компьютер теряет сеть, если тестовая машина находится на том же коммутаторе
  2. Покупка новых сетевых адаптеров. Согласно этой веб-странице мой сетевой адаптер должен поддерживать отладку сетевого ядра. Однако дальнейшее исследование показало, что поставщики имеют плохую привычку не обновлять идентификаторы своих устройств, поэтому я решил исключить эту возможность, купив новые адаптеры у разных поставщиков.
  3. Изменение сетевого порта. Я перепробовал множество разных сетевых портов (49152-65535) на тот случай, если один из них используется для другой цели.
  4. Отсоедините кабель Ethernet, а затем снова подключите. Как только соединение было потеряно, я попробовал это, надеясь, что оно восстановит соединение.
  5. Перезагрузка целевой системы. Та же причина, что и № 4.
  6. Изменение портов PCIe. У меня заканчиваются варианты.
  7. Хост-система перемещена на другой сетевой коммутатор. Без изменений.

Наблюдение:

  1. Wireshark показывает, что целевая система отправляет пакеты UPD на хост-систему, как только система загружается, но хост-система не отвечает до тех пор, пока не будет запущен WinDbg. Что еще более интересно, целевая система продолжает отправлять пакеты UPD на хост даже после того, как целевая система перестает отвечать на запросы. К сожалению, я не понимаю данные пакетов UPD.
  2. WinDbg может постоянно восстанавливать соединение с целевой системой при перезапуске. Целевая система, похоже, застряла в режиме отладки.

Информация о системе. Хост-система работает под управлением Windows 8.1 Pro. Целевая система работает под управлением Windows 8.1 Enterprise Evaluation (8 ГБ ОЗУ).

Распечатка 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 больше не отвечает и продолжает отправлять пакеты данных. Целевая система также не отвечает.


person tchau.dev    schedule 28.03.2015    source источник
comment
Не публикуйте решения в вопросе. Вы можете опубликовать ответ на свой вопрос, если хотите.   -  person nobody    schedule 01.04.2015
comment
Это протокол?   -  person tchau.dev    schedule 01.04.2015
comment
Да, это. stackoverflow.com/help/self-answer   -  person nobody    schedule 01.04.2015


Ответы (5)


Я, наконец, решил эту проблему, переключив хост-систему. Вначале я думал, что проблема в целевой системе, потому что MSDN устанавливает требование отладки NIC только в целевой системе. Похоже, что могут быть требования и к хост-системе.

Новая хост-система: Рабочий стол (идентично целевой системе)

  • ОС: Windows 8.1 Enterprise Evaluation x64
  • Сетевая карта: VEN_10EC&DEV_8168

Предыдущая хост-система: ноутбук

  • ОС: Windows 8.1 Pro x64
  • Сетевая карта: VEN_8086&DEV_1502

ПРИМЕЧАНИЕ. Я действительно не знаю основной причины. Оба сетевых адаптера находятся в поддерживаемых сетевых адаптерах Ethernet., я использовал ту же версию WinDbg, что и WDK, и все системы находятся на одном коммутаторе.

person tchau.dev    schedule 01.04.2015
comment
Точно такой же опыт для меня. Моя цель — Windows 10 x64 с сетевой картой: VEN_8086&DEV_1502. Когда я использовал ноутбук Dell в качестве хоста с VEN_10EC и DEV_8168, мое соединение не работало, как описано в OP. Когда я использовал другой компьютер в качестве хоста с VEN_8086&DEV_100F, соединение работало нормально. Никаких изменений в цели не требуется (кроме изменения настроек хоста, конечно). - person Matt M; 05.05.2017

Я нашел более простое решение, которое сработало для меня в VMware. Проблема в VMware - время ожидания NAT-соединения составляет 30 секунд. Это значение настраивается. Заходим в редактирование -> редактор виртуальной сети -> изменить настройки (подсказка uac) -> выбрать NAT в списке -> настройки NAT -> тайм-аут UDP. Максимальное значение — 32767, по умолчанию (для меня) — 30 секунд. Это полностью решило мою проблему.

person shaked cohen    schedule 14.03.2019

У меня была аналогичная проблема, и я решил ее, используя адаптер USB-Ethernet на хост-компьютере вместо встроенной сетевой карты.

person Girish BR    schedule 09.02.2016
comment
Не могли бы вы поделиться конкретным поставщиком и продуктом? - person tchau.dev; 09.02.2016

Я также столкнулся с этой проблемой и обнаружил, что, когда я пытаюсь принудительно выключить ОС VMWare, соединение Windbg восстанавливается до того, как ОС VMWare фактически закрывается. После нескольких попыток я нашел странное решение:

Когда соединение Windbg между хостом и гостем VMWare потеряно, попробуйте нажать «Завершить работу VMWare Guest», но НЕ подтверждайте. И вы можете обнаружить, что соединение с Windbg восстанавливается! Затем отмените выключение.

Очень странно, похоже VMWare сама заблокировала отладку сети, соединение потеряно. Но, по крайней мере, это обходной путь, который стоит попробовать.

Еще один обходной путь, который я пробовал, который иногда работает, — это убить Windbg в диспетчере задач, повторно запустить Windbg и снова подключиться к гостевой системе VMWare. И, возможно, потребуется подождать от нескольких секунд до нескольких минут, пока он снова не подключится.

Кстати, моя сетевая карта - Intel Ethernet Connection I218-V.

person Ivellios    schedule 15.07.2016

Проблема в хосте. Если вы не хотите менять свой хост и продолжать на нем отладку, вы можете попробовать использовать последовательный порт. Это дает лучшую производительность. Взгляните на следующую ссылку для настройки отладки виртуальной машины через com-порт:

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/attaching-to-a-virtual-machine--kernel-mode-?redirectedfrom=MSDN

person Avinash Kumar Ranjan    schedule 04.05.2020