LINUX.ORG.RU

Как найти определение структуры данных в большом C-проекте

 , , ,


1

4

Товарищи, скажите, как не используя GUI и не сочиняя однострочников на perl'е, открыть проект на C из огромной груды файлов и найти в нём определение структуры данных? Структура используется в миллионе разных мест, поэтому найти именно определение оказалось что-то не так и просто.

Вообще возможно ли такое чудо в 2017-м году из консоли?

cscope -R использовал, ничего не нашёл. Может, есть ещё какие-то варианты? Всё-таки космические корабли уже бороздят просторы космоса, да и задача, должно быть, типовая в мире OpenSource: открыть чужие исходники, что-нибудь поправить в них. Ведь для этого надо же мне знать, как и где определена та структура данных, которой я пользуюсь?

P.S. Речь о zbx_vector_ptr_t в исходниках Zabbix-сервера.

★★★★★

Ответ на: комментарий от RazrFalcon

Как же это мило.

Linux, IDE... Наверное, ещё и GUI, а то что-то я кроме emacs'а не помню никаких консольных IDE. Кстати, а emacs не найдёт?

DRVTiny ★★★★★
() автор топика

cscope обычно достаточно. Типы, определения которых генерируются при помощи препроцессора, он, конечно, не находит. А IDE неужто находят? (Я правда не знаю.)

unterwulf
()
Ответ на: комментарий от unterwulf

Да вроде уже и через препроцессор пропустил... Ничего нет. Скорее всего, этот zbx_vector_ptr_t - это тупо указатель на uint32 или uint64, зависит от разрядности целевой архитектуры. Но почему он генерируется, а не просто определяется через #IF - загадка.

DRVTiny ★★★★★
() автор топика

youcompleteme отлично справляется с GoToDefinition.

kawaii_neko ★★★★
()

раньше пользовал cscope, сейчас использую clang_complete. единственный минус - надо собрать проект шлангом, дабы он сгенерил пути ко всем инклудам (руками всю эту муть для того же qemu лень было прописывать). ну заодно и сгенярится все генерируемое.

vvviperrr ★★★★★
()
Последнее исправление: vvviperrr (всего исправлений: 1)
Ответ на: комментарий от unterwulf

Посмотрел... серая лисичка с густым мехом. Макрогенерация структур данных и заголовков функций.

#define ZBX_VECTOR_DECL(__id, __type)                                                                           \
                                                                                                                \
typedef struct                                                                                                  \
{                                                                                                               \
        __type                  *values;                                                                        \
        int                     values_num;                                                                     \
        int                     values_alloc;                                                                   \
        zbx_mem_malloc_func_t   mem_malloc_func;                                                                \
        zbx_mem_realloc_func_t  mem_realloc_func;                                                               \
        zbx_mem_free_func_t     mem_free_func;                                                                  \
}                                                                                                               \
zbx_vector_ ## __id ## _t;                                                                                      \
DRVTiny ★★★★★
() автор топика

vim/emacs + ctags?

anonymous
()

(r|g|c)tags

Лично я рекомендовал бы rtags, оно должно найти даже то, что в макросах клеится(ибо шланг) и имеет вполне себе cli интерфейс. Если посмотреть глубже, как на фреймворк, то на основе rtags вполне себе можно сделать умный «grep» для сорцов, но повторюсь, того что есть из коробки - должно хватить.

pon4ik ★★★★★
()
Ответ на: комментарий от anonymous

Нет конечно. Но ЛОР - уникальный форум, и здесь найдётся всё. См. ответ выше.

Но в детерминированных случаях global ищет отлично: быстро и без груды опций командной строки.

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от anonymous

не справится однострочник - будет многострочник

mittorn ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.