Удаленный отладчик — очень мощный инструмент, который позволяет отлаживать приложения, запущенные на удаленном хосте. При этом доступны все те же возможности, что и при локальной отладке — пошаговое исполнение, установка текущей точки исполнения (Set Next Statement), точки прерывания, просмотр и изменение переменных, исполнение кода. Удаленная отладка совершенно незаменима, когда нужно понять почему приложение работает у тестера не так как у разработчика ;), или когда отлаживаемое приложение может привести к нестабильности системы — хуки, расширения WinShell и т.п.
К сожалению, настройка удаленной отладки — нетривиальная задача с большим количеством граблей, которые заботливо разложены разработчиками Visual Studio. В этой статье я расскажу по шагам, как эта задача решается. Все нижесказанное относится к версиям Visual Studio 2005 и выше.
1. Оба хоста — отладчик и отлаживаемый — должны быть соединены напрямую по TCP/IP (другие сетевые протоколы не подходят, соединение через прокси или NAT также не подходит)
2. На отлаживаемом хосте нужно установить специальное приложение — Remote Debug Monitor. Дистрибутив этого приложения называется rdbgsetup.exe и находится на установочном диске студии в подпапке Remote Debugger. Во время установки будет предложен выбор режима — как обычное приложение или как системная служба. В первом случае, debug monitor нужно будет запускать вручную перед сеансом отладки. Второй вариант удобнее — настроил один раз и забыл. Изменить режим можно также позднее — с помощью утилиты конфигурации, которая доступна через Start Menu. При установке в режиме системной службы параметры нужно оставить по умолчанию — имя пользователя LocalSystem и пустой пароль.
3. Настройка фаервола. Какие порты открывать — подробно описано здесь: msdn.microsoft.com/en-us/library/bb385683.aspx
Впрочем, если отлаживаемый хост недоступен для доступа извне — проще отключить на нем фаервол, а на хосте отладчика разрешить весь траффик для отлаживаемого хоста в обе стороны. Это сбережет массу времени и сил.
4. Далее начинается самая сложная тема — настройка аутентификации. Идеальный вариант — когда оба хоста находятся в пределах одного домена. В этом случае никакие дополнительный действия не понадобятся. По крайней мере, теоретически ;)
В других случаях всё будет намного сложнее. Нужно выполнить следующиедвижения с бубном действия:
а) На отлаживаемом хосте создать пользователя-администратора с тем же именем и паролем, под которыми работает программист
б) На хосте программиста нужно также создать пользователя (power user) — с тем именем и паролем, под которыми запускается отлаживаемое приложение на удаленном хосте.
Пароль должен быть непустой у обоих пользователей. Без этого — работать не будет!
5. Запускаем на подготовленном к отладке хосте приложение, которое мы хотим отладить. Внимание! Кроме бинарных файлов, нужно скопировать на отлаживаемый хост соответствующие им файлы с расширением PDB (они содержат информацию, как соотносятся исходный и машинный код приложения. Без них отладка по исходному коду будет недоступна). Эти файлы нужно поместить в те же каталоги, что соответствующие им бинарники.
6. Запускаем Visual Studio, открываем нужный проект. Удостоверьтесь, что версии бинарников и PDB на локальном и удаленном хосте совпадают. Ни в коем случае не запускайте Build или Run!
Заходите в меню Debug/Attach to Process, выбирайте Default Transport, в поле под ним вводите имя отлаживаемого хоста.
Если debug monitor работает не в режиме сервиса, к имени хоста нужно добавить имя пользователя, в таком виде: user-name@host-name. Нажимайте Refresh. Если все настроено правильно — в окне появится список процессов на удаленном хосте, к которым можно подключиться. Выбирайте процесс, какие виды кода нужно отлаживать (параметр Attach To), нажимайте Attach — далее всё будет работать как при локальной отладке.
Если вы получаете сообщение «WARNING: Unable to determine if the Windows Firewall is blocking remote debugging. There are no more endpoints available from the endpoint mapper.» — игнорируйте его.
Если вы получаете сообщение «Unable to connect to the Microsoft Visual Studio Remote Debugging Monitor named 'vpc'. The Visual Studio Remote Debugger on the target computer cannot connect back to this computer. Kerberos authentication failed. Please see Help for assistance.» — это значит, что debug monitor не может выполнить соединение с хостом-отладчиком (см. пункт 4б). Удостоверьтесь, что этот пользователь действительно может залогиниться на хост разработчика с удаленного хоста.
Весь этот процесс настройки сложен и неприятен, но у него есть одно достоинство — его достаточно выполнить один раз ;) После этого удаленная отладка становится легким и приятным занятием, и во многих случаях сберегает массу времени.
К сожалению, настройка удаленной отладки — нетривиальная задача с большим количеством граблей, которые заботливо разложены разработчиками Visual Studio. В этой статье я расскажу по шагам, как эта задача решается. Все нижесказанное относится к версиям Visual Studio 2005 и выше.
1. Оба хоста — отладчик и отлаживаемый — должны быть соединены напрямую по TCP/IP (другие сетевые протоколы не подходят, соединение через прокси или NAT также не подходит)
2. На отлаживаемом хосте нужно установить специальное приложение — Remote Debug Monitor. Дистрибутив этого приложения называется rdbgsetup.exe и находится на установочном диске студии в подпапке Remote Debugger. Во время установки будет предложен выбор режима — как обычное приложение или как системная служба. В первом случае, debug monitor нужно будет запускать вручную перед сеансом отладки. Второй вариант удобнее — настроил один раз и забыл. Изменить режим можно также позднее — с помощью утилиты конфигурации, которая доступна через Start Menu. При установке в режиме системной службы параметры нужно оставить по умолчанию — имя пользователя LocalSystem и пустой пароль.
3. Настройка фаервола. Какие порты открывать — подробно описано здесь: msdn.microsoft.com/en-us/library/bb385683.aspx
Впрочем, если отлаживаемый хост недоступен для доступа извне — проще отключить на нем фаервол, а на хосте отладчика разрешить весь траффик для отлаживаемого хоста в обе стороны. Это сбережет массу времени и сил.
4. Далее начинается самая сложная тема — настройка аутентификации. Идеальный вариант — когда оба хоста находятся в пределах одного домена. В этом случае никакие дополнительный действия не понадобятся. По крайней мере, теоретически ;)
В других случаях всё будет намного сложнее. Нужно выполнить следующие
а) На отлаживаемом хосте создать пользователя-администратора с тем же именем и паролем, под которыми работает программист
б) На хосте программиста нужно также создать пользователя (power user) — с тем именем и паролем, под которыми запускается отлаживаемое приложение на удаленном хосте.
Пароль должен быть непустой у обоих пользователей. Без этого — работать не будет!
5. Запускаем на подготовленном к отладке хосте приложение, которое мы хотим отладить. Внимание! Кроме бинарных файлов, нужно скопировать на отлаживаемый хост соответствующие им файлы с расширением PDB (они содержат информацию, как соотносятся исходный и машинный код приложения. Без них отладка по исходному коду будет недоступна). Эти файлы нужно поместить в те же каталоги, что соответствующие им бинарники.
6. Запускаем Visual Studio, открываем нужный проект. Удостоверьтесь, что версии бинарников и PDB на локальном и удаленном хосте совпадают. Ни в коем случае не запускайте Build или Run!
Заходите в меню Debug/Attach to Process, выбирайте Default Transport, в поле под ним вводите имя отлаживаемого хоста.
Если debug monitor работает не в режиме сервиса, к имени хоста нужно добавить имя пользователя, в таком виде: user-name@host-name. Нажимайте Refresh. Если все настроено правильно — в окне появится список процессов на удаленном хосте, к которым можно подключиться. Выбирайте процесс, какие виды кода нужно отлаживать (параметр Attach To), нажимайте Attach — далее всё будет работать как при локальной отладке.
Если вы получаете сообщение «WARNING: Unable to determine if the Windows Firewall is blocking remote debugging. There are no more endpoints available from the endpoint mapper.» — игнорируйте его.
Если вы получаете сообщение «Unable to connect to the Microsoft Visual Studio Remote Debugging Monitor named 'vpc'. The Visual Studio Remote Debugger on the target computer cannot connect back to this computer. Kerberos authentication failed. Please see Help for assistance.» — это значит, что debug monitor не может выполнить соединение с хостом-отладчиком (см. пункт 4б). Удостоверьтесь, что этот пользователь действительно может залогиниться на хост разработчика с удаленного хоста.
Весь этот процесс настройки сложен и неприятен, но у него есть одно достоинство — его достаточно выполнить один раз ;) После этого удаленная отладка становится легким и приятным занятием, и во многих случаях сберегает массу времени.