目录
因为apollo 中bazel 的环境依赖主要设置的是本地link,因此如果想在host 机器上搭建cyberRT 的debug 环境会很麻烦,这里主要讲的是在docker环境下的debug,效果和在host 下搭建一致。
安装docker engine
Install Docker Engine on Ubuntu
初始化docker 环境
bash apollo/docker/scripts/dev_start.sh
检查docker 环境是否启动
docker ps
安装vscode docker相关环境
进入docker
在vscode 插件中找到容器
选择attach vscode
选择前面创建好的容器进入
成功进入docker 容器内部,可以并且可以看到挂载进来的代码文件
安装 docker 下的vscode 插件
配置docker 下vscode debug 环境
找到.vsocde
创建launch.json
我这里使用的是gdb,如果你也是使用gcc/g++编译器就不需要改下面的配置,如果是使用llvm,那需要把gdb改成lldb
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch Run",
"preLaunchTask": "Bazel Build (Run)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bazel-bin/${relativeFileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb"
},
{
"name": "(gdb) Launch Run Opt",
"preLaunchTask": "Bazel Build (Run Opt)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bazel-bin/${relativeFileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb"
},
{
"name": "(gdb) Launch Debug",
"preLaunchTask": "Bazel Build (Debug)",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bazel-bin/${relativeFileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb"
},
{
"preLaunchTask": "Bazel Build (Debug)",
"name": "Codegdb",
"type": "gdb",
"request": "launch",
"program": "${workspaceFolder}/bazel-bin/${relativeFileDirname}/${fileBasenameNoExtension}",
"args": [],
"sourceMap": {
".": "${workspaceFolder}"
},
},
{
"name": "Linux: g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/bazel-bin/${relativeFileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Bazel Build (Debug)",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
创建tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Bazel Build (Debug)",
"type": "shell",
"command": "bazel build --cxxopt='-std=c++17' ${relativeFileDirname}:${fileBasenameNoExtension} -c dbg",
"windows": {
"command": "bazel build --cxxopt='-std=c++17' ${relativeFileDirname}:${fileBasenameNoExtension} --experimental_enable_runfiles -c dbg"
},
"osx": {
"command": "bazel build --cxxopt='-std=c++17' ${relativeFileDirname}:${fileBasenameNoExtension} -c dbg --spawn_strategy=local",
},
"group": {
"kind": "build",
"isDefault": true
},
},
{
"label": "Bazel Build (Run)",
"type": "shell",
"command": "bazel build --cxxopt='-std=c++17' ${relativeFileDirname}:${fileBasenameNoExtension}",
"windows": {
"command": "bazel build --cxxopt='-std=c++17' ${relativeFileDirname}:${fileBasenameNoExtension}"
},
"osx": {
"command": "bazel build --cxxopt='-std=c++17' ${relativeFileDirname}:${fileBasenameNoExtension}",
},
"group": {
"kind": "build",
"isDefault": true
},
},
{
"label": "Bazel Build (Run Opt)",
"type": "shell",
"command": "bazel build --cxxopt='-std=c++17' ${relativeFileDirname}:${fileBasenameNoExtension} -c opt",
"windows": {
"command": "bazel build --cxxopt='-std=c++17' ${relativeFileDirname}:${fileBasenameNoExtension} -c opt"
},
"osx": {
"command": "bazel build --cxxopt='-std=c++17' ${relativeFileDirname}:${fileBasenameNoExtension} -c opt",
},
"group": {
"kind": "build",
"isDefault": true
},
}
]
}
开始debug
打开cyberRT下面的一个测试文件夹
cd /apollo/cyber/example
打开talker.cc, 随意加两个断点,然后按F5