S3C2410 ARM板上gdb +gdbserver调试

数据库原理及应用教程课后习题答案 第4版 微课版 陈志泊主编 数据库原理及应用教程 第4版 微课版 陈志泊主编 习题参考答案 阅读详情

S3C2410 ARM板上gdb +gdbserver调试

 

   远程调试环境由宿主机gdb和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。        

       就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:

       用ROMMonitor调试目标机程序、

       用KGDB调试系统内核

       用gdbserver调试用户空间程序。      

       这三种调试方法的区别主要在于,目标机远程调试stub的存在形式的不同,而其设计思路和实现方法则是大致相同的。而我们最常用的是调试应用程序。就是采用gdb+gdbserver的方式进行调试。在很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。Gdbserver在目标系统中运行,gdb则在宿主机上运行。

    目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序。一般linux发行版中都有一个可以运行的gdb,但开发人员不能直接使用该发行版中的gdb来做远程调试,而要获取gdb的源代码包,针对arm平台作一个简单配置,重新编译得到相应gdb如armv4l-unknown-linux-gdb 

 

1.源程序编译

download  from  http://cygwin.mirrors.pair.com/gdb/old-releases/

$ tar jxf gdb-5.2.1.tar.bz2

$ cd gdb-5.2.1

$ mkdir obj

$ cd obj

../configure --target=armv4l-unknown-linux /

        --enable-shared --prefix=/tmp/g /

        --without-x --disable-gdbtk --disable-tui /

        --without-included-regex --without-included-gettext

$ make

$ make install

$ mkdir gdb/gdbserver 

$ cd gdb/gdbserver

$ chmod +x ../../../gdb/gdbserver/configure

$ CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc /

        ../../../gdb/gdbserver/configure armv4l-unknown-linux /

        --without-included-regex --without-included-gettext

$ make

$ cp -vf gdbreplay gdbserver /tmp/g/bin

 

2.远程调试

cp  gdbserver from  host  to  target machine

target machine

       #gdbserver 59.69.74.87:2345 hello   

出现

Process hello created; pid = 68

 

host

        /tmp/g/bin/armv4l-unknown-linux-gdb hello

       (gdb) b main

       (gdb) target remote 59.69.75.186:2345

      出现 Remote debugging using 59.69.75.186:2345

           0x40002a00 in ?? ()

       (gdb) c  //相当于主机gdb的run命令

      

此时目标机上出现

Remote debugging from host 59.69.74.87

hello,world

连接成功后,这时候就可以输入各种gdb命令如list、run、next、step、break等进行程序调试了。

调试结束出现                                                                               

Child exited with retcode = 0                                                                                

Child exited with status 236

GDBserver exiting

 

3、多线程调试:

如果要调试的程序有线程的话,则需手动运行程序后,用下面的命令调试相应的线程

gdbserver 59.69.74.87:2345 --attach 21119

其中 21119是线程进程号

 

4、动态库调试:下面以datamanage模块的libdb.so动态库为例

gdb) b main //在程序入口处设个断点

Breakpoint 1 at 0xb2e8: file main.cpp, line 24.

(gdb) c

Continuing.

Breakpoint 1, main () at main.cpp:24

24        sleep( 10 );

(gdb) directory ../datamanage   //加入动态库源码目录,不然gdb无法找到源文件

Source directories searched: /home/yifei/Src/taskmanage/../datamanage:/home/yifei/WFET20d

(gdb) sharedlibrary     //将共享库加入

Reading symbols from /home/et1000/lib/libbase.so...done.

Loaded symbols for /home/et1000/lib/libbase.so

Reading symbols from /usr/local/tools/linux/arm/gcc-3.2.2/arm-linux/lib/libpthread.so.0...done.

Loaded symbols for /usr/local/tools/linux/arm/gcc-3.2.2/arm-linux/lib/libpthread.so.0

Reading symbols from /home/et1000/lib/libparam.so...done.

Loaded symbols for /home/et1000/lib/libparam.so

Reading symbols from /home/et1000/lib/libinter.so...done.

Loaded symbols for /home/et1000/lib/libinter.so

Reading symbols from /home/et1000/lib/libdb.so...done.

Loaded symbols for /home/et1000/lib/libdb.so

 

(gdb) br TaskDb.cpp:35  //在动态库源程序中设断点

