QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

热搜: eclipse ecos stm32 ecos源码 如何获取ecos ecos源代码 code goAhead redboot
搜索
发新帖

20

主题

0

听众

435

积分

中级工程师

Rank: 3

该用户从未签到

最后登录
2014-6-18
威望
0
金钱
365
贡献
0
注册时间
2013-10-12
积分
435
帖子
55
主题
20
精华
3
UID
495
发表于 2013-12-26 19:38:50 |显示全部楼层
更多
本帖最后由 zoomdy 于 2013-12-27 08:09 编辑

可以使用RedBoot或者仿真器调试eCos系统,RedBoot集成的GDBStubs已经支持eCos的多线程调试,使用GDB命令info threads就可以读取当前的线程状态。但是使用仿真器时,由于仿真器不是专门针对eCos设计,因此通常不提供eCos系统多线程调试支持。为了在使用仿真器的情况下也能获得eCos系统多线程调试支持,zoomdy编写了GDBServer Extender工具来扩展仿真器GDBServer功能使其支持eCos多线程调试。GDBServer Extender 0.0.1是一个早期原型版本,虽然距离最终的成为Eclipse插件或基于Eclipse RCP的独立工具的目标还有相当长的路要走,但是它已经可以工作啦!

mingdu.zheng <at> gmail <dot> com
http://blog.csdn.net/zoomdy/article/details/17589607

基本原理
使用仿真器调试时,仿真器软件将开启一个GDB Server服务,例如J-Link提供并开启J-Link GDB Server,GDB通过Socket连接到该GDB Server服务程序并交换数据,GDB Server将GDB的请求转换为仿真器的控制指令传递给仿真器。典型的连接示意图如下。

GDBServer Extender的工作原理是在GDB和GDBServer之间插入另外的节点,GDB连接到GDBServer Extender,GDBServer Extender连接仿真器的GDBServer,所有的GDB请求都首先经过GDBServer Extender 然后再发给GDBServer,因此GDBServer Extender可以知道GDB发送了什么请求,并将GDBServer不支持的GDB请求转换成GDBServer支持的请求再发送给GDBServer。同样的,所有GDBServer的响应都首先经过GDBServer Extender然后再返回到GDB,GDBServer Extender可以对GDBServer返回的数据进行再加工后返回给GDB。插入GDBServer Extender后的连接示意图如下。

有了截获并再加工GDB命令和响应的手段后,就可以将GDB读取线程信息的指令转换为读取相关存储器的指令发送给GDBServer,并将返回的数据结果解析为线程信息返回给GDB,这就解决了仿真器GDBServer不支持多线程调试的问题。对于非线程信息获取相关的GDB指令,GDBServer Extender不做任何处理原样转发给仿真器GDBServer。

下载
GDBServer Extender使用Java编写,因此首先要安装JRE,如果是使用Eclipse+GDB调试的,那基本上已经安装过JRE了,因为Eclipse也是Java编写的。

JRE的下载页面http://www.oracle.com/technetwork/cn/java/javase/downloads/index.html,下载JRE即可。

然后到GDBServer Extender项目主页下载页面下载gdbserver-extender-0.0.1.jar,http://sourceforge.net/projects/gdbserver-extender/files/。

使用方法
首先要打开仿真器的GDBServer并与目标机建立正确的连接,并要求GDBServer的监听端口为2331(J-Link的默认端口,如果不是J-Link,那么修改GDBServer配置将监听端口更改为2331),GDBServer Extender 0.0.1作为原型版本,所有的参数都使用了硬编码而不能配置,以后的版本将会添加自定义连接端口。

如果是Windows打开命令提示符,不要使用Cygwin的shell;如果是Linux,打开任意的终端。在命令提示符输入
  1. java -jar <存储路径>/gdbserver-extender-0.0.1.jar
复制代码
开启GDBServer Extender,如果成功,那么将看到“服务已开启,监听端口:10000,等待连接。”等信息。

使用GDB
依照往常打开GDB并连接远程目标,远程目标设定为localhost:1000,GDBServer Extender 0.0.1作为原型版本,所有的参数都使用了硬编码而不能配置,以后的版本将会添加自定义连接端口。
  1. (gdb)target remote localhost:10000  
复制代码

如果使用Eclipse,那么要更改连接端口为10000(Eclipse的默认连接端口即为10000)。

正确设定连接后,按照往常的调试方法进行调试,当目标机停下来时,可以在GDB输入
  1. (gdb)info theads  
复制代码
查看线程列表。
  1. (gdb)thread <id>
复制代码
选择指定的线程作为当前操作线程<id>为线程编号,即info threads输出最前面的数字。
  1. (gdb)bt  
复制代码
查看选中线程的调用栈。

使用Eclipse+GDB
如果使用Eclipse,使用默认的连接端口(Port number)10000,将调试配置Debugger页的Force thread list update on suspend勾上就会自动拉取线程。

