Проблема отладки макроса в визуальной студии - PullRequest
2 голосов
/ 30 июня 2011

У меня возникают проблемы при отладке макроса в C. Когда я пытаюсь установить точку останова, я получаю сообщение: «Точка останова не будет достигнута. Никакой исполняемый код, связанный с этой строкой ...» Самое смешное, что я могуотлаживать все остальное в файле, только не этот макрос.Я правильно загрузил все файлы символов, очистил и перестроил и отключил оптимизацию.Есть идеи, почему отладка этого макроса не работает?

1 Ответ

3 голосов
/ 30 июня 2011

Не зная достаточного контекста (может быть полезно увидеть определение, вызов и где вы пытаетесь установить точку останова), вот несколько предположений:

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

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

Помните, что функции макросов - это просто текстовые замены, и поэтомувызов их помещает весь их код в одну строку вызова (каждый вызов). На самом деле вы не можете их отладить (в смысле перехода в «многострочную» макрофункцию), вы можете только пройти мимо нихсравнивая состояние до и после.Это одна из основных причин, почему сложные макрофункции могут быть плохой идеей.

...