GCCXML - это (вариант GCC), который сбрасывает данные объявления символа и типа в формате XML.Это может иметь или не иметь те «свойства», которые вас интересуют.
Если вам нужна конкретная информация, вы можете согнуть GCC для ее получения.Кривая обучения для этого, вероятно, длинная и трудная, потому что GCC хочет быть компилятором, а не дампером ваших любимых свойств, и это большой, сложный инструмент.Вероятно, у вас есть какой-то шанс с «структурным размером», поскольку компилятор должен где-то это вычислить, и кажется разумным, что он будет храниться вместе с информацией об объявлении структуры.Я ожидаю, что некоторые из переключателей командной строки выводят некоторую информацию, и вы можете попытаться эмулировать ее.Если вам нужны действительно странные свойства, такие как «регистрировать давление внутри цикла», вам придется глубоко проникнуть внутрь компилятора.
Если вы хотите, чтобы общие свойства выводились из исходного кода, вам нужно использовать язык-каркас обработки, в который встроен сильный C-интерфейс. Clang один.Вероятно, он имеет кривую обучения, аналогичную GCC, но считается, что он лучше разработан для таких задач, как ваша.У меня нет особого опыта в этом.
Наш Набор реинжиниринга программного обеспечения DMS специально разработан для поддержки таких задач.Он имеет полный C Front End , с API для построения полных деревьев разбора, таблиц символов, связывающих идентификаторы с точкой их объявления, фактическим типом и полным контролем и анализом потока данных.DMS также имеет полный интерфейс пользователя C ++ со схожими свойствами, но он пока не предоставляет информацию анализа потока.DMS позволяет писать произвольный код поверх этого вычисления независимо от того, что вам нравится (произвольное свойство).