Eclipse重要补充
为了读取线程相关数据,GDBServer Extender要求GDB发送qSymbol请求以解析所需的符号,在单独使用GDB的情况下,这是没有问题的,在连接GDBServer后,GDB将发送qSymbol请求,而使用Eclipse+GDB时却不会发送qSymbol请求,解决办法时添加sym指令手动加载应用程序符号,在调试配置的Startup页的Intialization Commands输入框内填入-interpreter-exec console "sym 文件名",如果在Windows下使用官方的GDB,那么文件名必须是Cygwin路径,然后把Load symbols选项取消。见下图。

开始调试后Eclipse的Debug视图就列出当前所有线程及调用栈,需要注意的是标有<main>的线程是指CPU当前正在执行的线程,总是与后面的某一条线程记录重复,也就是看到的线程比实际运行的线程数目要多一条,其中当前线程被重复了两次。

如果所使用的Eclipse版本不能暂停执行过程,也就是说Eclipse的Run >> Suspend不可用,那么可以在运行GDBServer Extender的命令提示符窗口输入Ctrl+C字符串然后回车来暂停执行过程。

使用限制
0.0.1版本是硬编码的,包括对线程数据结构的读取,因此只有在使用默认的kernel配置的情况下读取的线程数据才保证是完全正确的,如果修改了kernel配置引起Cyg_Thread类的结构发生改变,那么返回的数据可能是错误的。在以后的版本中将尝试加入自动检测kernel配置情况来消除这种限制。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博账号登陆

回复

使用道具 举报

83

主题

9

听众

2608

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2014-6-23
威望
0
金钱
2109
贡献
0
注册时间
2012-5-1
积分
2608
帖子
479
主题
83
精华
4
UID
2
发表于 2013-12-26 22:16:16 |显示全部楼层
牛X啊,会写eclipse插件。
照这个能力, 可以整个ecos官方那调试环境??呵呵!
回复

使用道具 举报

83

主题

9

听众

2608

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2014-6-23
威望
0
金钱
2109
贡献
0
注册时间
2012-5-1
积分
2608
帖子
479
主题
83
精华
4
UID
2
发表于 2013-12-26 22:17:26 |显示全部楼层
期待GDBServer Extender可以安装到eclipse上去,这样就很省事了!
回复

使用道具 举报

20

主题

0

听众

435

积分

中级工程师

Rank: 3

该用户从未签到

最后登录
2014-6-18
威望
0
金钱
365
贡献
0
注册时间
2013-10-12
积分
435
帖子
55
主题
20
精华
3
UID
495
发表于 2013-12-27 08:11:57 |显示全部楼层
reille 发表于 2013-12-26 22:16
牛X啊,会写eclipse插件。
照这个能力, 可以整个ecos官方那调试环境??呵呵! ...

理论上是可以的,一个人的精力太有限,
回复

使用道具 举报

20

主题

0

听众

435

积分

中级工程师

Rank: 3

该用户从未签到

最后登录
2014-6-18
威望
0
金钱
365
贡献
0
注册时间
2013-10-12
积分
435
帖子
55
主题
20
精华
3
UID
495
发表于 2013-12-27 08:12:24 |显示全部楼层
发现有个重要的步骤忘写了,一早来补上
回复

使用道具 举报

20

主题

0

听众

435

积分

中级工程师

Rank: 3

该用户从未签到

最后登录
2014-6-18
威望
0
金钱
365
贡献
0
注册时间
2013-10-12
积分
435
帖子
55
主题
20
精华
3
UID
495
发表于 2013-12-27 08:13:44 |显示全部楼层
reille 发表于 2013-12-26 22:17
期待GDBServer Extender可以安装到eclipse上去,这样就很省事了!

这个期待估计要花点时间啊,我是刚开始学习Eclipse插件编写,离会写还有距离
回复

使用道具 举报

83

主题

9

听众

2608

积分

超级版主

Rank: 8Rank: 8Rank: 8Rank: 8

该用户从未签到

最后登录
2014-6-23
威望
0
金钱
2109
贡献
0
注册时间
2012-5-1
积分
2608
帖子
479
主题
83
精华
4
UID
2
发表于 2013-12-27 09:02:57 |显示全部楼层
zoomdy 发表于 2013-12-27 08:13
这个期待估计要花点时间啊,我是刚开始学习Eclipse插件编写,离会写还有距离 ...

那只是时间问题而已~只要上手了,那就是小KS了。
制约eCos广泛使用的原因之一就是没有免费的、便利的、亲民的开发调试工具。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

无觅相关文章插件

申请友链|手机版|关于本站|站点帮助|eCos技术网 ( 粤ICP备12094833号-1 )   

GMT+8, 2014-6-24 03:19 , Processed in 0.125473 second(s), 47 queries .

Powered by Discuz!2.5 X2.5

© 2001-2012 Comsenz Inc.

回顶部