Откриване къде е дефинирана функция

Програмирам в Mobile C (платформа за мобилни агенти върху C), която е с отворен код. Отстранявам грешки с помощта на отпечатъци, тъй като не мога да използвам gdb, защото използвам C интерпретатор (вграден Ch).

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

Някакви идеи какво се случва?


person user1031431    schedule 16.03.2013    source източник
comment
Обмисляли ли сте cscope. Това е интерфейс, базиран на проклятия, но обикновено работи за мен. От друга страна, ако нечувствителен към главни букви 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. Аз лично бих grep за термина 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