搜索
bottom↓
回复: 11

[开源项目] 软件调试器【恢复】

[复制链接]

出0入0汤圆

发表于 2008-11-23 08:32:54 | 显示全部楼层 |阅读模式
在GNU GDB调试软件中存在一种方式:

PC Host主机上运行gdb主程序(一个命令行的调试工具),在Target目标板上运行一个庄(gdb stub),让这个庄与gdb主程序通信,从而实现在PC Host主机对目标板上运行的软件进行调试(汇编级调试及C/C++源代码级调试)。在linux kernel 2.6.x官方发布中已包含了完整的gdb stub服务,而netbsd中也配置了全套的gdb stub服务。详细的linux kernel kgdb资料可参见:

http://www.ibm.com/developerworks/cn/linux/l-kdb/

http://www.ibm.com/developerworks/cn/linux/l-kdbug/index.html



原始的linux kernel gdb stub见:http://kgdb.linsyssoft.com



那我们这个开源项目要做的是什么呢?就是在一些RTOS上采用gdb stub类似的技术也实现一种软件调试方法,进行RTOS的源码级调试。



技术上,和原有的kgdb的差别主要在于通信方式上。因为目前USB已经很普及了,很多SoC都能够支持USB device,所以通信采用USB的模式(原有的kgdb采用的串口或以太网的方式)。采用USB通信的好处是,从目标板上获取数据或调试交互速度加快,在下载文件或获取板子上的memory内容上区别将非常明显。



平台:arm(ARM7或ARM9),完成后也可以考虑其他平台,例如avr32

操作系统:ucos或RT-Thread。希望能够做到操作系统无关,甚至是可以用来调试操作系统。

调试器:gdb,目前已经存在一些使用gdb做为调试后端的GUI工具,可以直接使用。linux上的ddd,insight,及windows上的insight,eclipse,codeblocks



因为这个项目是纯软件上的,所有的代码都会开源。



这个帖子会根据进度不定时更新,欢迎参与!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-1-15 12:37:22 | 显示全部楼层
gdb stub 不能让cpu停住,只是让cpu在死转

出0入0汤圆

发表于 2009-1-14 15:06:50 | 显示全部楼层
这是什么原理呀?怎么让cpu停住呀

出0入0汤圆

发表于 2009-1-14 13:49:08 | 显示全部楼层
楼主想法不错,不过这只能针对具体某个操作系统或者是bootloader,不知道楼主准备在哪个系统上做



to 【4楼】 dack 

redboot和ecos用code::blocks+gdb调试,是直接用code::blocks编译,然后调试吗

出0入0汤圆

 楼主| 发表于 2008-11-29 22:49:56 | 显示全部楼层
现在发现支持调试的工具真多,例如OpenOCD + USB2JTAG的东西,就可以直接调试软件了,也便宜~~

出0入0汤圆

 楼主| 发表于 2008-11-25 15:49:19 | 显示全部楼层
嚯嚯,原来redboot已经支持了啊,还不知道。



不过应该也没关系,自己再实现一套也不难。至于为什么用usb,因为usb的虚拟串口应该会比真实串口快。PC上的软件基本上不会写的,关键是gdb stub和usb serial。

出0入0汤圆

 楼主| 发表于 2008-11-23 09:38:17 | 显示全部楼层
GDB RSP(Remote Serial Protocol)定义了GDB宿主机与被调试目标机进行通信时数据包的格式。信息的格式是:$数据#校验码。多数信息使用ASCII码,数据由一系列的 ASCII码组成,校验码是由两个16进制数组成的单字节校验码。接收方接收数据并校验,若正确则回应“+”,否则回应“-”。通信的内容包括读写数据、控制程序运行、报告程序状态等命令。RSP的基本命令从通信对话角度可以分为两种:



    (1)请求

    ?:读当前系统状态

    g:读所有寄存器

    G<regiater_data>:写所有寄存器

    m<address>,<length>:读内存

    M<address>,<length>:<memory_data>:写内存

    c:继续执行

    s:单步执行

    k:终止进程



    (2)答复

    “”:告诉GDB上次请求命令不支持。

    E:告诉GDB出错

    OK:上次请求正确

    w<exit_Status>:系统在“exit_status”状态下退出。

    X<signal>:系统在signal信号下终止。

    S<signal>:系统在signal信号下停止。

    O:告诉GDB控制台输出。这也是惟一向GDB发出的命令。



完整的RSP协议描述:

http://sourceware.org/gdb/current/onlinedocs/gdb_34.html#SEC708

本贴被 queue 编辑过,最后修改时间:2008-11-23,09:41:05.

出0入0汤圆

发表于 2008-11-23 09:57:12 | 显示全部楼层
而且你用usb串口似乎完全没必要写软件,直接连上就可以工作了。一般开发板上串口都是必备的吧。usb slave倒是不是都有

出0入0汤圆

发表于 2008-11-23 09:45:59 | 显示全部楼层
不太理解楼主这么做和现有的相比有什么优点。

我现在开发板装redboot(自带gdb stub),通过网络连接,前端用code::blocks+gdb进行调试,可以调试裸机代码,调试操作系统当然也没问题。速度我想不比usb慢,而且你还要用usb串口,速度一般不会比真串口快。
头像被屏蔽

出0入0汤圆

发表于 2008-11-23 09:32:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2008-11-23 08:37:39 | 显示全部楼层
软件代码结构:

gdb stub -- 这部分代码主要用于解析gdb发送过来的命令,并执行相应的动作;

usb stack -- 这部分代码是一件简单的usb stack,包含EP控制代码,以及serial(串口)的代码



gdb stub与usb stack之间采用简单的接口进行通信,基本上依然采用原来的串口接口方式进行通信(反正USB那边也是一个虚拟串口)。



为了能够调试中断程序,usb串口代码采用非中断模式进行数据收发。

出0入0汤圆

发表于 2010-7-31 14:48:02 | 显示全部楼层
支持一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 08:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表