用GDB Server进行远程调试

某些时候由于模拟环境的限制,调试必须要在目标板上进行。由于嵌入式系统资源比较有限,一般不能在目标板上直接构建GDB的调试环境,这时我们通常采用gdb+gdbserver的远程调试方法:gdbserver在目标板中运行,而gdb则在主机上运行。

构建gdb+gdbserver调试环境的在于,要将gdb和gdbserver都编译成适用于目标板的版本。比如我们用x86的主机和ARM目标板,平时在主机上直接调试的时候都使用用于x86调试的gdb,但这个gdb不能用于远程调试中,需要针对ARM平台进行配置之后重新编译才行;而gdbserver要运行在目标板上,则需要用arm-linux-gcc编译才行。

我们可以从http://ftp.gnu.org/gnu/gdb/ 或其他站点下载GDB的源代码来进行编译。得到源代码包gdb-6.6.tar.gz之后,将target配置成arm-linux,然后进行编译:

$ tar xzvf gdb-6.6.tar.gz

$ cd gdb-6.6

$ ./configure --target=arm-linux

$ make

$ make install

注意这时我们编译的是用于主机上的gdb程序,因此仍然用x86版本的gcc编译,而不是用arm-gcc。而接下来我们要编译的gdbserver程序则是运行在目标板上的,需要用arm-gcc来编译了,用CC=<your_arm-linux-gcc_path>来指定arm-linux-gcc编译器:

$ cd gdb/gdbserver/

$ ./configure --target=arm-linux --host=arm-linux

$ make CC=/opt/toolchain/bin/arm-linux-gcc

$ make install

得到gdb和gdbserver之后,将gdbserver下载到目标板上就可以进行远程调试了。我们还是以前面用过的overflow程序为例来说明,注意overflow程序也需要重新用arm-linux-gcc编译得到ARM版本的overflow程序,并下载到目标板上。

完成这些之后可以用file命令来检查所准备gdb和gdbserver及overflow程序的格式是否正确:

$ file arm-linux-gdb

arm-linux-gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

$ file overflow

overflow: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

$ file gdbserver

gdbserver: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17, dynamically linked (uses shared libs), not stripped

注意确保在目标板上运行的gdbserver及overflow程序被编译成ARM ELF格式,而gdb由于是运行在主机上,还是x86格式的。

gdb和gdbserver之间可以通过TCP(格式为host:port)、UDP(格式为udp: host:port)或者串口(比如/dev/ttyb)来通信,我们以TCP方式为例来说明。

假设目标板的IP为192.168.2.1,主机为192.168.2.100,使用端口5678来调试,首先在目标板上运行gdbserver:

# gdbserver 192.168.16.1:5678 ./overflow

Process ./overflow created; pid = 618

Listening on port 5678

然后在主机上运行gdb,并运行gdb命令“target remote 192.168.2.1:5678”:

$ arm-linux-gdb ./overflow

GNU gdb 6.6

Copyright (C) 2006 Free Software Foundation, Inc.

GDB is free software, covered by the GNU General Public License, and you are

welcome to change it and/or distribute copies of it under certain conditions.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "--host=i686-pc-linux-gnu --target=arm-linux"...

(gdb) target remote 192.168.2.1:5678

Remote debugging using 192.168.2.1:5678

0x28556080 in ??()

(gdb)

接下来你就可以象前面所介绍的那样使用gdb命令了,比如设置断点及查看变量单步执行等。

 

http://hi.baidu.com/zesu/blog/item/9b709c2b41802ef2e6cd4093.html

 

转载于:https://www.cnblogs.com/huaping-audio/archive/2009/06/19/1506898.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端的请求最大线程数是多少啊_面试官:创建多少个线程合适,我该怎么说?...

转载&#xff1a;https://mp.weixin.qq.com/s/j5d4Jtxo0RgJWgpnG9HxlQ为什么要使用多线程&#xff1f;防止并发编程出错最好的办法就是不写并发程序既然多线程编程容易出错&#xff0c;为什么它还经久不衰呢&#xff1f;A&#xff1a;那还用说&#xff0c;肯定在某些方面有特长…

