Существует ли хороший общий метод для отладки макросов C ++?

StackOverflow https://stackoverflow.com/questions/106412

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

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

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

gcc -E foo.cpp

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

CC -E foo.cpp

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top