文章目录
- 0. 概要
- 1. 配置C++额外头文件目录 includePath
- 2. 解决C++代码查找所有引用“Find all reference”慢的问题
- 3. 配置远程调试
- 4. 使用VSCode的正则表达式批量替换文本
0. 概要
本文简要介绍了通过配置VSCode优化C++开发体验的四个要点:
- 设置额外头文件路径以完善代码智能跳转;
- 利用正则表达式进行高效的文本批量替换;
- 配置远程调试以方便跨机调试;
- 使用gtags插件加速“查找所有引用”的功能。
1. 配置C++额外头文件目录 includePath
本节将介绍如何在VSCode中设置C++代码所需的额外头文件(include)目录。
VSCode使用c_cpp_properties.json
文件来管理C/C++项目的配置。通过这个文件,我们可以添加项目所需的头文件路径。
步骤如下:
-
打开VSCode的C/C++配置文件
按下Ctrl + Shift + P
,然后搜索并选择C/C++: Edit Configurations (UI)
或C/C++: Edit Configurations (JSON)
。这将打开项目的.vscode/c_cpp_properties.json
文件。 -
修改includePath字段
在c_cpp_properties.json
文件中,你会看到一个includePath
字段。将你的ARM64项目的头文件路径添加到这里。例如:{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**","/path/to/your/arm64/headers"],"defines": [],"compilerPath": "/path/to/aarch64-linux-gnu-g++","cStandard": "c11","cppStandard": "c++14","intelliSenseMode": "linux-gcc-arm64"}],"version": 4 }
上述配置中:
${workspaceFolder}/**
:这是当前工作区下的所有子文件夹。VSCode会自动在这些文件夹中查找头文件。"/path/to/your/arm64/headers"
:这里需要替换成实际的ARM64项目的头文件目录的路径。
2. 解决C++代码查找所有引用“Find all reference”慢的问题
在使用VSCode编写C++代码时,可能会遇到右键点击“Find all references”功能响应缓慢且结果不够准确的问题。为了解决这一问题,可以考虑使用与Global组件关联的gtags插件。
步骤如下:
-
安装gtags插件
在VSCode中安装gtags插件是一种有效的解决方案。尽管C/C++ GNU Global插件也是一个不错的选择,但其效果可能会因环境和设置而异。建议根据个人情况选择合适的插件。 -
在Ubuntu环境下安装Global
在Ubuntu系统中,可以通过以下命令安装Global工具:sudo apt install global
-
生成gtags索引
在C++项目的源代码根目录下运行以下命令,以生成gtags索引文件:gtags .
这会在当前目录下生成一个名为
GTAGS
的索引文件,其中包含代码中各种符号(如函数、变量、类等)的位置信息和上下文。 -
使用“Find all references”功能
完成上述步骤后,重新选择“Find all references”,你会发现检索速度明显加快,且结果更加准确。
3. 配置远程调试
要配置远程调试,我们需要对上述配置进行一些调整,以便能够连接到远程机器上运行的gdb实例。以下是一个简单的示例,假设我们有一个远程服务器,我们在该服务器上运行gdb,并且我们的本地机器可以访问这个服务器。
以下是修改后的配置文件,用于与远程gdb实例通信:
{"version": "0.2.0","configurations": [{"name": "Remote (gdb)","type": "cppdbg","request": "launch","targetArchitecture": "x86_64", // 如果目标架构不同,请指定相应的架构"program": "${workspaceFolder}/build/test","args": ["--lidar-ip","172.168.1.10", "--lidar-udp-port","8010", "--frame-number", "100", "--output-filename","test.pcd"],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerServerAddress": "remote-host:2345", // 替换 remote-host 为远程主机地址,端口号根据实际设置"setupCommands": [{"description": "Enable GDB pretty printing","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "Set disassembly style to Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "start_remote_gdb", // 这里需要定义一个任务来启动远程gdb"miDebuggerPath": "/usr/bin/gdb" // 这个路径可能不需要,取决于你的配置}]
}
简单说明:
- miDebuggerServerAddress:设置了gdb服务器的地址和端口。你需要替换
remote-host
为实际的IP地址或主机名,并且根据实际情况更改端口号(默认是2345)。 - preLaunchTask:这个字段指向了一个预启动任务,该任务负责在远程主机上启动gdb并监听特定端口。你需要在VSCode的任务配置中定义这个任务。
- targetArchitecture:指定了目标程序的架构。如果目标程序是在不同的架构上运行的,则需要正确地设置此项。
- miDebuggerPath:这个字段指定了gdb的路径,在远程调试的情况下,这个字段可能不需要,因为gdb已经在远程主机上运行了。
为了使此配置生效,你需要确保远程主机上的gdb已经设置好并监听指定端口,同时确保网络允许从你的开发机到远程主机的连接。此外,还需要配置VSCode的任务来启动远程gdb。这通常涉及到SSH连接或其他方式将命令发送到远程主机。
4. 使用VSCode的正则表达式批量替换文本
本节将介绍如何在VSCode中使用正则表达式进行批量替换文本。
示例
假设你有以下文本:
foo123
foo456
bar789
你想将所有以foo
开头的单词替换为bar
。你可以按照以下步骤操作:
- 在查找框中输入:
\bfoo\w*
- 在替换框中输入:
bar
- 点击“全部替换”按钮。
替换后的文本将变为:
bar
bar
bar789
解释
- 开启正则表达式模式:在查找和替换面板的左侧,有一个小的正则表达式图标(
.*
)。点击这个图标以启用正则表达式模式。 - 查找框:在查找框中输入你想要匹配的正则表达式。例如,如果你想匹配所有以
foo
开头的单词,可以使用\bfoo\w*
。这个正则表达式的解释是:\b
匹配单词边界,foo
匹配字面字符串,\w*
匹配零个或多个字母、数字或下划线字符。 - 替换框:在替换框中输入你想要替换成的内容。你可以使用
$1
、$2
等符号来引用正则表达式中的捕获组。例如将foo
替换为bar
,可以直接输入bar
。