php打印出函数的内容吗,PHP打印函数集合详解以及PHP打印函数对比详解(精)

1 echo();2 print();3 die();4 printf();5 sprintf();6 print_r();7 var_dump(); 1 echo() 可以同时输出多个字符串,可以多个参数,并不需要圆括号,无返回值。 2 print() 只可以同时输出一个字符串&#xff0c;一个参数,需要圆括号,有返回值,当其执行失败时返flase .prin1 echo(…

正则表达式(1)

字符转义 大多数重要的正则表达式语言运算符都是非转义的单个字符。转义符 \&#xff08;单个反斜杠&#xff09;通知正则表达式分析器反斜杠后面的字符不是运算符。例如&#xff0c;分析器将星号 (*) 视为重复限定符&#xff0c;而将后跟星号的反斜杠 (\*) 视为 Unicode 字符 …

百度地图infowindow的close事件_百度地图蒙圈:车主要加油误导母婴店 跑偏理由令人啼笑皆非...

常在江湖飘&#xff0c;哪有不挨刀。经常驾车出门在外的您&#xff0c;有过被导航坑的经历么&#xff1f;其实在早些年手机导航刚刚兴起的时候&#xff0c;这类现象确实比较常见&#xff0c;但是到了如今大数据的时代&#xff0c;手机导航数据更新比较及时&#xff0c;问题已经…

Linux中后台执行scp

最近在一台远程机器上scp一个大文件&#xff0c;需要大半天才能完全down下来&#xff0c;用xshell工具执行完命令之后还不能关闭&#xff0c;否则的话就停止了&#xff0c;我的本本还不能一直放这开xshell。就想到nohup&#xff0c;但是scp命令输入密码是提示的&#xff0c;不能…

质量效能研发部php,【百度】百度质量效能研发部【社招/实习】

职位&#xff1a;百度质量效能研发部【社招/实习】-百度【岗位职责】C研发工程师 / iOS∧orid 开发工程师 / 平台开发工程师 / 算法工程师(智能测试方向) base 上海、北京 本次招录面向各程序栈的优秀同学们&#xff0c;开放社招及实习入口&#xff0c;四类方向供大家选择&…

商业模式新生代_业务分析基础 - 商业模式新生代01篇

商业模式画布商业模式新生代由亚历山大奥斯特瓦德&#xff08;Alexander Osterwalder&#xff09;和伊夫皮尼厄&#xff08;Yves Pigneur&#xff09;编写&#xff0c;发表于2016年。该书提出了商业模式画布模型&#xff0c;既可以用于创业公司&#xff08;Start-ups&#xff0…

yum 安装 sun java,CentOS yum安装sun Java jre jdk和openjdk

在Linux下的tty终端下&#xff0c;安装sun jre&#xff0c;但是去Oracle安装&#xff0c;下载居然还要登录&#xff0c;使用cookie&#xff0c;没办法。直接到http://www.java.com/下载了。说明&#xff1a;如果使用yum install 安装软件&#xff0c;具体的软件名称不知道&…

CodePage简介(转)

CodePage简介(转) 1. Codepage的定义和历史 字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为 单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码. 双字节内码 -- Double-Byte character sets)(DBCS),可…

折半查找和二叉排序树的时间性能_leecode刷题----二分搜索与二叉查找(排序)树...

预备知识&#xff1a;二分查找已知一个排序数组A&#xff0c;如A[-1,2,5,20,90,100,207,800]&#xff0c;另外一个乱序数组B&#xff0c;如B[50,90,3,-1,2-7,80],求B中任意某个元素是否在A中出现&#xff0c;结果存储在数组C中&#xff0c;出现用1代表&#xff0c;未出现用0代表…

php pacs,DICOM医学图像处理:WEB PACS初谈四,PHP DICOM Class – 只要踏出一步,路就在前方——zssure – CSDN博客...

