Apollo详解之代码调试——在VSCODE中调试

前言

在学习了解Apollo各个代码模块时,不可避免地要对各个模块进行调试,由于Apollo运行在容器当中,代码结构较为复杂,使用GDB调试工具时间成本高,因此使用VSCODE的调试插件对Apollo各个模块进行调试,可提高调试效率,更加直观的了解代码运行流程。
该官方文档中提到了如何进行代码调试,但本人实际验证发现调试效率不高,因此萌发了使用VSCODE进行调试的想法。

准备工作

首先需要在VSCODE中下载插件Remote - Containers,该插件在VSCODE中可以使用户进入docker容器中进行代码编写,详情可参考这里。

在VSCODE中进入容器

首先根据Apollo官方镜像创建容器

cd apollo/
bash docker/scripts/dev_start.sh 

创建容器后,在VSCODE中通过快捷键Ctrl+Alt+p打开命令窗口,输入Remote-Containers:Attach to Running Container...,选择Apollo容器,然后就会进入Apollo容器中。
Apollo详解之代码调试——在VSCODE中调试_第1张图片
在窗口的左下角会显示当前所在的容器环境,Remote - Containers插件的各个命令也可以通过点击该区域进行选择。
进入容器后,需要在容器中重新下载VSCODE的一些必要的插件,可根据自身需要进行下载。

配置容器

通过快捷键Ctrl+Alt+p打开命令窗口,输入Remote-Containers:Open Container Configuration File,打开容器配置文件,配置容器的一些参数,如进入容器后的一些环境变量,用户等,我的配置如下:

{
	"extensions": [
		"BazelBuild.vscode-bazel",
		"DamianKoper.gdb-debug",
		"eamodio.gitlens",
		"GitHub.vscode-pull-request-github",
		"Gruntfuggly.todo-tree",
		"jeff-hykin.better-cpp-syntax",
		"mhutchie.git-graph",
		"MS-CEINTL.vscode-language-pack-zh-hans",
		"ms-vscode-remote.remote-containers",
		"ms-vscode-remote.remote-ssh",
		"ms-vscode-remote.remote-ssh-edit",
		"ms-vscode-remote.remote-wsl",
		"ms-vscode.cmake-tools",
		"ms-vscode.cpptools",
		"ms-vscode.cpptools-extension-pack",
		"ms-vscode.cpptools-themes",
		"ms-vsliveshare.vsliveshare",
		"twxs.cmake"
	],
	"workspaceFolder": "/apollo",
	"remoteUser": "hfut",
	"remoteEnv": {
		"HISTFILE": "/apollo/.dev_bash_hist"
	}
}

该配置文件可在官方文档中找到详细用法。

开始调试

打开Apollo所在的文件夹,重新编译Apollo代码,生成带调试信息的可执行文件。

bash apollo.sh build_dbg

生成调试文件,可参考launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "g++ - 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "/apollo/bazel-bin/cyber/mainboard/mainboard",
            "args": ["-d","/apollo/modules/localization/dag/dag_streaming_msf_localization.dag"],
            "stopAtEntry": false,
            "cwd": "/apollo",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            // "preLaunchTask": "C/C++: g++ 生成活动文件",
            "miDebuggerPath": "/usr/bin/gdb"
        }
    ]
}

launch.json文件以调试localization模块为例,其中programmainboard可执行文件的路径,用于运行dag文件,args为要调试模块的dag文件,若要调试其他模块,修改args即可。
注意:cwd必须为Apollo项目所在路径,否则调试过程中会找不到相关的代码文件。
快捷键F5开始调试
Apollo详解之代码调试——在VSCODE中调试_第2张图片
Enjoy!

你可能感兴趣的:(Apollo)