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
Доклады
О ReactOSARWINSSЧеЗа
Информация Новости Выпуски новостейПереводы блоговНовости проектаВидеоReactOS на ХабреUSB от Вадима Галянта
Разработка Руководство по программированиюОтсутствующая функциональностьВетви разработкиКомпоненты системыReactOS и WineПлан работRoadmap ядра by VgalРазработчикиСовместимость с dll WindowsНаиболее значимые изменения за годИспользуемые проектыGoogle Summer of CodeИзвестные проблемы
Порты AMD64ARMXboxPowerPC
Компоненты Файловые системыРежим совместимостиОтчеты об ошибкахПечатьUSBЯдро
Загрузчик Восстановление MBRЗагрузка из GRUBПараметры загрузки
Прочее ARWINSSПриложения в ReactOSОформление ReactOSКоординаторы"Пасхальные яйца"Монетизация
Другое Типы ядерFreeWin95
Помощь
RAM-диск ReactOS по PXEс жесткого диска
Разработка Стиль написания кодаСтандарты RC-файловРабота с документациейВенгерская нотацияGNU Indent • [ Subversion : ветвислияниеиспользование TortoiseSVN ] • Основы переводаОтправка патчей
Репорты Отладка в VirtualBoxОтладка на экранДобавление программы в менеджер приложенийОтправка отчетов
Отладка Com0comGDBKdbgRossym.gdbRoswin.gdbWinDBGРуководство по WinDBGВключение трассировки ядраКоды DPRINTУдалённый отладчик ReactOS
Сборка CMakeRBuildФайлы RBuildАвтоматическое копирование файловСборка MINGW-w64Сборка модулейСреда сборки
Тестирование VirtualBoxVMwareQEMUHyper-VНеобходимый объём дискаПеренос файлов на виртуальный дискУстановка ReactOSУстановка драйверов
Сеть Общие папкиSambaNFS
Игры Установка DirectPlay
Обновление ReactOSЗагрузочная флешкаЧем можно помочь проектуСоздание нового пользователяЗвук и сеть в VirtualBoxСъемка и публикация видеоIRC-каналСторонние компонентыFAQReactOS как рабочая станцияReactOS и UEFI
Обзоры ОболочкаNTVDMWOWCommunity EditionИстория сайтаReactOS ServerКриптографияПО времен XP