嵌入式arm linux环境中gdb+gdbserver调试
一.前言
嵌入式Linux系统中,应用开发过程中,很多情况下,用户需要对一个应用程序进行反复调试,
特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,
通常采用gdb+gdbserver的方式进行调试。 Gdbserver在目标系统中运行,gdb则在宿主机上运行。
目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序。在此我们还不能直接采用linux
发行版自带的gdb,需要交叉编译gdb和gdbserver。
二.编译gdb和gdbserver工具
下载最新版本的gdb-6.8.tar.gz,可以到ftp://ftp.gnu.org/gnu/gdb下载.
准备好自己的工作目录,如下示
/home/user/gdb
|--gdb-6.8
|--obj-gdb
|--build
|--obj-gdbserver
|--build
|--bin
脚本obj-gdb/build内容如下:
#!/bin/sh
../gdb-6.8/configure --target=arm-linux --enable-shared --prefix=/usr/src/arm/gdb/build-gdb --without-x --disable-gdbtk --disable-tui --without-included-regex --without-included-gettext
make
echo "done"
脚本obj-gdbserver/build内容如下:
#!/bin/sh
CC=/opt/toolchain/arm-linux/bin/arm-linux-gcc
../gdb-6.8/gdb/gdbserver/configure --host=arm-linux --without-included-regex --without-included-gettext
echo "done"
开始编译:
(1) cd obj-gdb
./build
(2) cd obj-gdbserver
./build
这时会生成Makefile,修改Makefile如下
LDFLAGS= -static
然后make
(3) cd bin
cp ../obj-gdb/gdb/gdb .
cp ../obj-gdbserver/gdbserver .
arm-linux-strip gdbserver
(4) 好了bin目录下就是最终编译出来的gdb+gdbserver了
三.gdbserver使用
(1) 目标机中
执行命令gdbserver 10.0.12.144:1234 test
注意test在编译的时候是要加-g选项的
(2) 宿主机中
gdb test
再输入命令target remote 10.0.12.143:1234
接下来就可以gdb的调试了
(3) 说明
目标机IP:10.0.12.143
宿主机IP: 10.0.12.144
端口是随意指定的,只要两端保持一致就行了
test程序两端也必须相同
嵌入式arm linux环境中gdb+gdbserver调试的更多相关文章
- 针对 Linux 环境下 gdb 动态调试获取的局部变量地址与直接运行程序时不一致问题的解决方案
基础的缓冲区溢出实践通常需要确定运行状态下程序中的某些局部变量的地址,如需要确定输入缓冲区的起始地址从而获得注入缓冲区中的机器指令的起始地址等.在 Linux 环境下,可通过 gdb 对程序进行动态调 ...
- GDB+GDBServer调试Linux应用程序
参考:http://blog.csdn.net/shanghaiqianlun/article/details/7820401 一.gdb+gdbserver总体介绍 远程调试环境由宿主机GDB和目标 ...
- linux环境中通过/dev/urandom设备产生随机密码
需求说明: 今天在调试SVN的时候,需要创建用户的随机密码,想了下,在linux环境中是否能够生成呢,就搜索了下, 然后结合看到的帖子,分析一个可以生成密码的命令,在此记录下. 操作过程: 1.通过/ ...
- Linux环境中Openfire安装指南
Linux环境中Openfire安装指南 安装环境: 安装软件:Openfire 4_1_0 http://download.igniterealtime.org/openfire/openfire_ ...
- 理解 Linux 网络栈(2):非虚拟化Linux 环境中的 Segmentation Offloading 技术
本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...
- [软件测试]Linux环境中简单清爽的Google Test (GTest)测试环境搭建(初级使用)
本文将介绍单元测试工具google test(GTEST)在linux操作系统中测试环境的搭建方法.本文属于google test使用的基础教程.在linux中使用google test之前,需要对如 ...
- linux环境中,多个命令之间,通过&& ||执行,命令之间执行的逻辑是什么?
需求描述: 最近在写一个脚本的时候,要判断一个文件是否存在,有怎么样,没有就创建,这个时候 看到了一个test 结合 || 或者 &&的写法,就查看了下资料记录下是怎么个玩法. 操作过 ...
- Linux环境中Qt程序的手工发布
Linux环境中Qt程序的手工发布
- linux环境中通过useradd命令,创建用户的时候指定用户的base-dir
需求说明: 今天一个同事,问了一个这样的问题,在linux环境中,创建用户的时候,默认的是在/home目录下创建一个与用户名相同的家目录, 如何能够将这个/home更换成一个其他的,比如/opt/ap ...
随机推荐
- 洛谷P2192 HXY玩卡片
题目描述 HXY得到了一些卡片,这些卡片上标有数字0或5.现在她可以选择其中一些卡片排成一列,使得排出的一列数字组成的数最大,且满足被90整除这个条件.同时这个数不能含有前导0,即0不能作为这串数的首 ...
- vue 遇到的报错
[Vue warn]: Invalid default value for prop "dataParams": Props with type Object/Array must ...
- cksum---检验文件CRC是否正确
- 【2017 Multi-University Training Contest - Team 4】Time To Get Up
[Link]: [Description] [Solution] 把每个数字长什么样存到数组里就好;傻逼题. (直接输入每一行是什么样子更快,不要一个字符一个字符地输入) [NumberOf WA] ...
- 76.CGI编码
CGI编码 "%D6%DC%C8%F0%B8%A3"; 转换到字符串中: //CGI编码转到char类型的tmpstr中中 char* change(char *str) { // ...
- golang filepath.Glob
package main import ( "fmt" "path/filepath" ) func main() { //找出/home/ 目录下的所有的lo ...
- Codefroces 784 愚人节题目(部分)
A. Numbers Joke time limit per test 2 seconds memory limit per test 64 megabytes input standard inpu ...
- 给VG增加磁盘,给文件目录增加空间
一: #lspv 找到新增加的物理卷(逻辑驱动器,以hdisk8为例). #chdev –l hdisk8 –a pv=yes写入新的物理卷的pvid. #extendvg cwdatavg hdis ...
- ArcGIS小技巧——提取面要素的质心点
如下图,现在要做这样一件事,提取面图层中每一个图斑的质心点,然后使用质心点提取图层中的一个属性值,并在此基础上进行克里金插值,生成该属性的空间插值图.当然,今天这段文字主要简单说一下怎样提取面图层的质 ...
- 在Linux下用CANopenSocket协议模拟CAN总线通讯
一.参考文档 https://github.com/CANopenNode/CANopenSocket //下载 CANopenSocket 的源码 http://elinux.org/Can-uti ...