1.在PC端安装ARM版本的g++、gcc编译工具(注意不同的ARM处理器对应不同的版本,DJI妙算对应的是g++-arm-linux-gnueabihf);
sudo apt-get install g++-arm-linux-gnueabihf
2.下载并编译安装gdb(下载地址)。Gdb是一款unix下的程序调试工具,可以让我们很方便地进行断点管理和单步运行调试,要想在PC端对ARM上的程序进行调试,需要在PC端编译安装ARM版的gdb,同时编译生成gdbserver放在ARM中;
安装gdb(其中/opt/arm-gdb指代gdb的安装路径,可自定义)
cd gdb-8.1
mkdir build
cd build
../configure --target=arm-linux-gnueabihf --prefix=/opt/arm-gdb
make -j8
sudo make install
安装成功之后可以在安装路径下找到gdb可执行文件
/opt/arm-gdb/bin/arm-linux-gnueabihf-gdb
3.编译gdbserver(这里不需要安装到本机,只需要将生成的gdbserver可执行程序copy到妙算的文件目录下)
cd /gdb-8.1/gdb/gdbserver/
mkdir build
cd build
../configure --target=arm-linux-gnueabihf
make -j8
编译完成后可在/gdb/gdbserver/build/路径下找到gdbserver
1.若出现以下错误
../linux-arm-low.c:130:21: fatal error: sys/reg.h: No such file or directory
#include <sys/reg.h>
打开gdb-8.2/gdb/gdbserver/build/config.h文件,搜索HAVE_SYS_REG_H,在这行前面加//注释掉这行
2.若出现以下错误
In file included from ../../common/common-defs.h:90:0,
from ../server.h:22,
from ../linux-arm-low.c:19:
../linux-arm-low.c: In function ‘CORE_ADDR arm_sigreturn_next_pc(regcache*, int, int*)’:
../linux-arm-low.c:782:29: error: ‘__NR_sigreturn’ was not declared in this scope
gdb_assert (svc_number == __NR_sigreturn || svc_number == __NR_rt_sigreturn);
^
../../common/gdb_assert.h:33:13: note: in definition of macro ‘gdb_assert’
((void) ((expr) ? 0 : \
^~~~
../linux-arm-low.c: In function ‘CORE_ADDR get_next_pcs_syscall_next_pc(arm_get_next_pcs*)’:
../linux-arm-low.c:836:21: error: ‘__NR_sigreturn’ was not declared in this scope
if (svc_number == __NR_sigreturn || svc_number == __NR_rt_sigreturn)
^~~~~~~~~~~~~~
make: *** [linux-arm-low.o] Error 1
修改编译指令为“make CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ CXXFLAGS="-std=c++11”
参考https://blog.csdn.net/hanq4998/article/details/84675718
4.打开QTcreator在工具--选项--设备中点击添加,按设备名、IP地址、用户名和密码配置自己的ARM设备(通用Linux类型的默认设备),GDB server executable为copy到ARM中的gdbserver路径,若copy到妙算/usr/bin/路径下则此处可省略。可点击Test检测是否成功连接。
5.在工具--选项--Kits--Debuggers中添加ARM版的gdb调试器,路径即为刚刚安装好的gdb路径;
6.在工具--选项--Kits中添加ARM的构建套件,填写名称,选择编译器为arm版本,选择调试器为刚刚添加的gdb调试器
7.新建工程,选择ARM Kits,选择debug模式,编译即可断点调试运行