用 gdbserver 调试 arm-linux 上的 AWTK 应用程序

很多嵌入式 linux 开发者都能熟练的使用 gdb/lldb 调试应用程序,但是还有不少朋友在调试开发板上的程序时,仍然在使用原始的 printf。本文介绍一下使用 gdbserver 通过网络调试开发板上的 AWTK 应用程序的方法,供有需要的朋友参考。

1. 下载 gdb 源代码

通常工具链里都会带有 gdb,但是没有带 gdbserver,这时候就需要下载 gdb 源代码,并自己编译 gdbserver 了。为了和工具链的版本保持一致,最好下载和工具链版本一致的 gdb 源代码。比如这里我们使用的是 arm-openwrt-linux-gdb 8.0 版本。

复制代码
arm-openwrt-linux-gdb --version

GNU gdb (GDB) 8.0

那就下载 8.0 版本的 gdb 源代码。

复制代码
wget https://ftp.gnu.org/gnu/gdb/gdb-8.0.tar.gz
tar xf gdb-8.0.tar.gz

2. 编译 gdbserver

复制代码
cd gdb-8.0/gdb/gdbserver
./configure --host=arm-openwrt-linux --prefix=$HOME/work/awtk-root/gdbserver
make
make install

生成的 gdbserver 位于:

复制代码
~/work/awtk-root/gdbserver/bin/gdbserver

将生成的 gdbserver 拷贝到开发板上,并设置成可执行,建议放在 /usr/bin 目录下。

3. 编译 AWTK 应用程序的调试版本

DEBUG=True 表示编译调试版本,TOOLS_PREFIX 为工具链的前缀,请根据实际情况修改。

复制代码
scons TOOLS_PREFIX='arm-openwrt-linux-' DEBUG=True

生成 release.tar.gz, 将 release.tar.gz 拷贝到开发板上,并解压。

复制代码
./release.sh 

4. 启动开发板的网络

请根据实际情况修改 IP 地址。我这里的 IP 地址是 192.168.8.161。使用 wifi 也是可以的,只要能和开发板通信就行。

shell 复制代码
ifconfig eth0 192.168.8.161 netmask 255.255.255.0 up
route add default gw 192.168.8.1 eth0

ifconfig
route -n

5. 启动 gdbserver

shell 复制代码
cd release
./gdbserver 192.168.8.161:7890 bin/demoui

6. 本地调试

  • 启动 gdb
shell 复制代码
arm-openwrt-linux-gdb bin/demoui
  • 连接 gdbserver
shell 复制代码
target remote 192.168.8.161:7890
  • 设置断点
shell 复制代码
b main
  • 运行
shell 复制代码
c

这时候就可以在本地调试开发板上的 AWTK 应用程序了,调试方法和调试本地应用程序一样。

7. 其它

  • 如果网络比较慢,可以在本地放一个rootfs,并在 gdb 中指定sysroot:
shell 复制代码
set sysroot /home/meetyoo/work/awtk-root/rootfs/rootfs
  • 如果嫌每次输入同样命令麻烦,可以把初始化命令放到文件中:

gdbinit

复制代码
set sysroot /home/meetyoo/work/awtk-root/rootfs/rootfs

b lcd_mem_set_double_fb_bitmap
b lcd_mem_create_single_fb

target remote 192.168.8.161:7890

启动 gdb 时指定初始化脚本文件名:

复制代码
arm-openwrt-linux-gdb bin/demoui -x gdbinit
相关推荐
橘子真甜~42 分钟前
C/C++ Linux网络编程13 - 传输层TCP协议详解(面向字节流和有连接)
linux·运维·服务器·c语言·网络·c++·tcp/ip
嘻哈baby44 分钟前
systemd服务管理深入实践从入门到自定义服务
linux·服务器·网络
June`1 小时前
SSH连接原理与守护进程实战
linux·运维·服务器
水天需0101 小时前
Grep 例程大全
linux
杼蛘1 小时前
XXL-Job工具使用操作记录
linux·windows·python·jdk·kettle·xxl-job
CQ_YM2 小时前
Linux进程基础
linux·服务器·进程
_OP_CHEN2 小时前
【Git原理与使用】(五)Git 多人协作:从分支协作到冲突解决,团队开发效率翻倍秘籍
linux·运维·git·团队开发·运维开发·企业级组件·git多人协作
添砖java‘’2 小时前
常见的进程间通信方式详解
linux·c++·操作系统·信息与通信·进程通信
企鹅侠客2 小时前
Linux性能调优:详解CPU使用率计算方式
linux·运维·服务器·性能调优
秋深枫叶红2 小时前
嵌入式第三十四篇——linux系统编程——进程
linux·服务器·数据库·学习