Разрабатывая код для очень узких мест, привычного стандартного набора средств и отладчиков зачастую не хватает, когда нам требуется отладить фрагмент алгоритма именно в конкретном случае, в конкретном состоянии окружения и массивов данных.

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

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

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

На старте разработки подобного инструмента за образец был взят данный сервис не в буквальном смысле, а как направление функциональности GUI, так как эмуляция в нём точная, но не полная и с симуляцией виртуального окружения с демонстрацией.

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

Набор поддерживаемых инструкций пока мал и ограничен лишь теми, что требовались
для отладки конкретных участков кода. В симуляторе имеется простое окружение на
основе Canvas‑графики, а зажимая клавиши HOME и END можно проматывать итерации.

Запустить симулятор отладки можно по ссылке.
Исходный текст пока размещён только в gist-репозитории.

Имеется возможность подгрузки собственных стилей (вырви глаз пример) и листингов.
В меню двойным кликом по стилю можно его открыть в поле редактирования и изменять в режиме реального времени.

P. S.: Всё это безобразие разрабатывалось для собственных нужд и не было написано с чистого листа, а лишь переработка эмулятора моего соседнего проекта, что можно заметить по исходному коду, где много лишнего.

Если кому‑нибудь окажется полезным, буду рад выслушать предложения по развитию движка.

Комментарии (14)


  1. dlinyj
    00.00.0000 00:00
    +4

    Прикольная штука.


    Есть такой симулятор Simics от интела. Он умеет даже в обратную сторону откатывать на любое количество шагов, даже с операционными системами, типа линукс, виндоус. Рекомендую потыкать, он стал открытым.


    На хабре даже статьи были по теме.


    1. dynamica
      00.00.0000 00:00

      На любое количество шагов ни один отладчик чего-угодно неспособен отматывать. Память не бесконечна. Всегда есть лимит.


      1. dlinyj
        00.00.0000 00:00

        Если вопрос симуляции процессора Интел, находящегося в разработке, вам напихают памяти сколько будет нужно. Но это не так много, как кажется.


  1. space2pacman
    00.00.0000 00:00
    +4

    Снимаю шляпу ????

    Проект с открытым кодом? Есть ссылка на github?


    1. Alikberov Автор
      00.00.0000 00:00
      +1

      Спасибо!

      Отдельно github ещё не открывал. Пока только в gist как эксперимент для личных нужд.


  1. YDR
    00.00.0000 00:00
    +1

    а почему бы отладчик на железном процессоре не модифицировать (какой-нибудь x64dbg), чтобы он историю сохранял? или я чего-то не понял?


    1. Alikberov Автор
      00.00.0000 00:00

      Инженеры не предусматривали непосредственного произвольного программного доступа ко всему Регистровому Файлу.


      1. emusic
        00.00.0000 00:00

        Для чего нужен непременно "произвольный программный доступ"?


  1. stanislavshwartsman
    00.00.0000 00:00
    +3

    Я думаю вы уже знакомы с эмулятором Bochs и его встроенным отладчиком. Я хотел бы предложить поучаствовать в проекте Bochs и сделать его эмулятор и отладчик лучше.

    Я кстати, походу последний Bochs maintainer а без контрибуторов проэкт загнется.


    1. Alikberov Автор
      00.00.0000 00:00

      Bochs был моим основным эмулятором до установки VMware.


  1. emusic
    00.00.0000 00:00
    +1

    Можно примеров, для которых необходима именно такая техника, и более традиционные методы не годятся?

    Раз отлаживаемый код может работать в симуляторе, который замедляет его минимум в десятки раз - значит, явного ограничения по быстродействию нет, и вместо симуляции можно добавить в код хоть текстовое протоколирование, если позволяет скорость, хоть тупо сваливать значения регистров в двоичный журнал. На худой конец - прогонять трассировку под обычным отладчиком в автоматическом режиме, чтобы тот сохранял значения регистров на каждом шаге.


  1. domix32
    00.00.0000 00:00

    А вот это не из той же оперы?


  1. shlyakpavel
    00.00.0000 00:00

    Отличный проект!
    Есть ощущение, что help->about должен быть поверх "Graphics display", а не под ним.
    Мне было бы интересно посмотреть на бенчмарки для оценки производительности данного решения, чтобы без экспериментов понимать подходит/не подходит ли оно для конкретной задачи.