Breakpoint 2 at 0x400b60c0: file TaskDb.cpp, line 35.

 注意:1、主机上动态库的路径必须与目标机的路径一样

       2、主机上动态库的目录需有执行权限

 

 说明: 

1)目标机上的被调试程序hello, 与主机上的程序hello, 是相同的程序, 但位置不一样,并非是用网络共享的同一个位置的同一个文件, 一个在目标机上 ,一个在主机上, 没有关系.

2) host ip  : 59.69.74.87

   target  2410  ip : 59.69.75.186               

都是局域网ip.

 

gdb 的常用命令

命令 解释

  break NUM 在指定的行上设置断点。

  bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。

  clear 删除设置在特定源文件、特定行上的断点。其用法为clear FILENAME:NUM

  continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而 导致停止运行时。

  display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。

  file FILE 装载指定的可执行文件进行调试。

  help NAME 显示指定命令的帮助信息。

  info break 显示当前断点清单,包括到达断点处的次数等。

  info files 显示被调试文件的详细信息。

  info func 显示所有的函数名称。

  info local 显示当函数中的局部变量信息。

  info prog 显示被调试程序的执行状态。

  info var 显示所有的全局和静态变量名称。

  kill 终止正被调试的程序。

  list 显示源代码段。

  make 在不退出 gdb 的情况下运行 make 工具。

  next 在不单步执行进入其他函数的情况下,向前执行一行源代码。

    step 单步执行会进入其他函数

  print EXPR 显示表达式 EXPR 的值。

 

列出源一段源程序 === list

列出某个函数

list FUNCTION 

 

以当前源文件的某行为中间显示一段源程序

list LINENUM 

 

接着前一次继续显示

list

 

显示前一次之前的源程序

list -

 

显示另一个文件的一段程序

list FILENAME:FUNCTION 或 list FILENAME:LINENUM

 

设置断点 === break

 

在函数入口设置断点

break FUNCTION 

 

在当前源文件的某一行上设置断点

break LINENUM 

 

在另一个源文件的某一行上设置断点

break FILENAME:LINENUM

 

条件断点

break ...if COND

【HCIA学习记录】WLAN配置实验 HCIA-WLAN 阅读详情

相关推荐

AI 编程新范式:一文彻底搞懂 LLM、Agent、MCP、Skill 是怎么协作的

本文用通俗易懂的方式解析了AI编程新架构的核心概念。通过"三国演义"类比,文章将复杂的技术架构拆解为:Agent(军师/大脑)负责思考和决策,Skill(招式/手脚)执行具体操作,MCP(令箭/协议)作为通信标准,MCP Server(将军/身体)承载多个Skill。这套分工架构使AI从单纯聊天进化成能完成实际编程任务的全能助手,实现了关注点分离——Agent专注智能提升,Skill专注功能实现,MCP确保稳定连接。这正是Cursor、Claude等新一代AI开发工具采用的核心架构,标志

猫老板的豆 3078

ARM板上gdb +gdbserver调试.txt

S3C2410 ARM板上gdb +gdbserver调试    远程调试环境由宿主机gdb和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。                就目前而言,嵌入式Linux系统

cdqy的专栏 3217

FCL碰撞检测库在Windows下的编译与配置(MinGW+CMake)

本文详细介绍了在Windows系统下使用MinGW和CMake编译配置FCL碰撞检测库的完整流程。内容涵盖MinGW-w64、CMake的安装与环境配置,关键依赖库Eigen和libccd的安装,以及FCL源码的编译、安装与实战测试。重点解析了CMake配置命令中的关键参数与常见错误解决方案,旨在帮助开发者高效完成FCL在Windows平台的部署,适用于机器人、游戏物理引擎等需要精确碰撞检测的开发场景。

sunny的博客 483

GDB / TUI 模式

gdb 默认是命令行模式,需要显示部分代码时,使用“list”命令,默认显示当前行上下一共10行的代码,如果想增加显示的行数,可以通过命令 list (+-)n,n 为行数。 这种方法简单有效,就是不方便,有种方法可以时时查看变量内容,那就是 TUI 模式。 TUI 模式全称:Text User Interface 。 使用方法是启动的时候,加入 -tui,即: gdb main.o -tui 也可以运行的过程中,执行 Ctrl + x + a,完成 tui 模式的打开和关闭。 结果如图所示:

布袋和尚 2617

