9

很多时候,当我在看其他人的代码时,我只想找到变量的定义位置和方式。通常我现在所做的是查找变量的类型,直到找到定义,这非常耗时。而且我想有一些工具可以帮助我解决这种日常情况。一些工具或命令中有什么建议可以帮助我完成这项任务吗?

我知道使用 GUI 并创建一个项目是自动完成的,我说的是一种无需 GUI 的方法。我只使用文本模式。我在 Linux 下运行并且使用 C/C++,但欢迎提出其他语言的建议。

非常感谢。

一个可能的解决方案

Michel 在他的一个评论中提出了一个简单有效的解决方案,再次定义变量,在这种情况下,在编译时,编译器将通知先前的定义在哪里。当然,要应用这个解决方案,我们需要事先考虑变量的局部性。

4

8 回答 8

10

您已经给出了最合适的工具:IDE。这正是IDE 擅长的事情。如果您发现没有 IDE 开发会很痛苦,为什么不想使用 IDE?

请注意,Emacs、Vim 等可以作为 IDE 工作——如果你想留在纯文本的情况下,我并不是在谈论强迫你使用 GUI 的世界,例如因为你正在使用 SSH。

(我真的不想在这里变得粗鲁。我只是认为您在没有解释原因的情况下忽略了明显的解决方案。)

于 2009-02-18T00:00:19.603 回答
8

编辑:好的,你说你正在使用 C++。我正在编辑我的回复。我会使用 C 预处理器,然后使用 grep 获取变量。它会首先出现。

cpp -I...(preprocessor options here) file.cpp | grep variable

C 预处理器将加入程序使用的所有包含,并且定义必须在文件中对该变量的任何使用之前。不是一个完美的东西,但没有 IDE 或完整的语言描述/管理工具,你只有文本。

另一种选择是使用ctags。它了解 C 和 C++ 语法(以及其他),并且可以使用命令行工具、emacs 和 vi 等搜索变量和函数。

于 2009-02-18T00:00:13.033 回答
5

我虔诚地使用 cscope 和 ctags-exuberant。在我的代码库上运行一次,然后在 Vim 中,我可以使用各种命令,如 ^] 或 [D 或 [I 或类似命令来查找给定单词的任何定义或声明。

这类似于 Visual Studio 和 Eclipse 等大型 IDE 提供的设施。

Cscope 还可以作为执行这些搜索的独立工具。

于 2009-02-18T01:24:54.750 回答
2

我使用以下三种方法之一:

  1. 我将使用CTags处理我的源代码树(每晚),然后可以轻松地使用 Vim(或其他编辑器)中的命令直接跳转到定义。
  2. 我将只使用 grep (linux) 或 findstr (windows) 来查找所有出现的变量名称或类型。定义通常很明显。
  3. 在 Vim 中,您可以在范围内向后搜索,并且经常找到您要查找的内容。
于 2009-02-18T01:37:48.353 回答
1

Grep 用于变量声明的常见模式。示例:*、&、> 或一个字母数字后跟一个或多个空格字符,然后是变量的名称。或变量名称后跟零个或多个空格字符,然后是左括号或分号。除非它是在非常奇怪的情况下定义的(例如使用某种宏),否则它每次都有效。

于 2009-02-18T00:21:26.650 回答
1

在 VIM 中,您可以使用gd查看局部变量声明或gD查看全局变量声明(如果它们已在当前文件中定义)。参考Go_to_definition_using_g

您还可以使用[i查看定义而不跳转到它,或者[I查看所有包含文件中所有出现的变量,这自然也会显示定义。

于 2009-02-18T09:35:11.297 回答
-1

如果您在 Microsoft Visual Studio 中工作(我认为您也可以将其用于 C++,但需要在 Windows 工作站上工作),则“转到定义...”有一个易于访问的右键单击菜单选项,这将需要您可以定义任何当前标记的变量、类型或方法。

于 2009-02-18T00:01:58.537 回答
-1

如果您坚持保持文本模式,您可以使用 emacs 或 vi 以及适当的插件来执行此操作。

但实际上,进入 21 世纪。

编辑:您评论说您正在通过 SSH 执行此操作,因为您需要远程服务器集群的构建速度。

在这种情况下,将驱动器安装在本地计算机上并使用 IDE,然后通过 SSH 启动构建。

于 2009-02-18T00:08:53.700 回答