2010-09-24 4 views
1

У меня есть визуальный проект на C++, который я хотел бы отлаживать. Тем не менее, некоторые функции фактически генерируются путем расширения макросов (например, set ## Name для определенного свойства). Поэтому во время отладки я не могу следить за потоком выполнения внутри этих сгенерированных функций.Есть ли способ отладить предварительно обработанный код в VisualStudio

Должен ли я использовать флаг/P, а затем отлаживать предварительно обработанный код?

ответ

2

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

Это, как только вы на нем, вы не можете устранить макросы? С const, inline и шаблонами я редко когда-либо ощущаю необходимость прибегать к макросам, и если да, то это обычно очень маленькие изолированные фрагменты кода. Они либо слишком тривиальны для отладки, либо я вручную заменяю один экземпляр макроса на код, который он генерирует и отлаживает. (Тем не менее, это могло произойти со мной трижды за последнее десятилетие.)

+0

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

+0

Как сделать inline удалить необходимость в макросах? Я смотрел на макросы в log4cxx, например, которые генерируют несколько строк кода шаблона. Как вы замените эффективность макроса на одну строку на const, inline или templates? –

Смежные вопросы