Дистанційне налагодження - Графіка для Windows засобами DirectDraw

Для виконання віддаленого налагодження вам знадобляться два комп'ютери, об'єднані в локальну мережу. Конкретні параметри мережі (кількість вузлів, тип кабелю, мережеві адаптери тощо) немає значення; головне – щоб на обох комп'ютерах було встановлено мережевий протокол TCP/IP. Крім того, необхідно встановити на обох комп'ютерах Visual C++.

Потім ви повинні вибрати, на якому комп'ютері працюватиме відладчик Visual C++, а на якому додаток. Ми називатимемо комп'ютер, на якому працює Visual C++, хостовим комп'ютером (або хостом), а комп'ютер з додатком, що відладжується, — віддаленим комп'ютером. Зазвичай хостом призначають потужніший із двох комп'ютерів.

Мал. А.1. Утиліта Winipcfg

Потім вам знадобиться каталог на віддаленому комп'ютері, де зберігатиметься і працюватиме ваша програма. Ви можете привласнити йому будь-яке ім'я і розмістити в будь-якому місці жорсткого диска, але на практиці зручніше розмістити цей каталог ближче до кореневого. Вам не доведеться копіювати файл програми, що виконується (це буде зроблено автоматично), однак слід перенести всі файли даних, необхідні для його роботи. Власне, файл можна перенести хоча б з метою тестування. Щоб налагодження пройшло нормально, запущений додаток повинен знайти всі свої файли даних (крім випадків, коли ви налагоджуєте поведінку програми за відсутніх файлів даних).

Мал. А.2. Діалогове вікно Network Identification

Після того, як ви створите каталог для програми і переконайтеся в тому, що вона може виконуватися на віддаленому комп'ютері, запустіть монітор Visual C++ ( MSVCMON.EXE ). Для цієї програми, як і для утиліти Winipcfg, немає ярлика, тому вам доведеться створити його самостійно. Налагоджувальний монітор знаходиться вкаталог bin Visual C++. Якщо ви збираєтеся щільно зайнятися віддаленим налагодженням, мабуть, ярлик налагоджувального монітора слід помістити у зручне місце. Вікно налагоджувального монітора Visual C++ зображено на рис. А.3.

Мал. А.3. Діалогове вікно Visual C++ Debug Monitor

Мал. А.4. Діалогове вікно Network Settings

Тепер займемося налаштуванням хоста. Запустіть Visual C++ і завантажте проект, який ви маєте намір налагоджувати. У прикладі використовується проект з ім'ям Sample. Виконайте команду ProjectSettings і перейдіть на вкладку General. На ній задається каталог, в якому генерується підсумковий файл, що виконується. Для спрощення налагодження ми генеруватимемо його прямо на віддаленому комп'ютері — це позбавить нас необхідності повторно копіювати виконуваний файл на віддалений комп'ютер після чергової компіляції. У полі Output files введіть назву каталогу, створеного раніше на віддаленому комп'ютері. Ім'я починається з умовного позначення мережного файлу (\). На рис. А.5 показано, як виглядає поле Output files із зазначеним каталогом.

Заданий рядок починається з імені віддаленого комп'ютера (remotemachine), за яким слідує ім'я диска (у нашому прикладі каталог віддаленого налагодження знаходиться на диску C) та ім'я каталогу. Перейдіть на вкладку Debug; тут потрібно змінити всі три поля. Ви повинні задати місцезнаходження цільового файлу і робочий каталог. На рис. А.6 показано, як заповнюються поля вкладки Debug у прикладі. Як і рис. А.5 шлях до виконуваного файлу включає ім'я віддаленого комп'ютера.

Перед тим як розпочинати віддалену налагодження, залишається зробити лише один крок. Виконайте команду Debugger Remote Connection із меню Build. Ця команда відкриває вікно (схоже на вікно монітора налагодження), призначене для активізації таналаштування сеансу віддаленого налагодження. За промовчанням у списку Connection вибирається рядок Local. Щоб перейти до віддаленої налагодження, виберіть рядок Network (TCP/IP), як показано на мал. А.7.

Мал. А.5. Поле Output files підготовлено для генерації виконуваного файлу на віддаленому комп'ютері

Мал. А.6. Зміни на вкладці Debug

Мал. А.7. Вікно Remote Connection

Тепер можна запускати відладчик. На жаль, налаштування ще не закінчено, тому що відладчик вимагатиме задати місцезнаходження всіх DLL, що використовуються віддаленим додатком. На щастя, це необхідно зробити лише один раз.

Запустіть відладчик. Якщо всі параметри були налаштовані правильно, вікно Debug Monitor на віддаленому комп'ютері зникне — це свідчить про те, що з'єднання встановлено.

Віддалений комп'ютер спробує запустити програму, і вам буде запропоновано (на хостівому комп'ютері) вказати місцезнаходження необхідних DLL. Для кожної DLL відкривається вікно Find Local Module. Ви повинні ввести ім'я файлу, включаючи ім'я комп'ютера. Вікно Find Local Module зображено на рис. А.8 (у ньому пропонується задати місцезнаходження файлу WINMM.DLL). Частина введеного рядка не помістилася на малюнку, але ви повинні пам'ятати, що крім шляху необхідно вказати ім'я файлу.

Мал. А.8. Вікно Find Local Module

Після того, як ви вкажете місцезнаходження всіх DLL (як правило, вони розташовуються в каталозі windows \ system ), програма запускається на віддаленому комп'ютері, однак її налагодження вирушає у вікно відладчика на хості. Тепер ви можете налагодити програму. Ми налаштували Visual C++ так, що при кожній компіляції новий файл буде автоматично копіюватися на віддалений комп'ютер. Віддалене налагодження майже нічим не відрізняється від звичайного, хіба щопрограма виконується не так на хості, але в іншому комп'ютері.

Насамкінець я скажу ще кілька слів про віддалену налагодження. По-перше, як її вимкнути? Гарне питання. Виконайте команду BuildDebugger Remote Connection у Visual C++ (на хості), потім виберіть рядок Local у списку Connection і натисніть кнопку OK.

Віддалена налагодження має багато переваг, але вона не ідеальна. Насамперед точки переривання в ній працюють ненадійно, а то й зовсім не працюють. Інша проблема полягає в тому, що після налаштування віддаленого налагодження та вибору місцезнаходження DLL, необхідних для вашої програми, Visual C++ наполягатиме на завантаженні DLL навіть після повернення в режим локального налагодження. Отже, наприкінці розділу, присвяченого віддаленому налагодженню, мені слід розповісти про те, як повернутися до нормального завантаження DLL.

Виконайте команду ProjectSettings і перейдіть на вкладку Debug. Виберіть зі списку Category рядок Additional DLL. Відкривається список DLL, які Visual C++ намагається завантажити під час налагодження вашої програми (незалежно від того, включено віддалене налагодження чи ні). Щоб відмовитися від перепризначення DLL (для нормальної налагодження вам не знадобиться жоден з елементів цього списку), виділіть відповідний рядок і зніміть прапорець у верхньому лівому куті. Список Additional DLL з деякими DLL, необхідними для типових додатків MFC, зображений на рис. А.9.