Маленький, но гордый FireWire контроллер
Nov 17, 2006 · CommentsОтладка
После окончательного перехода на Vista на моей основной машине отказался запускаться ядерный отладчик. Вместо того, чтобы терпеливо дожидаться соединения, он стал выдавать вот такое сообщение:
Несколько раз перезапустив отладчик под разными аккаунтами и с неизменным результатом, убедился, что дело явно не в LUA (Least-privilege User Account). Заглянув в список устройств, обратил внимание на то, что загрузка драйвера FireWire контроллера завершается кодом ошибки 31.
Кнопка “Check for solutions…” не помогла прояснить ситуацию. При нажатии на неё было видно, что отчет о проблеме был послан, но, тем не менее, никакого ответа на него не последовало. Попытки переустановить, обновить или найти вручную обновленный драйвер ни к чему не привели. Даже Google молчал как партизан.
Наконец, покопавшись в базе данных багов системы, нашёл ответ. Как оказалось всё дело в настройках ядерного отладчика. Драйвер FireWire контроллера полагает, что если в системе активизирован ядерный отладчик, то она не может использоваться в качестве Host-а для отладки другой OS. Соответственно, достаточно было выключить отладчик ядра:
bcdedit /debug off
… и после перезагрузки отладчик заработал. Изначальная посылка, что виновата Vista оказалась не верна. Я просто никогда ранее не включал отладчик ядра на этой машине. Разбираясь почему же всё работает именно так, а не иначе, написал письмо одному из разработчиков windbg и получил вот такой ответ:
The implementation for 1394 debug is in a separate component then the core 1394 stack. They cannot coexist, so the solution was for the core 1394 stack to fail loading if it detects that the controller is used for 1394 debug.
Т.е. отладчик используется собственный драйвер FireWire контроллера, а включение отладчика помимо всего прочего выбирает какой из двух драйверов использовать: отладочный или стандартный.