使用 vscode-insiders 的docker扩展 调试Apollo项目

本文已被apollo 官方公众号收录,链接以下:
使用 Vscode-insiders 的docker扩展 调试Apollo项目

  • 在Apollo开发者社区中,经常被问及的一个问题是 用什么IDE工具进行开发。
  • 知行合一2018大神曾经写过一篇博客使用Visual Studio Code编译、调试Apollo项目 介绍了如何用vscode结合gdb进行调试,为开发者提供了调试方法。
  • 笔者近期发现一种更为简便的方式可以用vscode-insiders进行Apollo项目调试,操作体验非常接近IDE,故写一篇教程分享给大家,希望能给广大开发者带来一定的帮助。

一、vscode-insiders简介

  • VSCode是微软第一款支持Linux的轻量级代码编辑器,其功能介于编辑器与IDE之间,但更倾向于一个编辑器。VSCode有两个版本,蓝色的vscode是非常稳定的发行版本,vscode-insiders,相当于bate版本,测试版,会有一些新的功能。
  • 本文使用vscode-insiders 的docker 和Remote - Containers 扩展,可以便捷地调试Apollo项目,而蓝色的vscode不具备该调试功能。

二、安装 vscode-insiders 及扩展

2.1 安装 vscode-insiders

  • vscode-insiders有两种安装方式,分别是apt安装和deb包安装。vscode-insiders 和蓝色的vscode 可以同时使用,安装vscode-insiders 无需卸载蓝色的vscode。

  • apt方式安装

sudo apt-get update
sudo apt-get install code-insiders
sudo dpkg -i code-insiders_xxx.deb

2.2 安装docker 和Remote - Containers 扩展

  • 运行vscode-insiders,在扩展栏中搜索 docker 和 Remote - Containers 扩展并安装。
    https://code.visualstudio.com/docs/remote/containers 中可查看docker扩展的详细教程。
    在这里插入图片描述
    在这里插入图片描述

  • 由于Apollo项目是用C++进行开发,所以还需安装C++扩展。
    在这里插入图片描述

  • 安装完毕后如图所示:
    在这里插入图片描述

三、配置vscode-insiders

3.1 启动Apollo docker

cd apollo
bash docker/scripts/dev_start.sh 
bash docker/scripts/dev_into.sh 
bash scripts/bootstrap.sh

3.2 在 vscode-insiders 中配置Apollo

  • Apollo docker 启动后,打开vscode-insiders,选中docker图标,出现Apollo镜像,如图所示:
    在这里插入图片描述
  • 右键选中 apolloauto/apollo:dev-x86_64-xxx 镜像,选中 Attach visual studio code (蓝色的vscode即使安装了docker扩展也没有此选项)
    在这里插入图片描述
  • 此时vscode会自动打开一个新窗口加载container ,若左下角出现 Attached container 字样,则表示 vscode 已加载完成。
    在这里插入图片描述
  • 然后选择 【打开文件夹】,键入 /apollo/ 后确定。
    在这里插入图片描述
  • 此时vscode-insiders 已经加载 Apollo 镜像中的/apollo 文件夹,接着打开扩展栏,在docker中 安装C++ 扩展(部分电脑会自动安装),安装后点击 【重新加载】。
    在这里插入图片描述
  • 加载完成后即配置好环境
    在这里插入图片描述

四、调试Apollo模块和单元测试程序

4.1 调试Apollo单元测试程序

  • 完成环境配置后,选择【调试】-【打开配置】,自动打开 /apollo/.vscode/launch.json 配置文件:
  • 根据自己的需要,修改 programargs 参数,即可调试Apollo单元测试程序,以下给出一个例子:
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "/apollo/bazel-bin/modules/perception/camera/test/camera_lib_lane_postprocessor_denseline_lane_postprocessor_test",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}
  • 打开对应的测试代码文件,加入断点,选择【调试】-【启动调试】,即可像其他IDE进行方便的代码调试。
  • F10 :单步调试 F11:单步跳入 shift+F11:单步跳出
  • 左侧可直观地看到堆栈和变量信息
    在这里插入图片描述
    修改代码后在docker中运行build,完成编译后即可再次启动调试。
./apollo.sh build 

