本篇分享WIN平台下如何对APM断点调试和单步调试,主要是基于WSL的编译环境和VScode作为编辑器
首先需要成功用WSL编译APM固件,由于不是重点会在文末提稍微提一下。
调试流程part1/疑难杂症part2/wsl环境搭建part3
调试流程
首先用vscode打开Ardupilot文件夹
设定vscode的launch任务,复制文本如下,有几个需要注意的点
- “program”选项是在wsl里面的路径,wsl里面将win的cdef等盘挂载在
/mnt
目录下,对比win的路径修改一下。如果是rover则ardurover
,copter是arducopter
其他的fram对应修改一下 - 这个部分是告诉vscode实际的路径需要转化一下,搬运就行,注意改盘符
- 由于使用gdb进行调试,需要在wsl里面安装gdb,没有安装的话
sudo apt install gdb
,一般gdb路径就在哪里
设定完成后在wsl编译debug类型的sitl,以rover为例
1 | ./waf configure --debug |
编译完成后在对应目录下启动仿真脚本
1 | cd APMrover2/ |
N为nobuild,编译过了加-N直接启动仿真
D为在启动仿真之前设置debug参数并重新编译
启动完成后切回vscode,按F5选择ardurover
的进程,然后愉快的调试吧
可能有疑难杂症,转P2。
成功调试如图,支持断点支持单步。
F10/F11调试快捷键,单步执行或跳入
疑难杂症
如果你在启动调试的时候看到这个,那么恭喜。产生它的原因很多,慢慢排除
- 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
- Vscode的launch文件路径设置有误
检查盘符和对应的固件名称
- Vscode权限不足
以管理员权限运行Vscode,遇到过几次,玄学bug
WSL编译环境搭建
假设你已经安装好了WSL,你需要做如下几步,下载代码,安装依赖,编译。
github日常被墙网速,大家自行解决
1 | # 下载代码 |
然后就可以愉快的编译了。网络问题是个问题,不过应该问题不大。
请关注我吧~
会分享一些无人机和机器人的小技巧
P.S: 虽然说是WIN平台下,不过有些坎wsl还是跨不过去。在安装双系统用上Ubuntu之后感觉Ubuntu真香,大家不妨试试双系统。
然后公众号大概会保持月更的频率吧,不定期更新。