使用gdb+gdbserver调试嵌入式程序

时间:2023-01-25 21:05:29

gdb+gdbserver 调试嵌入式程序的例子

如果环境没有提供交叉编译程序gdbserver ,
可以参考交叉编译步骤

1.arm 上的一个程序monitorAll

是我调试的例子, 它在客户端的执行命令如下.

./monitorAll -qws -font wenquanyi

2.用gdbserver 调试的步骤:

1.target 端:

gdbserver –multi 192.168.1.101:1234

启动gdbserver, 监听192.168.101:1234端口. 支持调试多就进程

  • 192.168.1.101 —> 主机host的IP地址
  • 1234 —>target端开放的服务端口, 将来由主机端连接进来

2.host 端:

. debug.sh

把脚本补充完全,如下:

2.1. debug.sh 的写法:

#!/bin/bash
arm-linux-gnueabihf-gdb -x gdbinit

gdbinit 是gdb启动后执行的脚本文件

2.2. gdbinit 的写法

    target extended-remote 192.168.1.136:1234
file monitorAll
set args -qws -font wenquanyi
b main
r

-192.168.1.136:1234 —>目标机的IP地址和端口

3.更进一步

target 的上的可执行文件名称可以和host上的不一样.
target 上可以执行去除符号的程序,而host上调试带debug信息的程序,这样可以大大减小 target上的程序大小, 这样需要在host端设定一下target端的运行程序名称. 用set remote exec-file命令

完整脚本如下例: gdbinit 文件

target extended-remote 192.168.1.136:1234
file monitorAll_debug
set remote exec-file monitorAll
set args -qws -font wenquanyi
b main
r
  • 192.168.1.136 客户端IP
  • 1234 使用的端口
  • monitorAll_debug —>host端带调试信息的程序
  • monitorAll —>target端被调试程序(可以不带debug信息)

4.再进一步

gdb 的前端可以使用vim, 可参考vim做调试前端
也可以使用emacs, 前端调试环境建立请自行baidu.
也可以使用其它前端例如ddd之类的等.
注意对应的gdb调试程序需要用update-alternatives调整正确.