Shell 谁调用这个函数?

Shell 谁调用这个函数?,shell,ctags,code-search-engine,Shell,Ctags,Code Search Engine,在我的上一份工作(遗留FORTRAN 77代码)中,我们有交叉引用文件,其中列出了哪些子例程称为其他子例程,在哪些文件中定义了子例程,哪些公共块包含哪些变量,哪些子例程包含哪些公共块,等等。然后这些被shell脚本使用,这些脚本将交叉引用文件变灰,并告诉您有关程序设计的事情 我现在在一家新公司工作(C++代码),我发现CTAG可以替代一些功能。我最怀念的一件事是我们称之为“who.calls”的命令,它列出了调用给定子例程的子例程(我指的是函数或方法,必须习惯OO语言)。例如,如果子程序foo调

在我的上一份工作(遗留FORTRAN 77代码)中,我们有交叉引用文件,其中列出了哪些子例程称为其他子例程,在哪些文件中定义了子例程,哪些公共块包含哪些变量,哪些子例程包含哪些公共块,等等。然后这些被shell脚本使用,这些脚本将交叉引用文件变灰,并告诉您有关程序设计的事情

我现在在一家新公司工作(C++代码),我发现CTAG可以替代一些功能。我最怀念的一件事是我们称之为“who.calls”的命令,它列出了调用给定子例程的子例程(我指的是函数或方法,必须习惯OO语言)。例如,如果子程序
foo
调用子程序
bar

>who.calls bar
foo

对于如何做到这一点,而不必从我的老公司重新设计编程环境,有什么建议吗?我正在寻找一个超级正则表达式或其他一些我可以在命令行中使用的方法,但我对其他方法持开放态度,这些方法采用完全不同的方法来提供相同的信息。我基本上想在不运行调试器的情况下发现调试函数栈。

您可能需要考虑使用。它可以生成显示整个调用树和类结构的网页,还可以像Javadocs对java所做的那样,提取格式正确的注释来记录类和方法


另一种可能是开始使用IDE。在使用VI(然后GVIM)和CTAGS 25年之后,我最近加入了二十一世纪,开始使用Eclipse(我正在做java,但是我已经看到了Eclipse C++插件)。除了能够完成标记所能做的一切之外,它还可以将您带到当前方法的所有调用方。除此之外,它还内置了一个非常好的交互式调试器。

SlickEdit可以标记项目中的每个符号,包括库,以显示在“显示引用”中。它将是who.calls plus one,其中plus one是定义。它是基于源代码的。

要使用命令行,请尝试;它应该能够回答这个问题以及更多问题:

  • 允许搜索以下代码:
    • 对符号的所有引用
    • 全球定义
    • 函数调用的函数
    • 函数调用函数
    • 文本字符串
    • 正则表达式模式
    • 档案
    • 包含文件的文件

不是为C++编写的,但可以处理C++代码库(with)的搜索。


如果您正在寻找基于Web的接口,请考虑在服务器上运行哪些操作并对修订控制系统进行索引。它没有您特别需要的搜索,但它可以用符号搜索来近似它。

在基于Unix的系统上为我做这项工作。

可以找到对langauge敏感的源代码搜索引擎 在它可以同时处理多种语言。 可以在特定语言中搜索模式, 或跨语言的模式(例如“查找涉及税务的标识符”)。 通过对langauge标记的敏感性,可以减少误报的数量, 为用户节省时间。它理解C、C++、C、COBOL、java、ECMAScript、java、XML、Verilog、VHDL以及许多其他语言,特别是FORTRAN。 用这个工具很容易找到谁在Fortran中调用X;只需搜索所有 标识符“X”。您的实际查询类型如下: I=X
(“任何名为X的标识符”)。这将查找整个源代码库中的所有引用。

您会键入什么来获得who.calls功能?我想这很接近我想要的。这告诉我哪些文件包含函数调用。我想知道那些调用我函数的文件中函数的名称。它们有一个Linux内核代码的web演示-您可以单击函数声明,它将带您到调用者处。export LESSGLOBALTAGS=global less-t functionname它执行引用和定义函数的位置。上面是函数定义,但也有引用。请阅读本教程。感谢您的编辑,@J.F-我给了您一个+1,您有9票,以获得徽章。