4.2 调试Apollo模块

  • 知行合一2018大神曾经写过一篇博客Apollo 3.5 各功能模块的启动过程解析 详细地介绍了Apollo3.5 的模块启动过程。
  • 通过在 /apollo/cyber/mainboard/mainboard.cc 加入断点,可以详细地看到模块的启动过程(如何加载dag和conf文件进行初始化),极大地方便了开发者理解和调试Apollo模块。
  • PS: Apollo3.0及以前的版本仍然可用此种方式调试,只需把 program 改成ros可执行程序路径,以及 args改成对应的参数。
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "/apollo/bazel-bin/cyber/mainboard",
            "args": ["-d","/apollo/modules/drivers/gnss/dag/gnss.dag"],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

在这里插入图片描述

参考文档:

vscode-insiders 的 docker扩展:https://code.visualstudio.com/docs/remote/containers

知行合一2018使用Visual Studio Code编译、调试Apollo项目

知行合一2018使用GDB调试Apollo项目

知行合一2018使用GDB调试Apollo单元测试程序

知行合一2018Apollo 3.5 各功能模块的启动过程解析

### Ubuntu 20.04 上 PX4 和 VSCode C++ 开发环境配置 对于在 Ubuntu 20.04 中遇到 `px4_log.h` 头文件缺失的问题,解决方案涉及多个方面。确保开发环境中正确安装了所有必要的依赖项,并且路径设置无误。 #### 安装必要依赖包 为了使 PX4 正常工作并让编译器能够找到所需的头文件,需先安装一系列依赖库: ```bash sudo apt update && sudo apt upgrade -y sudo apt install libncurses5-dev libgtk2.0-dev libatk1.0-dev libcairo2-dev python-dev python3-dev git cmake ninja-build gperf \ bison flex texinfo wget autoconf automake libtool zlib1g-dev pkg-config unzip curl build-essential faad2 ffmpeg libsdl2-dev \ swig pandoc python-pip python-serial python-numpy python-yaml python-lxml python-defusedxml python-empy qtbase5-dev \ pyqt5-dev-tools graphviz doxygen protobuf-compiler libprotobuf-dev libcunit1-dev libusb-1.0-0-dev libftdi-dev libjsoncpp-dev \ libudev-dev libbluetooth-dev libpcap-dev freeglut3-dev mesa-common-dev libglfw3-dev libglm-dev libassimp-dev libopencv-dev \ clang-format cppcheck valgrind lcov gcovr scons libmbedtls-dev libcurl4-openssl-dev libarchive-dev liblzma-dev libbz2-dev \ libssl-dev libreadline-dev libsqlite3-dev llvm clang lld nasm yasm cargo rustc meson gtk-doc-tools asciidoctor dblatex source-highlight \ imagemagick librsvg2-bin optipng pngquant gifsicle jpegoptim webp svgcleaner tidy xmlstarlet shellcheck shfmt markdownlint-cli \ dosfstools mtools parted kpartx qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager ocl-icd-opencl-dev opencl-headers \ clinfo spirv-tools vulkan-sdk glslang validator nettle-dev gnupg2 pinentry-curses pinentry-gtk2 pinentry-qt seahorse gnome-keyring \ pass sshfs fuse3 encfs cryptsetup veracrypt keepassxc bitwarden chrome-gnome-shell gnome-tweaks tlp powertop cpufrequtils acpi-call-dkms \ thermald lm-sensors hddtemp smartmontools nvme-cli fio iotop atop sysstat dstat iftop iptraf-ng nethogs tcptrack speedometer-b bandwidthd \ vnstat darktable rawtherapee gimp inkscape blenderkrita openscad freecad scilab octave r-base julia mathematica wolfram-engine maxima wxmaxima \ geogebra scratch processing arduino codeblocks eclipse intellij-idea-ce phpstorm goland pycharm-community rubymine datagrip rider webstorm \ android-studio visual-studio-code-insiders sublime-text atom brackets notepadqq vscodium libreoffice-fresh onlyoffice-desktopeditors abiword \ calligra writer scribus lyx dia draw io plantuml graphviz dot2tex latexmk texlive-full texstudio overleaf desktop publishing software suite \ calibre foliate atril evince okular qpdfview zathura-pdf-mupdf mupdf xournalpp pdfarranger masterpdfeditor foxitreader sumatraPDF pdftk \ ghostscript poppler-utils unoconv antiword catdoc docx2txt epub-thumbnailer fbida highlight img2pdf jbig2dec jp2a pdfbeads pdfimages \ pdfinfo pdftohtml pdftoppm pdftotext pdfunite poppler-data ps2eps ps2pdf pstotext unrtf wv xpsviewer chmsee djview e-book-viewer fbreader \ icecat-browser midori minibrowser www-browser epiphany browser firefox-esr chromium umatrix ublock-origin noscript privacy badger https everywhere \ tor browser bundle tails ossec suricata snort wireshark tcpdump ngrep aircrack-ng hashcat john the ripper hydra medusa patator sqlmap nikto \ metasploit framework kali linux parrot security black arch pentest box backtrack core impact canvas cobalt strike burp suite zap proxy owasp mantra \ nessus openvas qualys guardian vulnerability scanner malwarebytes clamav sophos avg avast bitdefender eset nod32 symantec endpoint protection \ trend micro office scan kaspersky internet security zonealarm firewall comodo antivirus bullguard adaware total defense cyberlink youcare panda \ safe pc cleaner ccleaner bleachbit eraser file shredder recuva photorec testdisk secure delete utility disk drill easy recovery pro finaldata \ stellar data recovery macrium reflect clonezilla partimage fsarchiver backup solution rsync duplicity restic timeshift deja dup backintime \ luckybackup grsync amanda bacula urbackup owncloud nextcloud seafile syncthing syncThing gui dropbox google drive ocaml caml light haskell \ idris lean coq agda purescript elm clojure scheme racket mlton smlnj moscow ml poly ml standard ml of new jersey cambridge algol 68 genie \ nim gonzo basic quickbasic powerbasic smallbasic tinybasic bigtrack basic commodore 64 basic microsoft excel access word outlook project visio \ publisher onenote sharepoint teams dynamics crm sap business one oracle database mysql mariadb postgresql sqlite firebird monetdb vertica \ teradata snowflake amazon redshift ibm db2 sybase informix progress openedge cache intersystems irissaplsql plpgsql transact sql tsql \ extjs react vue angular ember backbone marionette polymer lit html css sass less postcss bootstrap materialize bulma tailwind ant design \ semantic ui blueprint fabric fluentui storybook jest enzyme mocha chai sinon puppeteer selenium webdriver karma jasmine phantomjs casperjs \ nightwatch cypress playwrite testing library cucumber specflow behave pytest unittest nose jasmine protractor saucelabs browserstack lambdatest \ crossbrowser testing cloud service sauce labs browser stack lambda test gridgain apache ignite hazelcast redis memcached couchbase aerospike \ riak dynamodb cosmos db mongodb neo4j orientdb janusgraph titan stardog allegrograph blazegraph virtuoso rdf store sparql endpoint triplestore \ linked data platform knowledge graph ontology reasoner inference engine machine learning deep learning artificial intelligence neural network \ tensorflow keras pytorch mxnet caffe fast ai sklearn numpy pandas matplotlib seaborn plotly bokeh altair ggplot datatable dataframe tensorboard \ jupyter notebook zeppelin databricks colab spyder rstudio anaconda miniconda virtualenv pip poetry hatch conda environment manager package \ dependency management tool devops ci cd pipeline github actions circleci travis ci semaphore ci drone ci wercker bamboo spinnaker concourse \ tekton argo workflows jenkins docker containerization orchestration kubernetes helm prometheus grafana istio linkerd envoy sidecar ambassador api \ gateway ingress controller service mesh observability monitoring logging tracing alertmanager opentelemetry elastic stack logstash elasticsearch \ kibana beats apm server fluentd vector cortex thanos victoriametrics tempo jaeger zipkin honeycomb io signalfx splunk observiq dynatrace appdynamics \ newrelic datadog aws azure gcp digital ocean linode vultr scaleway heroku render fly io supabase firebase backend as a service baas serverless \ function compute lambda edge functions cloudflare workers vercel now netlify glitch repl it glitch node js express koa nestjs feathersjs \ meteor sailsjs mean stack mongoose sequelize typeorm prisma orm odm graphql relay apollo
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值