【100%通过率】华为od机试C卷【贪吃的猴子】Java&Go 实现

一只贪吃的猴子,来到一个果园,发现许多串香蕉排成一行,每串香蕉上有若干根香蕉。每串香蕉的根数由数组numbers给出。猴子获取香蕉,每次都只能从行的开头或者未尾获取,并且只能获取N次,求猴子最多能获取多少根香蕉。第一次获取香蕉为行的开头,第二次获取为行的末尾,因此最终根数为4+3 =7。全部获取所有的香蕉,因此最终根数为1+2+3 = 6。第二行为数组numbers的值每个数字通过空格分开。1:简单题目,两个指针分别指向头尾,逐个对比即可。第一行为数组numbers的长度。第三行输入为N,表示获取的次数。

MISAYAONE的博客 1436

机器学习的低代码与无代码平台:便捷入门之路

机器学习领域正涌现出大量低代码和无代码平台,使非技术人员也能轻松应用AI技术。低代码平台(如PyCaret、H2O AutoML)需少量编程但灵活性强,而无代码工具(如Google Cloud AutoML、Teachable Machine)则完全无需编程基础。这些平台覆盖图像识别、文本处理、业务预测等多种场景,适合快速部署简单项目。但专业人士仍需注意,这些工具无法替代复杂场景下的定制化开发。随着技术进步,低门槛AI工具正在改变各行业的创新方式。

2501_90323865的博客 154

gdb交叉编译到arm开发板

前言 最近手头上的项目出现bug,出现偶尔崩溃现象,而且是随机出现感觉bug如幽灵般无迹可寻。无奈之下只能搬出gdb调试大法,那么问题来了,在嵌入式arm板上一切都是空白的,几乎所有的工具软件都得自己编译移植到arm板子上。在经过一番折腾之后终于将gdb成功的放到板子上运行。过程是辛苦的,结果是欣喜的,遂在此记下移植过程,仅供学习参考。工具、开发环境简介 1、pc系统:ubu

分吹沙走 1469

数据处理和分析之数据预处理:数据离散化

在某些情况下,根据业务知识或数据特性,我们可能需要自定义离散化的区间。例如,对于年龄特征,我们可能更关心儿童、青少年、成人和老年人这几个阶段,因此可以自定义这些区间。等宽离散化:将数据范围分成等宽的区间。等频离散化:将数据分成包含相同数量观测值的区间。聚类离散化:使用聚类算法(如K-means)来确定离散化区间。自定义区间离散化:根据领域知识或数据特性手动定义区间。# 自定义区间离散化示例# 假设我们根据业务理解,将年龄分为青年、中年和老年三个阶段。

2401_87715305的博客 934

gdb+gdbserver调试arm-linux程序

引用:http://www.xxlinux.com/linux/article/accidence/install/20070531/8639.html 我的环境: Fedora 14 虚拟机 编译器:arm-linux-gcc-4.3.2 开发板:TQ2440 嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用ar

u010068275的专栏 519

【车载以太网】ATU(Address Translation Unit / Address Table Unit)

【车载以太网】ATU(Address Translation Unit / Address Table Unit)

天赐好车的博客 151

移动支付APP(仿支付宝)

