3

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

我现在在一家新公司(C++ 代码),我找到了 ctags 来替换其中的一些功能。我最想念的一件事是我们称为“who.calls”的命令,它列出了哪些子例程(我的意思是函数或方法,必须习惯于 OO-speak)调用给定的子例程。例如,如果子程序foo调用子程序bar

>who.calls bar
foo

关于如何在不重新设计旧公司的编程环境的情况下做到这一点的任何建议?我正在寻找可以在命令行中使用的超级正则表达式或其他方法,但我愿意接受其他方法,这些方法采用一些完全不同的方法来给我相同的信息。我基本上想在不运行调试器的情况下发现一个调试函数堆栈。

4

5 回答 5

5

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

另一种可能性是开始使用 IDE。在使用 vi(然后是 gvim)和 ctags 25 年后,我最近加入了 21 世纪并开始使用 Eclipse(我正在做 Java,但我见过 Eclipse 的 C++ 插件)。除了能够做标签可以做的所有事情,它还可以把你带到当前方法的所有调用者。最重要的是,它内置了一个非常棒的交互式调试器。

于 2009-02-12T18:47:40.703 回答
4

对于命令行使用,请尝试cscope;它应该能够回答这个问题等等:

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

它不是为 C++ 编写的,但可能能够处理搜索 C++ 代码库(有一些警告)。

如果您正在寻找基于 Web 的界面,请考虑在服务器上运行并索引您的修订控制系统的OpenGrok 。它没有您要特别寻找的搜索,但它可以通过符号搜索来近似它。

于 2009-02-12T19:13:51.107 回答
2

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

于 2009-02-12T18:53:43.730 回答
1

GNU Global在基于 Unix 的系统上为我完成了这项工作。

于 2009-02-12T19:23:12.600 回答
0

可以在SD Source Code Search Engine找到一个对语言敏感的源代码搜索引擎。它可以同时处理多种语言。可以对特定语言的模式或跨语言的模式执行搜索(例如“查找涉及 TAX 的标识符”)。通过对语言标记敏感,可以减少误报的数量,从而为用户节省时间。它理解 C、C++、C#、COBOL、Java、ECMAScript、Java、XML、Verilog、VHDL 和许多其他语言,特别是 FORTRAN。

使用这个工具很容易找到在 Fortran 中调用 X 的人;只需搜索所有标识符“X”。您输入的实际查询是这样的:I=X(“任何名为 X 的标识符”)。这会找到整个源代码库中的所有引用。

于 2009-08-22T20:41:33.187 回答