在源代码中查找引用的函数/变量定义

时间:2014-04-09 18:40:48

标签: c++ c reference debug-symbols linker-flags

我的项目包含许多文件。

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

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

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

2 个答案:

答案 0 :(得分:2)

试试cscope utility

从手册:

允许搜索以下代码:

  • 所有对符号的引用
  • 全球定义
  • 函数调用的函数
  • 调用函数的函数
  • 文字字符串
  • 正则表达式
  • 文件
  • 包含文件的文件

  • 基于Curses(文本屏幕)

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

A"截图":

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:

答案 1 :(得分:0)

如果导出了该符号,则可以连接objdumpnm并查看.o个文件。这对于在头文件中查找内容没有用。

我的建议是将你的项目放在git(具有许多其他优点)并使用git grep,它只查看git版本控制下的那些文件(意味着你没有{{1}对象文件和其他无关紧要)。 grep也很好而且很快。