Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Удаленная отладка приложений


Домашняя страница www.devdoc.ru

DevDoc - это новые статьи по программированию каждую неделю.

Заходи и читай!

Домашняя страница Письмо автору Архив рассылки Публикация статьи

Выпуск №16

Здравствуйте уважаемые подписчики, сегодня в номере:

От автора

В предыдущий выпуск было ошибочно включено неверное решение задачи. Информация на сайте обновлена. Прошу прощения за досадную ошибку.


Постоянная ссылка на статью (с картинками): http://www.devdoc.ru/index.php/content/view/remote_debug.htm

Автор: Кудинов Александр
Последняя модификация: 2007-04-09 21:00:19

Удаленная отладка приложений

Введение

В повседневной жизни хватает обычных способов отладки. Возможности удаленной отладки можно использовать в разных случаях:

  • При разработке распределенных систем, когда часть компонентов не может работать на компьютере разработчика. В этом случае удаленную отладку можно считать рядовым инструментом.
  • Для анализа ошибок, которые нельзя воспроизвести на компьютере разработчика.
  • Тестирование и отладка кода под различными операционными системами. Без использования удаленной отладки эти действия вызывают массу неудобств. Гораздо проще иметь несколько компьютеров (или виртуальных машин) с разными ОС, а отладку вести из одной и той же среды.
  • Отладка драйверов. Это тема отдельной статьи. Написание и доводка драйверов имеет множество нюансов.

Это далеко не полный перечень возможных ситуаций. В данной статье мы будем рассматривать отладку C++ программ и возможности, которые предоставляет нам Microsoft Visual Studio.

При удаленной отладке используются два компьютера – на одном выполняется программа, а на другой отладчик. При этом отладчик может полностью контролировать ход выполнения программы.

Статья ориентирована на тех, кто никогда раньше не сталкивался с удаленной отладкой. Материал можно рассматривать как инструкцию по быстрому старту.

Доступные средства

Visual Studio .NET 2003 предоставляет два способа для удаленной отладки:

  1. С использованием Remote Debug Monitor’а
  2. Через Machine Debug Manager

Первый вариант может использоваться только для неуправляемого кода, а второй для всех типов проектов, включая .Net и T-SQL. Machine Debug Manager для своей работы использует DCOM. Это накладывает некоторые ограничения, связанные с безопасностью Windows.

Использование Remote Debug Monitor не требует длительных настроек и танцев с бубном вокруг системы безопасности. Мы будем рассматривать именно этот способ, тем более что он обеспечивает нас всем необходимым для отладки C++ приложений.

Настройка Remote Debug Monitor

Определимся с терминами:

Удаленный хост – это компьютер (или виртуальная машина) на которой запускается ваша программа, которую надо отладить.

Локальный хост – компьютер на котором запущен отладчик.

Remote Debug Monitor (RDM), входит в комплект поставки Visual Studio. Он устанавливается на удаленный хост. Далее с помощью MS VS с локального хоста можно к нему подключиться и выполнять любые операции по отладке неуправляемого кода.

На удаленный хост можно установить Visual Studio целиком для запуска RDM. Это не самый оптимальный вариант. Тем более что часто отладка производится в виртуальной машине. Гораздо проще скопировать на удаленный компьютер следующие файлы:

 
dbghelp.dll 
msvcmon.exe 
msvcp71.dll 
msvcr71.dll 
NatDbgDM.dll 
NatDbgEE.dll 
NatDbgTLLoc.dll 
NatDbgTLNet.dll 

Их можно положить в отдельную директорию. Если запустить из консоли:

msvcmon.exe /?

Можно увидеть список возможных параметров. Если вы не хотите заморачиваться с безопасностью Windows – можно создать командный файл со следующей строчкой:

 
msvcmon.exe -anyuser -tcpip -timeout -1 

Если запустить Remote Debug Monitor на удаленном компьютере с помощью такой команды – все отладчики смогут к нему подключаться.

В общем случае на удаленном компьютере можно отлаживать любой процесс. Чтобы отладка была продуктивной желательно отлаживать программы в Debug сборке. Это дает доступ к символьной информации и возможности просматривать исходный текст программы. Рассмотрим это на примере.

Каждый запускаемый файл (exe, dll) содержит путь к файлу с отладочными символами. Сложность состоит в том, что программа выполняется на одном компьютере, а символы нужны отладчику на другом. Как всегда решение очень простое:

  1. На удаленном компьютере устанавливается программа для отладки. Это может быть обычное копирование исполняемых файлов или полноценная установка. В данном случае это не имеет значения.
  2. На локальном компьютере должны присутствовать отладочные символы. Обратите внимание, что их надо располагать в той же папке, в которой они были при сборке приложения. Помните, что в бинарном файле записан полный путь к файлу? Если вы отлаживаете только что собранную версию – это условие выполняется автоматически. В противном случае – в директорию надо скопировать символы для нужной версии.

Итак, программа скомпилирована и запущена на удаленном компьютере. Remote Debug Monitor тоже установлен и запущен. Пора переходить к удаленной отладке.

Для этого на локальном компьютере достаточно запустить MS VS, и выбрать Tools->Debug Process. Откроется окно:

В качестве транспорта выбираем протокол TCP/IP и указываем IP адрес удаленного компьютера. Далее из списка процессов можно выбрать нашу программу и нажать Attach.

Все! Удаленная отладка к вашим услугам. Вы можете прервать выполнение программы, установить точки останова, просматривать значения переменных и т.п. Одним словом – вы работаете с программой на другом компьютере как с локальной.

Существует еще один способ запуска удаленной отладки. Можно в настройках проекта сразу указать, что надо запускать программу на другом компьютере:

Дальше можно запускать отладку как обычно: Debug->Start. Отладчик автоматически запустит программу на удаленном компьютере и подключится к процессу. Потом все как обычно. Надо только после сборки не забывать обновлять программу на удаленном хосте.

Совет. Если удаленная отладка это неотъемлемая часть рабочего процесса – можно настроить MS VS, чтобы сразу после компиляции помещались на удаленный компьютер.

Хочу сказать еще пару слов о быстродействии и требованиях к линиям связи. Удаленная отладка создает очень маленькое количество трафика (при работе через Tcp/ip), но очень требовательна к скорости отклика удаленной системы. Иными словами удаленно отлаживать через Интернет занятие очень скучное и утомительное. Можно ждать несколько секунд выполнения каждой вашей команды. Нетрудно представить, во что выливается пошаговая трассировка кода. На практике было замечено, что если ping до удаленной машины проходит менее чем за 50 мс, то работать худо-бедно можно. Большие задержки уже вызывают сильный дискомфорт.

Заключение

Удаленная отладка это мощный инструмент в хороших руках. Даже если второй компьютер стоит на соседнем столе – использование удаленной отладки в сочетании с RDP себя оправдывает. Программист экономит массу времени на беготню между рабочими местами.

При отладке под разными версиями ОС на виртуальной машине, альтернативы удаленной отладке просто нет.


Если вам нравиться эта рассылка рекомендуйте ее своим друзьям. Подписаться можно по адресу http://subscribe.ru/catalog/comp.soft.prog.devdoc

Copyright (C) Kudinov Alexander, 2006-2007

Перепечатка и использование материалов запрещена без писменного разрешения автора.


В избранное