2013-03-16 72 views
1

我正在使用Mobile C(一种基于C的移动代理平台)进行编程,这是开源的。 我正在使用打印进行调试,因为我不能使用gdb,因为我使用了C解释器(Embedded Ch)。 问题是我找不到定义在哪里的函数。例如,函数agent_queue_RemoveIndex在源代码的多个位置使用,但我无法找到定义的位置(我查看过al定义文件,我已经完成了整个源代码的grep -R代码,Google搜索...)。当我做grep -R时,我只能找到对函数的调用,但不能定义。似乎没有agent_queue_RemoveIndex定义,但它必须是因为Mobile C是开源代码并且该函数可以工作。 有什么想法发生了什么?找出定义函数的位置

谢谢。

+2

你有没有考虑['cscope'](http://cscope.sourceforge.net/)。这是一个基于curses的界面,但它通常适用于我。另一方面,如果整个源代码中不区分大小写的'grep -r -i agent_queue_RemoveIndex'没有找到它,则它必须位于系统头文件中(cscope将跟踪并查找 - 至少如果给予一点帮助),或者你在大量输出中忽略了它。 – 2013-03-16 23:29:18

+1

我同意乔纳森的评论。如果您仍然无法找到函数的声明/定义,那么很可能您的函数是静态链接库之一。请检查'grep -ri agent_queue_RemoveIndex .'是否在二进制文件中显示任何搜索。 – Ganesh 2013-03-16 23:31:53

+1

我猜想它是在你连接的库中定义的,你没有源代码。 'nm'将列出对象(二进制或库)中定义的符号,这可能会有所帮助。作为一个破解,添加自己的冲突定义的函数可能会导致一个有用的编译警告,告诉你原始定义在哪里... – 2013-03-16 23:33:16

回答

4

它在此file中定义。

见第64行:

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

对于需要挖掘链接文件和文档的name##定义。

+0

谢谢,我不认为它可能是一个宏! – user1031431 2013-03-17 00:04:52

+0

没问题。别客气。 – meyumer 2013-03-17 01:32:28