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

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

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

1.arm 上的一个程序monitorAll

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

./monitorAll -qws -font wenquanyi

2.用gdbserver 调试的步骤:

1.target 端:

gdbserver --multi 192.168.1.101:1234

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

  • –multi 是说gdbserver 有同时支持调试多个程序的能力,只调试一个也可以不加.
  • 192.168.1.101 —> 主机host的IP地址
    也可以不指明IP地址,这样不限制主机IP,所有主机都可以连接.
    此时的写法如下,更简洁 > gdbserver --multi :1234
  • 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调整正确.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值