在 Visual Studio 中导航 C++ 代码

Visual Studio 提供了一套工具,可用于快速有效地导航代码库。

打开包含的文件

右键单击 #include 指令,然后选择“转到文档”。 或者,选择 F12 同时光标悬浮在该行上以打开文件。

某些 include 语句的上下文中 C++“转到文档”菜单选项的屏幕截图。

切换标头/代码文件

可以在头文件及其对应的源文件之间切换。 右键单击文件中的任意位置并选择“切换标头/代码文件”。 或者,可以选择 Ctrl+K、Ctrl+O

转到定义/声明

在编辑器中右键单击码位元素,然后选择“转到定义”,或选择 F12,即可导航到码位元素的定义。 同样,右键单击打开上下文菜单,或选择 Ctrl+F12,即可导航到声明。

右键单击码位元素时出现的选项的屏幕截图。包括“转到定义”、“速览定义”和“转到声明”。

转到

“转到”是指一组导航功能,其中每个功能都会根据指定的筛选器提供特定结果。

使用 Ctrl+, 即可打开“转到”。 此操作会在正在编辑的文档上创建搜索框。

打开“转到”时显示的搜索框的屏幕截图。有一个文本框,用于搜索词以及类型、最近使用的文件等筛选器。

“转到”包括以下搜索筛选器

  • 转到行 (Ctrl+G):快速跳转到当前文档中的其他行。
  • 转到全部 (Ctrl+,) 或 (Ctrl+T):搜索结果包括后面所有内容。
  • 转到文件 (Ctrl 1, F):搜索解决方案中的文件。
  • 转到类型 (Ctrl 1, T):搜索结果包括:
    • 类、结构和枚举。
    • 接口和委托(仅适用于托管代码)。
  • 转到成员 (Ctrl 1, M):搜索结果包括:
    • 全局变量和全局函数。
    • 类成员变量和成员函数。
    • 常量。
    • 枚举项。
    • 属性和事件。
  • 转到符号 (Ctrl 1, S):搜索结果包括:
    • “转到类型”和“转到成员”的结果。
    • 所有剩余的 C++ 语言构造(包括宏)。

首次使用 Ctrl + 调用“转到”时,会激活“转到全部”(搜索结果中无筛选器)。 然后,可以使用搜索框附近的按钮选择所需的筛选器。 可以使用相应的键盘快捷方式调用特定筛选器。 执行此操作会打开已预先选定该筛选器的“转到”搜索框。 所有键盘快捷方式均可配置。

要应用文本筛选器,请使用该筛选器的相应字符(后跟空格)启动搜索查询。 (“转到行”可以选择省略空格)。这些文本筛选器有:

  • 转到全部:(无文本筛选器)
  • 转到行号::
  • 转到文件:f
  • 转到类型:t
  • 转到成员:m
  • 转到符号:#

以下示例显示使用“f”筛选器的“转到文件”操作的结果:

“转到文件”结果的屏幕截图。用户键入了“f str”但显示 string_utils.cpp 和 string_utils.h,因为它们在名称中包含 str。

要查看文本筛选器列表,请键入 后跟空格的 ?。 还可以使用“编辑”菜单访问“转到”命令。 这是另一种主要的“转到”键盘快捷方式的方法。

“转到”菜单的屏幕截图,其中包含“转到行(Ctrl + G)”、“转到文件(Ctrl + 1、Ctrl + F)”等选项。

“查找”或“在文件中查找”

可以使用“查找” (Ctrl+F) 或“在文件中查找” (Ctrl+Shift+F),对解决方案中的任何内容运行文本搜索。

“查找”范围可以是某一选定范围、当前文档、所有打开的文档、当前项目或整个解决方案。 可以使用正则表达式和纯文本。 它还会在 IDE 中自动突出显示所有匹配项。

“查找”对话框的屏幕截图。用户已搜索频道。文件中的黄色高亮显示找到频道的所有位置。

“在文件中查找”是“查找”的功能更加强大的版本,它在“查找结果”窗口中显示结果。 可以搜索外部代码依赖项、按文件类型进行筛选等。

“查找和替换”对话框的屏幕截图。选择了“在文件中查找”页。显示了用于大小写、全字匹配等的选项。

可以在两个窗口中整理“在文件中查找”结果。 可以一起追加多个搜索的结果。 选择某一结果,即可转到文件中的该位置。

显示“在文件中查找”搜索结果的屏幕截图,其中列出了包含与搜索字符串匹配的文本以及每个匹配项的摘录的文件。

有关详细信息,请参阅 Visual Studio 文档中的在文件中查找

查找所有引用

要在代码库中查找符号的所有使用情况,请将脱字号放在符号中或符号后面,然后右键单击并选择“查找所有引用”。 可以通过多种不同方式对结果进行筛选、排序或分组。 结果将以增量方式填充。 它们被分类为“读取”或“写入”,用于帮助查看解决方案中的内容,而不是系统标头或其他库。

“查找所有引用”结果的屏幕截图,其中显示了找到符号的行、它所在的文件和项目等。

可以按以下类别对结果进行分组:

  • 项目,然后定义
  • 仅定义
  • 定义,然后项目
  • 定义,然后路径
  • 定义、项目,然后路径

筛选结果

要对结果进行筛选,请将鼠标悬停在列上,然后选择弹出的筛选图标。 可以筛选第一列的结果,以隐藏不需要的字符串和注释引用等内容。

筛选选项的屏幕截图。包括“已确认”、“未确认”、“注释中”和“未处理”。每个结果都显示应用于该类别的结果数。

  • 确认的结果:对要搜索的符号的实际代码引用。 例如,搜索名为 Size 的成员函数将返回对 Size 的所有引用,该引用与定义 Size 的类的范围匹配。

  • 取消确认的结果:默认情况下,此筛选器处于关闭状态,因为它显示的符号,名称与要搜索的符号匹配但不是该符号的实际引用。 例如,如果你有两个类,每个类都定义一个名为 Size 的成员函数,并且你在 Class1 对象的引用上运行 Size 搜索,则对 Class2Size 的任何引用都显示为取消确认。

  • 未处理的结果:可能需要一些时间才能在大型代码库上完成“查找所有引用”操作,因此“结果列表”在此处显示“未处理”结果。 未处理的结果与要搜索的符号的名称匹配,但尚未确认为实际代码引用。 启用此筛选器,可以更快获得结果。 某些结果可能不是实际引用。

对结果进行排序

通过选择任何列,可按该列对结果进行排序。 通过再次选择该列,可在升序或降序之间进行切换。

使用编辑器窗口上方的“导航栏”,可以导航到文件中类型的定义,或者导航到类型成员。

编辑器窗口上方导航栏的屏幕截图。它显示 cryptlib > ChannelSwitch > ChannelMessageSeriesEnd()。

请参阅