Как отладить макросы эффективно в VS?

Не злой. Они на самом деле упрощают вещи как

1. Вход/аудит изменений в записях или даже схемах базы данных

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

<час>

2. Осуществление справочного intrgrity (основные отношения / отношения внешнего ключа, и т.д.) через несколько баз данных

14
задан Étienne 22 September 2013 в 10:16
поделиться

5 ответов

Перейдите к свойствам проекта или исходного файла, щелкнув правой кнопкой мыши и выбрав «Свойства». В разделе «Свойства конфигурации» -> «C / C ++» -> «Препроцессор» установите для параметра «Создать предварительно обработанный файл» значение с номерами строк или без них, в зависимости от того, что вы предпочитаете. Это покажет, до чего расширяется ваш макрос в контексте. Если вам нужно отладить его в скомпилированном в реальном времени коде, просто вырежьте и вставьте его и поместите вместо макроса во время отладки.

18
ответ дан 1 December 2019 в 08:53
поделиться

Компилятор прекрасно раскрывает макросы. Получите список компиляции с развернутыми макросами.

Вставьте развернутый макрос в свой код. Перекомпилируйте, и вы сможете пройти через это, выполнить простой тест.

Обычно, когда я создаю сложный макрос, Я сначала жестко кодирую его и тестирую. Затем я превращаю его в макрос.

В 2008 году этот может помочь

4
ответ дан 1 December 2019 в 08:53
поделиться

Противодействуйте злу с помощью метода зла. Раскройте один экземпляр макроса вручную, пока не завершите отладку, иначе утилита cpp может помочь вам развернуть все макросы, но я не уверен, есть ли его версия для Windows.

0
ответ дан 1 December 2019 в 08:53
поделиться

Я сказал, что макросы очень сложные? Я хотел бы развернуть только один или два слоя, а не все макросы (иначе он будет просто нечитаем) ... во время отладки

Если макросов не слишком много, вы не хотите развернуть, то вы можете просто #undef их перед фрагментом, который хотите отладить. Затем скомпилируйте с помощью [Создать предварительно обработанный файл], как указано выше. Компиляция завершится ошибкой, но вы получите полезный фрагмент в предварительно обработанном выводе с правильными расширениями. Скопируйте и вставьте, удалите # undef-s и выполните отладку.

К сожалению, ваши лучшие друзья для работы с макросами в стиле C - это inline , шаблон и хороший оптимизирующий компилятор.

0
ответ дан 1 December 2019 в 08:53
поделиться

Use inline functions (force inlining if you really mean it) and stick to it! This will be more efficient (get only inlined if it brings performance if you optimize for perf) and maintainable. You loose much by using macros: type checking & safety.

Macros do not exist for the compiler, they only do for the preprocessor. This one makes text replacements without looking for side effects. So macros are actually never called and you cannot debug into them. No matter how you code a macro, misuse is always possible. Like in this example:

#define SQUARE(a) ((a)*(a))

Note already the ( `)´ to protect against replacements like SQUARE(3+2). But they do not protect against:

int a = 1;
int b = SQUARE(++a);

One would expect it to be 4 but you end up with 6 which is not really square. As it expands to int b = (++a)*(++a); You wouldn't have this trouble with inlined functions.

Note that the implementation of an inlined function has to be visible for the compiler at the places where you use it. Also debugging will be weird to the novice user: as there are many instances of an inlined function, you'll get a huge list of methods if you want to move the execution point to another place for example.

0
ответ дан 1 December 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: