Отладка обработки немного разных входных данных - PullRequest
0 голосов
/ 31 июля 2009

В настоящее время я работаю над компилятором Java. В контексте компилятора немного разные входные данные могут приводить к разным выходным данным (например, добавление final в Java позволяет компилятору выполнять больше оптимизаций). В некоторых других случаях разные входные данные могут приводить к одному и тому же выходному сигналу (например, удаление некоторых конструкций из циклов - для каждого цикла).

При отладке того, как компилятор обрабатывает эти случаи, я обычно запускаю компилятор и пытаюсь выяснить, где пути выполнения компилятора расходятся (или сходятся). Излишне говорить, что это очень утомительно.

Мне интересно, есть ли у вас какие-либо советы, которые могли бы помочь мне отладить эти ситуации.

Кроме того, есть ли инструмент, который может отслеживать два выполнения программы и предоставлять вам различия в пути выполнения.

1 Ответ

2 голосов
/ 31 июля 2009

Я работаю над байтовым кодом CLI -> собственным кодом JIT, который отличается, но мы сталкиваемся с похожими препятствиями. Я поместил специальный метод ToString, который будет красиво печатать текущее состояние байт-кода вместе со строго типизированным стеком оценки и т. Д. Он позволяет мне визуально проверять преобразования кода на каждом шаге с помощью инструмента сравнения текста. В конце концов я хочу создать визуализатор отладчика, который будет «ToString» кодировать на каждом шаге и позволять мне идти вперед / назад прямо в отладчике с выделением изменений.

Если вы красиво распечатаете синтаксическое дерево, вы можете изменить его аналогичным образом.

Редактировать: я написал базовый класс Annotator, который чередует байт-код IL с представлением на ассемблере сгенерированного собственного кода. У него есть метод ToHtmlString(), который позволяет мне использовать преимущества HTML Visualizer, встроенного в отладчик Visual Studio. Пожалуйста, не критикуйте код ARM - я просто что-то взломал, чтобы сосредоточиться на Annotator, и теперь, когда он работает, я буду использовать его для работы над правильным codegen.

Щелкните правой кнопкой мыши → Просмотр изображения, если вы хотите увидеть его правильного размера. :)

alt text
(источник: 280z28.org )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...