Определение места определения типа

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


person pythonic metaphor    schedule 27.12.2010    source источник
comment
Почему бы не использовать gdb, если это вариант, потому что я не думаю, что у vim есть такой вариант, как VS, если где-то не существует надстройки? Используйте IDE, например NetBeans. Связанный вопрос, а не дубликат stackoverflow.com/questions/559274/   -  person DumbCoder    schedule 27.12.2010
comment
Вместо того, чтобы тратить время и усилия на отслеживание определения этой переменной, вы всегда можете лучше потратить свои ресурсы на планирование убийства человека, который это сделал.   -  person Edward Strange    schedule 27.12.2010


Ответы (1)


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

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

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

person Yakov Galka    schedule 27.12.2010
comment
Это сработало отлично. И вы правы, что может быть лучше для разбора всех макросов препроцессора, чем с препроцессором? - person pythonic metaphor; 27.12.2010
comment
Иногда полезно/быстро написать короткую программу, используя те же опции и библиотеки, что и ваш проект, и использовать любые подпрограммы показа (если они доступны), чтобы помочь определить, какое определение структуры используется. - person Sparky; 27.12.2010