背景&#xff1a;预告了好久的几篇专栏博文一直没有整理好&#xff0c;主要原因是早前希望搭建的WML服务器计划遇到了问题。起初以为参照DCMTK的官方文档wwwapp.txt结合前两天搭建的WAMP服务器可以顺利的实现WML服务&#xff0c;借此就可以同时完成WEB PACS系列以及搭建Dicom W…

COM, COM+ and .NET 的区别

所有的优秀程序员都会尽自己的最大努力去使自己所写的程序具有更好的可重用性&#xff0c;因为它可以让你快速地写出更加健壮和可升级性的程序。   有两种使代码重用的选择&#xff1a;  1&#xff0e;白盒&#xff1a;最简单的一种&#xff0c;就是把你的程序片拷贝到另一…

mfc在运行的时候为什么没有实例化_为什么不建议把数据库部署在Docker容器内?...

本文同步Java知音社区&#xff0c;专注于Java原文&#xff1a;https://www.toutiao.com/i6805798581971190276/近2年Docker非常的火热&#xff0c;各位开发者恨不得把所有的应用、软件都部署在Docker容器中&#xff0c;但是您确定也要把数据库也部署的容器中吗&#xff1f;这个…

php 获取指定时间 次日,PHP时间判断语句

用php只能获取服务器端的时间&#xff0c;得用js获取客户端时间&#xff0c;然后生成对应的css文件内容。为了确保页面能正确显示&#xff0c;还得有个默认的css文件链接。示例代码如下&#xff1a;function DynamicLoad(){var Selfthis; //对象自身//功能&#xff1a;加载指定…

泛型的优势

假设需要一个两个整形变量交换的函数&#xff0c;我们很快就可以嗒嗒嗒嗒的敲出下面的 Swap 函数&#xff1a;void Swap(ref int lhs, ref int rhs){int temp lhs;lhs rhs;rhs temp;}随着项目进展&#xff0c;我们发现&#xff0c;需要用到 Swap 函数的不仅是整形,变量 还有…

老男孩python全栈开发视频教程_老男孩Python全栈开发(92天全)视频教程 自学笔记08...

day8课程内容&#xff1a;文件操作fopen(小重山,r,encodingutf8)     #以读的方式打开文件dataf.read()print(data)f.close() #关闭文件句柄fopen(小重山2,w,encodingutf8)    #以清空再写 的方式打开文件&#xff0c;这一步就将文件以前的内容清空了&#xff0c;如果…

php echo 后必须die,die 提示的消息都去哪了?

小弟新手&#xff1a;$fpfopen("./readme.txt","r") or die("不能打开该文件");想问下&#xff0c;如果打开失败&#xff0c;那么die 的这条消息输出到哪了啊&#xff1f;貌似打开失败界面也没有直接弹出这条消息&#xff1f;请问使用die这条消息…

BSTR、char* 和 CString 之间的转换 (转)

BSTR、char* 和 CString 之间的转换 (1) char*转换成CString 若将char*转换成CString&#xff0c;除了直接赋值外&#xff0c;还可使用CString::Format进行。例如&#xff1a; char chArray[] "This is a test"; char * p "This is a test"; 或 LPSTR …

python打开音频文件_Python处理音频文件的实用姿势

每天叫醒我的不是理想&#xff0c;是楼下广场舞的音乐。音乐是人类的通用语言&#xff0c;不分国界不分种族。抖音短视频爆火的关键因素之一&#xff0c;就是普通人也能便捷地使用BGM表达自我。从感性角度看&#xff0c;音乐可以有很多种解释&#xff0c;如&#xff1a;音乐是有…

java三路快排,java二路快排很慢

老师&#xff0c;以下是我二路快排的java代码public class quickSortTwoway {public quickSortTwoway() {};public static void quickSort(Integer[] arr) {__quickSort(arr, 0, arr.length - 1);}private static void __quickSort(Integer[] arr, int l, int r) {if(l > r)…