Toast.makeText(PayActivity.this, "支付失败:" + payResponse.getMsg(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败:" + t.getMessage(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败", Toast.LENGTH_SHORT).show();

寒寒豆豆软件公司的博客 134

GDB远程调试技术

最近研究了一下gdb远程调试,网上也有一些文章做过说明,但是都写得不全或有少量错误,因此对此进行调研和总结。

李亚锋的专栏 1229

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

weixin_42162924的博客 34

S3C2410 ARM板上构造gdb +gdbserver调试环境

S3C2410 ARM板上构造gdb +gdbserver调试环境   远程调试环境由宿主机gdb和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。                 就目前而言,嵌入式Linu

qq_24411619的专栏 347

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ARM板上构造gdb +gdbserver调试环境

S3C2410 ARM板上构造gdb +gdbserver调试环境 远程调试环境由宿主机gdb和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。                就目前而言,嵌入式Linux系统中,主要有

嵌入式 Linux ARM ADS ADHOC C C++ PLC 单片机 3434

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

如何调试linux系统arm,怎么调试跑在 arm+linux系统 上的程序???

S3C2410 ARM板上构造gdb +gdbserver调试环境远程调试环境由宿主机gdb和目标机调试stub共同构成,两者通过串口或TCP连接。使用GDB标准程串行协议协同工作,实现对目标机上的系统内核和上层应用的监控和调试功能。调试stub是嵌入式系统中的一段代码,作为宿主机GDB和目标机调试程序间的一个媒介而存在。就目前而言,嵌入式Linux系统中,主要有三种远程调试方法,分别适用于不同场...

weixin_36329414的博客 392

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

嵌入式Linux系统的GDB远程调试实践

                                                        嵌入式Linux系统的GDB远程调试实践摘要嵌入式Linux系统的研究和应用越来越热针对如何完成系统调试工作的问题文章介绍了GDB远程调试功能及其工作机制重点描述了使用GDB远程调试技术在嵌入式Linux系统中调试各类程序的实践示例1 引言信息技术迅猛发展个人数字助理掌上电脑机顶盒等嵌入

董磊的专栏 1783

linux gdb模式下无反应,Linux,GDB 嵌入式Linux的GDB远程调试的问题--断点没反应

院士2006-12-22 22:43:00评分2楼问我用的是BF531uClinuxLinux version 2.6.16.11-ADI-2006R1-hhbf (root@server)(gcc version 3.4.5 (ADI cvs))#11 Tue Jul 18 22:44:05 CST 2006用HH提供的HHBF531-R1-v1.0.0-060718.tgz这个压缩包里...

weixin_30394019的博客 1025

gdb + gdbserver 修改内存值

本次调试,用到了GDB修改内存的命令。先将断点加到函数处,然后检查传入的参数放在何处,再将传入的参数修改,然后继续运行。 结果,按修改后的参数进行了执行。 代码如下,myfunc将入参变成2倍返回: cat test.c #include <stdio.h>int myfunc(int i) { return i*2; }int main() { int x = myfunc(1

snowpiaop的专栏 4323

GDBSERVER 用于omapl138调试---过程详细分析

注:发现有人引用本文,颇感荣幸! 请注明出处 http://blog.youkuaiyun.com/liufengl138/article/details/7634529 用了一番功夫研究GDBSERVER,这里先将GDBSERVER调试目标板程序的原理摘录部分资料如下: 远程调试环境由宿主机 GDB 和目标机调试 stub 共同构成,两者通过串口或 TCP 连接。 使用 GDB 标准远程

liufengl138的专栏 4192

linux gdb远程调试共享库,arm-linux-gdb(宿主机)+gdbserver(目标机)远程调试

引我的环境:Fedora 14 虚拟机编译器:arm-linux-gcc-4.3.2开发板:TQ2440嵌入式Linux的GDB调试环境由Host和Target两部分组成,Host端使用arm-linux-gdb,TargetBoard端使用gdbserver。调试时,应用程序在嵌入式目标系统上运行,而gdb调试在Host端。一、编译安装gdb+gdbserver首先下载gdb源码,我下载的是gd...

weixin_42538175的博客 627

嵌入式arm-linux-gdb和 gdbserver 编译及调试

嵌入式arm-linux-gdb和 gdbserver 编译及调试 一:编译安装 arm-linux-gdb 1,  进入一下地址下载安装包 ftp://ftp.gnu.org/gnu/gdb/gdb-6.8a.tar.bz2  下载完成后解压得到gdb-6.8 . 2, 进入目录编译安装 cd gdb-6.8 ./configure --target=arm-linux --enabl

--随风漂-- 1180

使用gdbserver调试arm应用程序

1.下载gdbserver    gdbserver的源代码在gdb的源代码包中   ftp://sourceware.org/pub/gdb/releases/gdb-6.8.tar.bz2 2.准备toolchain   使用codesoucery的toolchain   http://www.codesourcery.com/sgpp/lite/arm/portal/p

Tony_guo5566的专栏 636

Gdb的安装和配置~~

 【关键词】:gdb,gdbserver,远程调试 目录一、gdb+gdbserver总体介绍... 1二、源代码下载... 1三、配置编译及安装下载... 1四、gdb+gdbserver nfs调试流程... 2五、如何利用串口调试... 3六、实战调试... 3七、linux下安装gdbserver问题... 5 一、gdb+gdbserver总体

空之轨迹~约修亚 1万+
上一篇: sed 用法及实例
下一篇: valgrind使用手册
ShowMan
博客等级 码龄26年 280粉丝 321原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值