Выяснение, где определена функция

Я программирую на Mobile C (мобильная агентская платформа поверх C), которая имеет открытый исходный код. Я отлаживаю с помощью отпечатков, так как не могу использовать gdb, потому что использую интерпретатор C (Embedded Ch).

Проблема в том, что есть функции, я не могу найти, где они определены. Например, есть функция agent_queue_RemoveIndex, которая используется в нескольких местах исходного кода, но я не могу найти, где она определена (я просмотрел все файлы определения, я сделал grep -R всего исходного кода). код, погуглил...). Когда я делаю grep -R, я могу найти только вызовы функции, но не определение. Похоже, что определения agent_queue_RemoveIndex нет, но оно должно быть, потому что Mobile C — это код с открытым исходным кодом, и функция работает.

Любые идеи о том, что происходит?


person user1031431    schedule 16.03.2013    source источник
comment
Рассматривали ли вы cscope. Это интерфейс на основе curses, но у меня он обычно работает. С другой стороны, если нечувствительный к регистру grep -r -i agent_queue_RemoveIndex по всему источнику не находит его, он должен быть либо в системных заголовках (которые cscope отследит и найдет — по крайней мере, если дать небольшую подсказку о том, где искать) , или вы проглядели это в обильном выводе.   -  person Jonathan Leffler    schedule 17.03.2013
comment
Я согласен с комментарием Джонатана. Если вы все еще не можете узнать объявление/определение функции, то, скорее всего, ваша функция является частью одной из статически линкуемых библиотек. Пожалуйста, проверьте, показывает ли grep -ri agent_queue_RemoveIndex . поиск в двоичных файлах.   -  person Ganesh    schedule 17.03.2013
comment
Я предполагаю, что это определено в библиотеке, на которую вы ссылаетесь, для которой у вас нет источника. nm перечислит символы, определенные в объекте (бинарном или библиотеке), которые могут помочь. Как хак, добавление вашего собственного конфликтующего определения функции может вызвать полезное предупреждение компиляции, сообщающее вам, где находится исходное определение...   -  person John Carter    schedule 17.03.2013
comment
Также обратите внимание на макросы. Возможно, есть какой-то макрос препроцессора C, который записывает определение agent_queue_RemoveIndex. Вместо этого я бы лично нашел термин RemoveIndex.   -  person dyoo    schedule 17.03.2013
comment
Облегченная версия вышеизложенного - ctags (создает карту определений и использует для vi и emacs)   -  person vonbrand    schedule 17.03.2013


Ответы (1)


Он определен в этом файле.

См. строку 64:

int name##_RemoveIndex(name##_p name, int index); 

Для определения name## нужно копать связанный файл и документацию.

person meyumer    schedule 16.03.2013
comment
Спасибо, я не думал, что это может быть макрос! - person user1031431; 17.03.2013