ReactOS Remote Debugger

Материал из Русский WINE
Перейти к: навигация, поиск

Удалённый отладчик ReactOS

Удалённый отладчик ReactOS это оболочка для отладки, которая может забирать модули протокола (в настоящий момент речь идёт только о KDBG), представляющие собой файлы .nostrip из сборки ReactOS, и собирать информацию таким образом, который представляется несколько непрактичным для KDBG. Это приложение на Windows forms (C#) с несколькими типами окон, поддержкой перемещаемых элементов и вкладками.

В нём имеется окно локальных переменных, обратная трассировка, взаимодействие с отладчиком, потоки и процессы. Он может выводить большое количество информации, а после прочтения этой статьи станет для вас ещё более полезным.

Исходный код

 svn://svn.reactos.org/project-tools/trunk/reactosdbg

Бинарные файлы

Неофициальная ссылка для загрузки: Rev-42955.

Установка

Вам потребуется чистая сборка с ROS_BUILDNOSTRIP=yes. Сделайте очистку, поскольку иначе уже собранные (и свежие) модули пересобираться не будут. Например, вы можете сделать это так:

 make ROS_BUILDNOSTRIP=yes bootcd

Теперь у вас есть отладочные символы, выберите директорию с исходным кодом в меню 'Extras|Settings...' в удалённом отладчике ReactOS Remote Debugger. Исходной выберите директорию 'reactos' с исходным кодом. Директорией для вывода является папка output-i386, в которую будет производиться сборка.

Убедитесь, что загрузка ReactOS ведется со следующими параметрами в freeldr.ini:

 Options=/DEBUG /DEBUGPORT=COM1 /KDSERIAL /BAUDRATE=115200

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

Во всех свежих сборках ReactOS уже имеется пункт ReactOS (RosDbg) во FreeLoader (только /KDSERIAL).

Использование отладчика

Физическое оборудование

Подключите свой нульмодемный кабель к Com-портам двух ваших компьютеров и соединитесь через последовательный интерфейс.

Виртуальные машины

Информацию об отладке на конкретной виртуальной машине вы можете получить на соответствующих страницах:

TCP/IP (только QEMU)

Добавьте

 -serial tcp::1235,server

в командную строку QEMU.

Соединение по последовательному порту (QEMU, VMware, VirtualBox)

Вы можете воспользоваться соединением по последовательному порту при помощи драйвера com0com (дополнительную информацию можно найти здесь). Удалённый отладчик ReactOS в этом случае выступает в роли терминального приложения.

Именованный канал (QEMU, VMware, VirtualBox)

Настройка последовательного порта в VMWARE:

Vmware-pipe-cfg.png

Вход в отладчик

Если всё сделано верно, то подключитесь к запущенной ReactOS и спровоцируйте критический сбой (или нажмите Tab+K), и вы попадёте в отладчик. Удалённый отладчик ReactOS запросит у KDBG некоторое количество обновлений для уточнения состояния компонентов системы, проверит стек и т.д. Если же этого не происходит, то это означает что вы, скорее всего, загрузили систему без ключа /KDSERIAL, а ввод команд в KDBG происходит с клавиатуры. В этом случае загрузите ReactOS с параметром "ReactOS (RosDbg)".

Если вместо полезного вывода через последовательный порт идёт нечитаемый массив данных, то, скорее всего, удалённый отладчик ReactOS и сама система ReactOS работают на разных скоростях приёма/передачи данных. Пока, к сожалению, автоматический выбор скорости обмена данными в программе не поддерживается, хотя его реализация в будущем вполне возможна.

Если всё сделано верно, то ReactOS перейдёт в режим отладки, активируется ReactOSDbg, и на экран будут выведена информация о номере строки в обратной трассировке (адреса, файл исходного кода и номер строки), а соответствующие ячейки будут заполнены информацией о локальных переменных, потоках и процессах.

Вы можете убедиться в том, что информация о локальных переменных была получена просто поместив __asm__("int3"); в ваш код. Вы увидите все локальные переменные и их значения в окне переменных при входе в отладчик.

В отличие от KDBG, удалённый отладчик ReactOS использует dbghelp.dll (версия из Wine, которая умеет читать формат stabs) для чтения локальной копии файлов .nostrip, создающихся при сборке с параметром ROS_BUILDNOSTRIP=yes. В отличие от существенно урезанных секций rossym в обычных бинарных файлах (предоставляющих только информацию о номерах строк исходного кода), в этих файлах содержится вся информация, обычно используемая GDB для проверки значений переменных в запущенном процессе. Поскольку при этом для получения отладочного вывода не используется KDBG, мы можем сделать сборку вообще без режима отладки и, тем не менее, получать отладочные данные на другом компьютере (и это действительно так, можно отлаживать даже релизную сборку). Впоследствии удалённый отладчик будет переведён на использование протокола kd, но это произойдёт лишь тогда, когда в ReactOS будет внедрена поддержка этого протокола, после чего, при наличии соответствующих файлов pdb и библиотеки dbghelp.dll отладчик можно будет использовать для отладки самой Windows.

Примечания и ошибки

Наиболее часто пользователи жалуются на то, что обратный канал к ReactOS не отвечает. Вам необходимо запускать ReactOS с выбранным во FreeLDR параметром "ReactOS (RosDbg)". Если же такого параметра нет, то вам необходимо вручную добавить /KDSERIAL в файл freeldr.ini.

KDBG, будучи протоколом взаимодействия с человеком, не поддерживает повторную передачу данных. К счастью, ReactOSDbg куда менее разборчив и отвечает на сообщения от KDBG сразу же, как только они становятся доступны. Если сомневаетесь, введите 'regs', нажмите "Ввод" для перехода в командную строку, и вы увидите обновления данных. Когда-нибудь в будущем для этого появится автоматический механизм.

ReactOS
Search.png
Доклады
О ReactOS • ARWINSS • ЧеЗа
Информация Новости Выпуски новостей • Переводы блогов • Новости проекта • Видео • ReactOS на Хабре • USB от Вадима Галянта
Разработка Руководство по программированию • Отсутствующая функциональность • Ветви разработки • Компоненты системы • ReactOS и Wine • План работ • Roadmap ядра by Vgal • Разработчики • Совместимость с dll Windows • Наиболее значимые изменения за год • Используемые проекты • Google Summer of Code • Известные проблемы
Порты AMD64 • ARM • Xbox • PowerPC
Компоненты Файловые системы • Режим совместимости • Отчеты об ошибках • Печать • USB • Ядро
Загрузчик Восстановление MBR • Загрузка из GRUB • Параметры загрузки
Прочее ARWINSS • Приложения в ReactOS • Оформление ReactOS • Координаторы • "Пасхальные яйца" • Монетизация
Другое Типы ядер • FreeWin95
Помощь
RAM-диск ReactOS по PXE • с жесткого диска
Разработка Стиль написания кода • Стандарты RC-файлов • Работа с документацией • Венгерская нотация • GNU Indent • [ Subversion : ветви • слияние • использование TortoiseSVN ] • Основы перевода • Отправка патчей
Репорты Отладка в VirtualBox • Отладка на экран • Добавление программы в менеджер приложений • Отправка отчетов
Отладка Com0com • GDB • Kdbg • Rossym.gdb • Roswin.gdb • WinDBG • Руководство по WinDBG • Включение трассировки ядра • Коды DPRINT • Удалённый отладчик ReactOS
Сборка CMake • RBuild • Файлы RBuild • Автоматическое копирование файлов • Сборка MINGW-w64 • Сборка модулей • Среда сборки
Тестирование VirtualBox • VMware • QEMU • Hyper-V • Необходимый объём диска • Перенос файлов на виртуальный диск • Установка ReactOS • Установка драйверов
Сеть Общие папки • Samba • NFS
Игры Установка DirectPlay
Обновление ReactOS • Загрузочная флешка • Чем можно помочь проекту • Создание нового пользователя • Звук и сеть в VirtualBox • Съемка и публикация видео • IRC-канал • Сторонние компоненты • FAQ • ReactOS как рабочая станция • ReactOS и UEFI
Обзоры Оболочка • NTVDM • WOW • Community Edition • История сайта • ReactOS Server • Криптография • ПО времен XP