Есть ли хороший общий метод для отладки макросов C ++? - PullRequest
13 голосов
/ 20 сентября 2008

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

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

Ответы [ 7 ]

14 голосов
/ 20 сентября 2008

gcc -E выведет предварительно обработанный источник в стандартный вывод.

8 голосов
/ 20 сентября 2008

Для пользователей MSVC вы можете щелкнуть правой кнопкой мыши файл / проект, просмотреть настройки и изменить свойства файла для вывода предварительно обработанного источника (который обычно находится в каталоге obj).

5 голосов
/ 20 сентября 2008

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

Можете ли вы заменить их встроенными функциями или иным образом избавиться от них всех вместе?

2 голосов
/ 20 сентября 2008

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

Макросы - это старый инструмент, иногда правильный инструмент. В качестве последнего средства помните, что printf - ваш друг (и на самом деле printf не так уж и плох, когда вы делаете многопоточные приложения)

1 голос
/ 20 сентября 2008

gcc -save-temps запишет .i (или .ii файл для C ++), который является выводом препроцессора C, прежде чем он будет передан компилятору. Это часто может быть полезным.

1 голос
/ 20 сентября 2008

Отладка разборки с загруженными символами.

0 голосов
/ 20 сентября 2008

GCC и совместимые компиляторы используют опцию -E для вывода предварительно обработанного источника в стандартный вывод.

gcc -E foo.cpp

Sun Studio также поддерживает этот флаг:

CC -E foo.cpp

Но еще лучше -xdumpmacros. Вы можете найти более подробную информацию в документации Sun.

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