APM断点和单步调试(WIN)

本篇分享WIN平台下如何对APM断点调试和单步调试,主要是基于WSL的编译环境和VScode作为编辑器

首先需要成功用WSL编译APM固件,由于不是重点会在文末提稍微提一下。

调试流程part1/疑难杂症part2/wsl环境搭建part3

调试流程

首先用vscode打开Ardupilot文件夹

设定vscode的launch任务,复制文本如下,有几个需要注意的点

  1. “program”选项是在wsl里面的路径,wsl里面将win的cdef等盘挂载在/mnt目录下,对比win的路径修改一下。如果是rover则ardurover,copter是arducopter其他的fram对应修改一下
  2. 这个部分是告诉vscode实际的路径需要转化一下,搬运就行,注意改盘符
  3. 由于使用gdb进行调试,需要在wsl里面安装gdb,没有安装的话sudo apt install gdb ,一般gdb路径就在哪里

设定完成后在wsl编译debug类型的sitl,以rover为例

1
2
./waf configure --debug
./waf rover

编译完成后在对应目录下启动仿真脚本

1
2
3
4
cd APMrover2/
../Tools/autotest/sim_vehicle.py -N
或者
../Tools/autotest/sim_vehicle.py -D

N为nobuild,编译过了加-N直接启动仿真

D为在启动仿真之前设置debug参数并重新编译

启动完成后切回vscode,按F5选择ardurover的进程,然后愉快的调试吧

可能有疑难杂症,转P2。

成功调试如图,支持断点支持单步。

F10/F11调试快捷键,单步执行或跳入

疑难杂症

如果你在启动调试的时候看到这个,那么恭喜。产生它的原因很多,慢慢排除

  1. WSL的设置

一般都是这个,可以暂时的方法解决或者永久的,不过对WSL貌似电脑重启永久方法就失效来着

临时办法:WSL里面执行下面的命令再启动仿真脚本,产生报错好像和内核安全有关。

1
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

永久办法:设置/etc/sysctl.d/10-ptrace.conf里面的参数kernel.yama.ptrace_scope = 0然后重启服务sudo service procps restart

  1. Vscode的launch文件路径设置有误

检查盘符和对应的固件名称

  1. Vscode权限不足

以管理员权限运行Vscode,遇到过几次,玄学bug

WSL编译环境搭建

假设你已经安装好了WSL,你需要做如下几步,下载代码,安装依赖,编译。

github日常被墙网速,大家自行解决

1
2
3
4
5
6
7
# 下载代码
git clone https://github.com/ardupilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive

# 安装依赖
./Tools/environment_install/install-prereqs-ubuntu.sh -y

然后就可以愉快的编译了。网络问题是个问题,不过应该问题不大。

请关注我吧~

会分享一些无人机和机器人的小技巧

P.S: 虽然说是WIN平台下,不过有些坎wsl还是跨不过去。在安装双系统用上Ubuntu之后感觉Ubuntu真香,大家不妨试试双系统。

然后公众号大概会保持月更的频率吧,不定期更新。

文章目录
  1. 1. 调试流程
  2. 2. 疑难杂症
  3. 3. WSL编译环境搭建
|