在我的上一份工作(遗留FORTRAN 77代码)中,我们有交叉引用文件列出了哪些子程序称为其他子程序,在哪些文件子程序中定义,哪些公共块包含哪些变量,哪些子程序包含哪些公共块等等.然后由shell脚本使用,它们会对交叉引用文件进行grepped,并会告诉您有关程序设计的信息.
我现在在一家新公司(C++代码),我发现ctags取代了一些功能.我最想念的一件事是我们称之为"who.calls"的命令,它列出了哪些子程序(我的意思是函数或方法,必须习惯于OO说)调用给定的子程序.例如,如果子例程foo
调用子例程bar
:
>who.calls bar foo
如果没有从我的旧公司重新设计编程环境,有关如何执行此操作的任何建议?我正在寻找一个超级正则表达式或其他方法,我可以在命令行使用,但我愿意接受其他方法,采取一些完全不同的方法来给我相同的信息.我基本上想要在不运行调试器的情况下发现调试函数堆栈.
你可能想考虑使用doxygen.它可以生成向您显示整个调用树和类结构的网页,以及提取正确格式化的注释以记录类和方法,就像Javadocs为java做的那样.
另一种可能性是开始使用IDE.使用vi(然后是gvim)和ctags 25年后,我最近加入了21世纪并开始使用Eclipse(我正在使用Java,但我已经看过Eclipse的C++插件).除了能够执行标记可以执行的所有操作之外,它还可以将您带到当前方法的所有调用方.最重要的是,它内置了一个非常好的交互式调试器.