我有时需要修改 OSS 代码或其他人的代码(通常是基于 C 的,但有时是 C++/Java)并发现自己在遵循代码流并尝试理解系统时“grep”类型、函数声明等的标头. 是否存在有助于代码浏览的好工具。我希望能够单击一个类型并被带到声明中,或者单击一个函数名并被带到它的实现中。我在一个 linux 机器上,所以像“只使用 Visual Studio”这样的回复不一定对我有用。谢谢!
27 回答
您无法得到比SourceInsight更好的东西。
Doxygen可以生成一组包含源浏览器的网页。不像 IDE 那样花哨,但它只需要一个 Web 浏览器。
我听说过关于OpenGrok的惊人事情。我知道我所在单位的另一个团队使用它,他们发现它非常方便。从其网站:
OpenGrok 是一个快速且可用的源代码搜索和交叉引用引擎。它可以帮助您搜索、交叉引用和导航您的源代码树。它可以理解各种程序文件格式和版本控制历史,如 Mercurial、Git、SCCS、RCS、CVS、Subversion、Teamware、ClearCase、Perforce 和 Bazaar。换句话说,它可以让你深入了解(深入了解)开源,因此得名 OpenGrok。它是用 Java 编写的。
我在内核空间做了一些工作,并不断返回范围。
例如:
$ cd /usr/src/redhat/BUILD/kernel-version
$ cscope -R -p4
Find this C symbol:
Find this function 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:
在处理别人的项目时,我通常“生活”在 c-scope 中。我用它用“gvim”(我的 IDE)打开文件,编辑东西,然后退出“返回”到 c-scope,它帮助我保持任务专注。
我相信 cscope 可以配置为与 vim 和 emacs 一起使用,尽管我看到人们也使用其他编辑器。
祝你好运。
ctags 非常有用。涉及两个步骤。首先在所有源代码和包含目录上运行程序 ctags。这会在本地目录中创建一个名为“tags”的文件。如果您的所有源代码都在一个目录中,ctags *.c *.h 就可以了。当您在多个目录中使用源代码时,值得在多个位置运行 ctags。然后,在 vi 中,将光标放在任何函数、定义的类型或变量上,使用 ctl-] 转到该实体的定义。如果您使用 emacs,请使用 etags。
选择 Doxygen 并将 EXTRACT_ALL 设置为 YES。它简单而强大。一旦你喜欢它,你就可以在所有平台和语言上坚持下去。
多氧是美妙的。我必须处理几个我以前从未参与过的遗留代码库,这真是太棒了(即使代码库没有使用 Doxygen 格式记录)。
我支持使用doxygen。
这个工具生成了一个类似 html 页面的 javadoc,允许索引所有代码,在其中浏览(这个函数在哪里使用,以及由哪个函数......),就像你可以在 IDE 中做的那样。让它工作很容易。
我曾经维护一个 15 年的 C 项目的 2000 个 C 代码文件。我花了一个小时用 doxygen 索引代码,并为其他开发人员提供生成的文档。(我知道,这句话听上去像是加法,但确实是这样……真是个不错的工具)
一个很棒的工具,适用于所有类 C 语言。
如果您正在寻找简单且无处不在的东西,请尝试etags。它不会像重量级工具那样好,但它几乎适用于所有东西,并且可以与 emacs 一起使用。对 vi 使用 ctags。
如果您参与的项目混合了 HLL 代码和 Assembly,我会推荐 Opengrok,我最近转移到 Opengrok 并发现它很棒,在我看来,Opengrok + Firefox + Extensions 是最好的组合,一些 firefox 扩展像剪贴簿等允许您在浏览代码时修改和添加注释,这主要是为了通过代码“浏览”而不是动态修改它。
cscope一直是我的最爱。也有cbrowser,但我没试过。ctags 也用的很多。
可以在SD Source Code Search Engine找到对语言敏感的源代码搜索引擎。它可以同时处理多种语言。可以对特定语言的模式或跨语言的模式执行搜索(例如“查找涉及 TAX 的标识符”)。通过对语言标记敏感,可以减少误报的数量,从而为用户节省时间。它理解 C、C++、C#、COBOL、Java、ECMAScript、Java、XML、Verilog、VHDL 和许多其他语言。
我使用 Anjuta IDE。不错。不确定它与 Eclipse IDE 相比如何。
任何 IDE 都可以正常工作。Netbeans 和 Eclipse 基于 java,但有 C/C++ 插件
我从这里使用 Source-Navigator(TM) 。这是相当令人印象深刻的,并有很大帮助。它是用 Tcl/Tk 编写的,可作为 Windows 的可执行文件和可在 *nix 上构建的源代码。
我使用 doxygen 取得了巨大的成功。为了获得最佳结果(特别是在为 c++ 创建文档时)安装 graphviz 并在您的 doxygen 配置文件中启用。
这将自动生成链接到 html 文档的其余部分的依赖关系图和类图。
即使您不是开发人员,也可以选择Source Insight
如果你是,它是必须的:)
我发现ID Utils非常方便。它就像一个即时递归 grep。有一堆 vim 食谱可以搭配它。
IntelliJ 作为 Linux 下的源代码浏览器相当不错。它对在源和函数声明之间跳转提供了很好的支持。没有用 C/C++ 代码尝试过,但它适用于 Ruby 和 Java。
我使用 kscope,它在后台使用 cscope,但也提供函数列表等。似乎也能很好地处理像 linux 内核这样的大型项目。kscope 主页对它做什么和不做什么有一个很好的简明描述。
我使用对 C++ 的理解。它是处理大量代码的非常方便的工具。它还可以计算代码统计和绘制调用图。一定有!
示波器。(想修改其他范围的帖子,但我还没有业力)。
- 全局搜索和替换
- 查找调用函数的所有位置
- 查找函数调用的所有位置
- 查找包含此文件的文件。
非常简单的用法:$ cscope -R
如果您不知道 vi,请将您的 EDITOR 和 VIEWER 环境变量更改为您喜欢的编辑器。
我使用并喜欢免费软件工具GNU global。