Разрабатывая код для очень узких мест, привычного стандартного набора средств и отладчиков зачастую не хватает, когда нам требуется отладить фрагмент алгоритма именно в конкретном случае, в конкретном состоянии окружения и массивов данных.
Требуется вручную в конкретных точках во время пошаговой отладки выставлять все необходимые специфические значения по нужным регистрам, чтобы отследить реакцию кода в исключительно данном моменте и стараясь не упустить ни бита из внимания.
Подавляющее большинство средств отладки не имеют функции отката во времени, что могло бы гораздо упростить отладку в случаях проскока критически важных команд, где значения регистров были очень показательны, но утерялись в данной итерации.
В таких случаях удобно было бы использовать не классическую пошаговую эмуляцию, а более‑менее точную симуляцию с исполнением кода в цикле парсинга инструкций и записью в журнал состояний всех регистров на отдельных операциях всех итераций.
На старте разработки подобного инструмента за образец был взят данный сервис не в буквальном смысле, а как направление функциональности GUI, так как эмуляция в нём точная, но не полная и с симуляцией виртуального окружения с демонстрацией.
Вниманию аудитории разработчиков здесь представляется именно прототип концепции отладчика с навигацией как по отдельным инструкциям, так и по моментам времени, закреплённых за отдельными итерациями.
Набор поддерживаемых инструкций пока мал и ограничен лишь теми, что требовались
для отладки конкретных участков кода. В симуляторе имеется простое окружение на
основе Canvas‑графики, а зажимая клавиши HOME и END можно проматывать итерации.
Запустить симулятор отладки можно по ссылке.
Исходный текст пока размещён только в gist-репозитории.
Имеется возможность подгрузки собственных стилей (вырви глаз пример) и листингов.
В меню двойным кликом по стилю можно его открыть в поле редактирования и изменять в режиме реального времени.
P. S.: Всё это безобразие разрабатывалось для собственных нужд и не было написано с чистого листа, а лишь переработка эмулятора моего соседнего проекта, что можно заметить по исходному коду, где много лишнего.
Если кому‑нибудь окажется полезным, буду рад выслушать предложения по развитию движка.
Комментарии (14)
YDR
00.00.0000 00:00+1а почему бы отладчик на железном процессоре не модифицировать (какой-нибудь x64dbg), чтобы он историю сохранял? или я чего-то не понял?
stanislavshwartsman
00.00.0000 00:00+3Я думаю вы уже знакомы с эмулятором Bochs и его встроенным отладчиком. Я хотел бы предложить поучаствовать в проекте Bochs и сделать его эмулятор и отладчик лучше.
Я кстати, походу последний Bochs maintainer а без контрибуторов проэкт загнется.
emusic
00.00.0000 00:00+1Можно примеров, для которых необходима именно такая техника, и более традиционные методы не годятся?
Раз отлаживаемый код может работать в симуляторе, который замедляет его минимум в десятки раз - значит, явного ограничения по быстродействию нет, и вместо симуляции можно добавить в код хоть текстовое протоколирование, если позволяет скорость, хоть тупо сваливать значения регистров в двоичный журнал. На худой конец - прогонять трассировку под обычным отладчиком в автоматическом режиме, чтобы тот сохранял значения регистров на каждом шаге.
shlyakpavel
00.00.0000 00:00Отличный проект!
Есть ощущение, что help->about должен быть поверх "Graphics display", а не под ним.
Мне было бы интересно посмотреть на бенчмарки для оценки производительности данного решения, чтобы без экспериментов понимать подходит/не подходит ли оно для конкретной задачи.
ironlion
00.00.0000 00:00
dlinyj
Прикольная штука.
Есть такой симулятор Simics от интела. Он умеет даже в обратную сторону откатывать на любое количество шагов, даже с операционными системами, типа линукс, виндоус. Рекомендую потыкать, он стал открытым.
На хабре даже статьи были по теме.
dynamica
На любое количество шагов ни один отладчик чего-угодно неспособен отматывать. Память не бесконечна. Всегда есть лимит.
dlinyj
Если вопрос симуляции процессора Интел, находящегося в разработке, вам напихают памяти сколько будет нужно. Но это не так много, как кажется.