четверг, 24 февраля 2011 г.

Удаленная отладка

Меня всегда поражали люди, которым недостаточно предъявить проблему, возникающую в процессе тестирования, в том же WinDBG/ntsd, даже достаточно детально разжеванную - начинаются какие-то малопонятные разговоры про неудобную среду, необходимость установки для полноценной отладки Visual Studio на целевую машину и так далее. Между тем, при наличии локальной сети проблема чаще всего решается элементарно...

В нашем распоряжении есть такое замечательное средство как удаленная отладка.
Посмотрев зависимости, например, для отладочного монитора от MSVC2003 (к сожалению, до сих пор наша основная платформа), можно создать легко перемещаемый на целевую машину отладочный комплект.
Состав следующий:
msvcmon.exe
msvcr71.dll
NatDbgDM.dll
NatDbgTLNet.dll
Можно дополнить это файлом run.bat такого вот содержания:
msvcmon -anyuser -tcpip -timeout -1
После копирования архива и запуска run.bat к целевой машине можно подсоединиться через TCP/IP и спокойно отлаживаться.
Для подключения достаточно открыть в интегрированной среде нажать Ctrl+Alt+P, выбрать IP-адрес/имя машины и тип подключения TCP/IP, после чего можно выбрать процесс и спокойно его отлаживать.
Почему именно TCP/IP? Такая конфигурация позволяет легко прорываться через правильно сконфигурированный firewall на стенд, просто подключаться к реальным машинам клиентов, предварительно, организовав туннель или VPN (были и такие прецеденты, с туннелированием прямо на борт судна) + нет никаких проблем с подсистемой безопасности Windows, которые могут начаться при использовании pipe'ов.
При этом можно научить людей пользоваться инструментом механически, что важно для тех, кто занимается тяжелой отладкой лишь эпизодически.
Для Visual Studio 2008 runtime'a требуется чуть побольше, но ненамного (этот набор, правда, выделял уже не я, так что за минимальность не поручусь):
1033\msdbgui.dll
1033\msvb7ui.dll
AvVsPkDH.dll
dbghelp.dll
iisresolver.dll
mcee.dll
mpishim.exe
msvb7.dll
msvsmon.exe
msvsmon.exe.config
symsrv.dll
symsrv.yes
Пускатель run.bat будет выглядеть так:
start /MIN msvsmon.exe /anyuser /timeout:9000 /noauth /nosecuritywarn

Кстати, в пределах локальной сети очень удобно использовать для "высадки" отладочного монитора на целевую машину утилиту psexec из состава SysInternals Tools (можно удаленно запустить командный файл, который скопирует из разделяемой папки с машины разработчика необходимый набор файлов, а потом запустит msvcmon).
Для удобства можно использовать самораспаковывающийся архив (что мы обычно и делаем), который будет копироваться прямо средствами psexec.
Кстати, удаленная отладка возможна и прямо с использованием средств Debugging Tool for Windows, например:
на целевой машине (\\W01): cdb -server tcp:port=1025 -p 122 (122 - PID отлаживаемого процесса)
на машине разработчика: windbg -remote tcp:server=W01,port=1025
С учетом того, что каталог с Debugging Tool for Windows можно переносить с машины на машину, и по современным понятиям пакет очень даже небольшой, получается тоже достаточно удобно...
Хотя приведенный сценарий - один из самых примитивных :-)

Комментариев нет: