3

使用 gcc 时,有没有人推荐在头文件中查找定义的方法?使用 MSVC 时,我只需右键单击并选择“转到定义”,这非常好。

我使用过 netbeans + gcc,它确实有代码帮助,包括到定义的超链接,所以这是一种选择。但是,我想知道是否还有其他具有该功能的 IDE,以及不使用 IDE 时的最佳方法。

4

4 回答 4

3

您可以运行Doxygen来生成基于 HTML 的源代码浏览器。这不需要使用 Doxygen 样式的文档对代码进行注释。它适用于多种语言,包括C++JavaMarkdown.md文件转到“相关页面”)。

这是一种从命令行配置和启动 Doxygen 的方法(在 Linux 上测试)...

## basic
echo -e "SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n RECURSIVE=YES\n" |doxygen -
xdg-open html/index.html

或者

## include diagrams and non-public content -- and launch browser immediately
echo -e "HAVE_DOT=YES\n CALL_GRAPH=YES\n CALLER_GRAPH=YES\n SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n EXTRACT_PRIVATE=YES\n EXTRACT_STATIC=YES\n RECURSIVE=YES\n SEPARATE_MEMBER_PAGES=YES\n GENERATE_LATEX=NO\n EXCLUDE_SYMLINKS=YES" |doxygen - && chromium-browser --new-window html/index.html

有一个名为doxywizard的配套程序,可让您浏览许多可用于自定义生成的 HTML 的配置选项。或者,您可以运行doxygen -g以创建初始配置文件(其中包括详细提示)。

我推荐以下非默认选项来生成源浏览器:

SOURCE_BROWSER=YES ## display source code
EXTRACT_ALL=YES ## display all items (not just "documented" ones)
RECURSIVE=YES ## include source found in subdirectories
SEPARATE_MEMBER_PAGES=YES ## optional -- each class member has its own page

启动主网页后,您可以浏览到感兴趣的来源(或使用搜索功能)。来源与相关声明的可点击链接交叉引用。


我遇到过几次这个问题:doxygen 可以创建非常长的文件名,Linux 加密的主目录限制为 143 个字符。要解决此问题,您可能必须html在家外编写文件夹。

一个快速而肮脏的解决方案是链接html到一个文件夹/tmp/dev/shm- 也可能chmod是为了更好的数据安全性。

于 2012-01-16T04:17:52.813 回答
2

尝试CScope。与 Emacs 模块一起,xscope您可以告诉 Emacs to M-x cscope-find-global-definition,这将跳转到定义符号的文件。非常方便。

当然,诸如 Eclipse 或 KDevelop 或 Code::Blocks 之类的 IDE 也应该具有这样的功能。

于 2012-01-16T00:52:26.827 回答
1

Eclipse CDT 是独立于平台的并且具有这样的特性(还有更多)。它索引您在项目中拥有的所有内容(库+您自己的),因此您可以找到任何声明的定义(或者,我应该说,任何声明)。您可以将 Eclipse 视为花哨的面向 C++ 的文本编辑器,具有使用您的 makefile 启动 make(nmake.exe 或其他)的附加功能。我使用来自 WinSDK 的 Eclipse + MS cl.exe 编译器——它们一起工作就像魅力一样。我从 Eclipse 运行 nmake.exe,Eclipse 将 nmake.exe 控制台很好地重定向到特殊的 IDE 窗口。它还解析编译器的输出并自动突出显示有问题的行。唯一需要做的就是在 Eclipse 中为 nmake.exe 设置环境变量。

于 2012-01-16T03:22:56.973 回答
0

cscope是我最喜欢的用于理解 C 代码的工具之一,但它可能无法很好地转化为 Windows 世界。

exuberantctags是查找数十种语言定义的绝佳工具。大多数合理的编程编辑器都提供了一些接口来调用ctags定义信息。(vim例如,允许您使用^]来查找符号的定义并^T弹出定义堆栈。)您可以ctags -R .使用编辑器构建数据库并查找定义。(例如,vim -t foo将在数据库中查找foo标记ctags并跳转到该文件和行。)

GNUidutils包提供了一些很好的实用程序,类似于ctags查找各种语言中符号的使用集成在大多数编辑器中不如ctagscscope但它可能更容易编写工具。您可以使用或类似查找来构建数据库并查找符号。mkid .gid foolid foo

我发现这三个工具提供了足够不同的功能,我经常使用这三个工具。可以非常快速ctags地搜索源代码,可以帮助找到调用者和被调用者,并且(尤其是)对于获取其他工具无法解决的复杂情况的一些提示很有用。(也不太了解令牌粘贴,但让我自己近似一个解决方案。)vimcscopegidgid -s ...ctagscscopegid -s

于 2012-01-16T03:33:03.393 回答