суббота, 24 июля 2010 г.

Remote debugging with MS Visual Studio

При разработке системных утилит, вносящих изменения в работу ОС, отладка похожа на проведении хирургической операции на своем теле: в случае ошибки все может закончиться. Да и некоторые программы вообще невозможно отладить на ПК, где они работают, например DirectX приложения с эксклюзивным режимом.

Что нам расскажет Microsoft про удаленную отладку? Читаем: http://msdn.microsoft.com/ru-ru/library/bt727f1t%28v=VS.90%29.aspx

Устанавливать среду разработки, или отдельные ее части, на тестовый ПК необязательно. Достаточно скопировать Remote Debugger Monitor с основного компьютера (он обычно лежит в директории \Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger, если он установлен).
На тестовом компьютере запускаем монитор – файл msvsmon.exe из директории x86.

После этого нужно настроить тип транспорта (Tools - Options). По умолчанию для связи используются именованные пайпы. На практике мне удалось соединиться через них только в доменной сети. Поэтому если вы являетесь счастливым пользователем контроллера домена, то, немного поплясав с бубном, возможно у вас все получится. Положительный момент соединения через пайпы – Windows-авторизация для доступа к удаленной отладке.
Я же пошел более простым путем, настроив соединение через TCP. К сожалению, с авторизацией в этом случае все совсем плохо: нет даже примитивной парольной защиты. Ну да ладно, мы же в отладке.

Проверяем, что все настроено правильно. На машине с Visual Studio пытаемся подключиться к удаленному процессу (Tools – Attach to process).
Если все выполнено правильно, то появится список удаленных процессов:

Теперь уже можно отлаживаться: копируем на удаленную машину собранное приложение (с отладочной информацией, естественно), запускаем его там и отсюда подключаемся к процессу. Но это не очень удобно.
Хорошо бы автоматизировать копирование и запуск.
Расшариваем директорию на тестовой машине, например C:\Debug. Следует только не забыть разрешить запись для всех пользователей и включить гостевую учетную запись из «Локальной политики безопасности», если она отключена (Пуск – Панель управления – Администрирование – Локальная политика безопасности):

У меня получился адрес \\192.168.92.1\Debug, путь на тестовой машине C:\Debug
Проверяем доступность директории: переходим по адресу \\192.168.92.1\Debug и закидываем туда файл. Если все получилось, то директория настроена правильно.

Копировать можно двумя способами:
1. Настроить Ouput Directory проекта на \\192.168.92.1\Debug
2. Настроить через Post Build Events копирование из командной строки

Рекомендую второй способ, поскольку если у вас в проекте используются сторонние DLL или другие бинарники, то копировать их все равно придется Post Build-ом.

Заходим в свойства проекта и настраиваем копирование:

и параметры запуска:

Вот теперь все как надо. Делаем Rebuild и отлаживаемся удаленно :)

3 комментария:

  1. Спасибо за статью помогло! :)
    На ноутбуке вылезла бага, а на нем с дебагером особо не разгуляешься. Вот сижу с обычной машины отлаживаю прогу на ноуте.

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Спасибо, отличный пост. Только есть вопрос. Пытаюсь отлаживать консольное приложение (просто печать имени компьютера). Удаленная отладка работает (переменные показывает правильно), но хочется видеть у себя на экране содержимое консольного окна удаленно отлаживаемой программы.
    На удаленном компе при отладке появляется окно, в которое выводятся правильные данные. Все правильно. Но нужно видеть содержимое этого окна на компе, с которого веду отладку.
    Можно, конечно, поставить какой-нибудь TeamViewer, но может быть, есть встроенное в VS решение?

    ОтветитьУдалить