ReactOS Remote Debugger
Содержание
Удалённый отладчик 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:
Вход в отладчик
Если всё сделано верно, то подключитесь к запущенной 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', нажмите "Ввод" для перехода в командную строку, и вы увидите обновления данных. Когда-нибудь в будущем для этого появится автоматический механизм.