2

我的项目包含许多文件。

有时我需要知道特定函数在源代码中的定义(实现)位置。我目前所做的是在源文件中对函数名称进行文本搜索,这非常耗时。

我的问题是:有没有更好的方法(编译器/链接器标志)在源文件中找到该函数定义?....因为链接器已经经历了解决所有这些引用的所有麻烦。

我希望有比在调试器中进入函数调用更好的方法,因为函数可以隐藏在许多调用中。

4

2 回答 2

2

尝试cscope 实用程序

从手册:

允许搜索代码:

  • 所有对符号的引用
  • 全局定义
  • 函数调用的函数
  • 函数调用函数
  • 文本字符串
  • 正则表达式模式
  • 一份文件
  • 文件包括文件

  • 基于诅咒(文本屏幕)

  • 生成一个信息数据库,以便更快地搜索和以后参考
  • 模糊解析器支持 C,但足够灵活,可用于 C++ 和 Java,并可用作通用的“grep 数据库”(用它来浏览大型文本文档!)
  • 具有用于包含在脚本中或作为 GUI/前端的后端的命令行模式
  • 可在所有风格的 Unix 以及大多数垄断控制的操作系统上运行。

“截图”:

C symbol: atoi

  File     Function     Line
  0 stdlib.h <global>      86 extern int atoi (const char *nptr);
  1 dir.c    makefilelist 336 dispcomponents = atoi(s);
  2 invlib.c invdump      793 j = atoi(term + 1);
  3 invlib.c invdump      804 j = atoi(term + 1);
  4 main.c   main         287 dispcomponents = atoi(s);
  5 main.c   main         500 dispcomponents = atoi(s);
  6 stdlib.h atoi         309 int atoi (const char *nptr) __THROW



  Find this C symbol:
  Find this global definition:
  Find functions called by this function:
  Find functions calling this function:
  Find this text string:
  Change this text string:
  Find this egrep pattern:
  Find this file:
  Find files #including this file:
于 2014-04-10T08:51:28.400 回答
0

如果符号已导出,那么您可以连接objdumpnm查看.o文件。但是,这对于在头文件中查找内容没有用。

我的建议是将您的项目放入git(它具有许多其他优点)并使用git grep它仅查看 git 修订控制下的那些文件(这意味着您不会grep反对文件和其他不相关的文件)。git grep也很好,很快。

于 2014-04-09T19:55:18.293 回答