2010-12-27 2 views
5

Я работаю над довольно большой базой кода, которая имеет немного магии #ifdef. Я просматриваю один файл и пытаюсь определить, где определен тип. К сожалению, он включает в себя много файлов, которые включают в себя множество файлов, которые включают в себя множество файлов и т. Д., Некоторые из которых определяют макросы, которые влияют на определения, которые вы можете использовать. Структура достаточно сложная, что после 10-минутной стоимости grepping и последующих цепей включения я до сих пор не знаю, какое определение используется. Я помню, что визуальная студия имеет приятную особенность, где я могу щелкнуть правой кнопкой мыши по типу, и он покажет, где тип определен. Есть ли эквивалентный хороший инструмент для Linux, который читает файлы и т. Д.? Я уверен, что есть, но я все еще использую vim + grep для своей среды разработки.Определение типа, в котором задан тип

+0

Почему не использовать GDB, если это вариант, потому что я не думаю, что ВИМ имеет возможность, как VS, если только не добавить в где-то существует? Используйте среду IDE, такую ​​как NetBeans. Связанный с этим вопрос, а не дубликат http://stackoverflow.com/questions/559274/any-program-or-trick-to-find-the-definition-of-a-variable – DumbCoder

+0

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

ответ

4

С помощью сложных определений и зависимостей эта функция не всегда работает в Visual Studio.

Решение: попросите компилятор сбрасывать код после его предварительной обработки, попросите его также распечатать директивы #line и #file. Найдите полученный файл для своего типа, а затем посмотрите ближайшую директиву #file, чтобы узнать, откуда она взялась.

(В GCC вы можете использовать переключатель -E)

+0

Это сработало отлично. И вы правы, какой лучший способ проанализировать все макросы препроцессора, чем с препроцессором? –

+0

Иногда полезно/быстро писать короткую программу с использованием тех же опций и библиотек, что и ваш проект, и использовать любые демонстрационные процедуры (если они есть), чтобы определить, какое определение структуры используется. – Sparky