Отладка сгенерированного парсером кода

Я сгенерировал код анализатора с помощью Lemon Parser. Я не могу отладить сгенерированный код. Элемент управления показывает некоторый другой исходный код, нежели текущий выполняемый оператор. Точки останова смещены. Я пробовал на GDB и Visual C++. У обоих одна и та же проблема. Пожалуйста, скажите мне способ отладки.

3 ответа

Допустим, ваш входной файл называется mylexer.y, и в этом случае Lemon сгенерирует myparser.c и myparser.h.

Внутри myparser.c вы увидите такие строки

#line 1 "myparser.y"

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

Чтобы подавить их, вызовите Lemon с опцией -l.

lemon -l myparser.y

Чтобы увидеть другие варианты, не упомянутые в документации, используйте -?

lemon -?

Следующее является сертифицированным WAG (Wild Ass Guess):

Я бы рекомендовал просмотреть все макросы, используемые генератором парсера, и посмотреть, есть ли в них экранированные символы новой строки. Если есть, попробуйте удалить их все (соединив строки вместе), а затем перекомпилируйте файл. Затем посмотрел на код в отладчике - вещи могут внезапно вернуться туда, где они должны быть.

Предыстория: еще в 80-х я разработал и продал отладчик CDB. По мере того, как я переносил его на все, что имело имя U*NX, я хорошо знаком с особенностями различных компиляторов и тем, как они генерировали отладочную информацию в определенных ситуациях.

Одна широко распространенная проблема была связана с макросами, которые ускользали от них. Например

#define foo(bar) bar + \
    snort + something_else

x = foo(5);
y = 2;

Если номер строки для y = 2; должно было быть 5, многие таблицы символов в конечном итоге отображали бы его как 6, и каждая строка после него была бы смещена на единицу. И каждое использование такого макроса будет приводить к удалению номеров строк все дальше и дальше.

Проверьте оптимизацию, параметры отладочной информации, если вы создаете их как lib/dll.

Другие вопросы по тегам