CN115757183A - 天熠嵌入式操作系统下一种基于代理的任务级调试方法 - Google Patents
天熠嵌入式操作系统下一种基于代理的任务级调试方法 Download PDFInfo
- Publication number
- CN115757183A CN115757183A CN202211557343.9A CN202211557343A CN115757183A CN 115757183 A CN115757183 A CN 115757183A CN 202211557343 A CN202211557343 A CN 202211557343A CN 115757183 A CN115757183 A CN 115757183A
- Authority
- CN
- China
- Prior art keywords
- debugging
- task
- operating system
- embedded operating
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种天熠嵌入式操作系统下一种基于代理的任务级调试方法,属于软件调试领域。本发明在天熠嵌入式操作系统上实现调试代理并将调试代理模块运行在目标机端,以天熠嵌入式操作系统中线程的方式实现该调试代理模块,上位机运行GDB调试器,接收和处理来自用户的调试命令,然后GDB调试器将此命令基于目标机架构以RSP包的形式发给调试代理模块解析,返回结果信息,这样使得天熠嵌入式操作系统能够有一个在线调试环境。本发明能够完美解决现有的嵌入式操作系统只能采用串口打印的方式进行应用程序的调试,本发明将被调试程序作为一个运行在天熠嵌入式操作系统下的任务,且对此任务进行调试不会影响其他无关任务的运行。
Description
技术领域
本发明属于软件调试领域,具体涉及一种天熠嵌入式操作系统下一种基于代理的任务级调试方法。
背景技术
调试又称排错或纠错。调试的任务是根据发现的错误,找出原因以及具体的位置以改正错误。即对错误进行定位并分析原因。
然而通用操作系统与嵌入式操作系统在调试环境上存在明显的差别。一是被调试程序的运行位置不一致,二是运行调试代理的操作系统不一致。对于通用桌面操作系统,如windows、l inux等,调试器与被调试程序都运行于桌面操作系统,通过使用GDB或者其他软件调试器来控制和访问被调试程序。对于嵌入式操作系统,调试器运行在桌面操作系统,被调试程序则运行在目标机器中。
GDB是一种开源调试器,所包含的功能几乎涵盖了商用调试器的全部功能。其为编程人员提供了良好的交互界面,可以完成本地或者远程的程序源码级和指令级的调试。
目前在天熠嵌入式操作系统下常用的调试手段为串口调试。在调试程序时添加打印信息,打印信息通过串口工具比如串口助手、secureCRT等工具打印出来,通过逐步增加打印信息的方式定位问题的位置,达到纠错的目的。
目前串口打印作为一种离线调试方式,需要将编译好的程序装载到目标机上运行,然后通过串口方式打印想要获取的信息。然而由于问题的复杂性,这个过程往往要持续多次,对开发人员来说,大大增加了开发周期和开发成本,降低了嵌入式操作系统开发速度和开发质量。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是如何提供一种天熠嵌入式操作系统下一种基于代理的任务级调试方法,以解决通过串口方式调试对开发人员来说,大大增加了开发周期和开发成本,降低了嵌入式操作系统开发速度和开发质量的问题。
(二)技术方案
为了解决上述技术问题,本发明提出一种天熠嵌入式操作系统下一种基于代理的任务级调试方法,该方法包括
S1、准备好上位机运行环境:GDB调试器运行在上位机中,下载并编译对应版本以及对应架构的GDB源码,准备对应目标机架构的交叉编译器以及链接脚本文件;
S2、开发调试代理:针对天熠嵌入式操作系统和具体的目标CPU架构,在天熠操作系统上,开发定制目标机端的调试代理源码;调试代理模块包括初始化模块、命令解析执行模块以及数据传输模块;
S3、应用开发与调试阶段
S31、在上位机中通过准备好的交叉编译链以及链接脚本将已开发完成的调试代理模块以及被调试应用源码一起编译生成带’-g’选项的可执行文件,‘-g’选项表示可执行文件附带调试信息;
S32、将目标镜像文件下载至目标机上运行,等待shel l启动;
S33、通过串口或者网络输入封装好的命令以初始化调试代理模块以及其他驱动,并输出字符串表示目标机等待连接;
S34、上位机编译好的GDB调试器启动,通过“target”命令连接目标机,连接成功后上位机GDB调试器处于轮询模式;
S35、通过上位机GDB调试器发送各种调试命令实现对目标程序的远程调试;
S36、输入调试命令,等待GDB调试器回复,重复循环此过程达到调试目的。
进一步地,上位机包括:GDB调试器、宿主机操作系统以及底层硬件,用户以命令行的形式或者通过集成到天熠集成开发环境以图形界面操作的方式与目标机端调试代理模块进行通信。
进一步地,目标机端包括:调试代理模块、用户程序、天熠嵌入式操作系统和底层硬件;目标机端中的调试代理模块需要根据目标架构以及天熠嵌入式操作系统特性进行实现,在选择好具体要调试的任务之后,通过上位机GDB调试器和目标机调试代理模块进行命令交互,实现任务执行流程的指令级控制,实现用户对调试任务的出错位置的追踪判断,达到调试的目的。
进一步地,依据RSP协议建立上位机与目标机的远程通信。
进一步地,所述步骤S2中,初始化模块负责注册目标机,初始化连接宿主机GDB调试器需要的网络或者串口驱动。
进一步地,所述步骤S2中,数据传输模块负责上位机GDB调试器与目标机端调试代理模块的数据收发工作,将数据按照RSP协议要求打包,通过串口/网络双向传输。
进一步地,命令解析执行模块,解析出的命令包括执行命令和校验命令两种,解析执行模块包括:断点管理子模块、内存读写子模块、寄存器缓存子模块、中断或异常处理子模块和任务状态记录子模块。
进一步地,断点管理子模块中,插入断点的位置由用户给出,在GDB调试器上通过‘b’命令插入断点时,断点是依据用户输入的命令中给出的符号根据输入文件解析出地址address,进而分析该地址是否已有断点,并保存此地址原本的指令便于继续运行或者删除断点时恢复指令。
进一步地,中断或异常处理子模块中,该子模块触发的首要条件是在初始化模块时注册该中断或异常处理子模块,进入中断或者异常时程序上下文由硬件保存,由软件负责维护通用寄存器寄存器的值;该子模块让调试代理模块和调试任务保持同步,在中断或者异常处理中完成任务状态的改变以便进行任务的切换,最后恢复现场,退出中断或异常处理。
进一步地,任务状态记录子模块中,在设计调试代理模块时向任务插入断点,不仅要向GDB调试器报告任务停下来的位置,还要知道任务现在的状态,采用链表操作来实现调试任务状态转换记录,用户调试任务的优先级需要低于调试守护任务的优先级。
(三)有益效果
本发明提出一种天熠嵌入式操作系统下一种基于代理的任务级调试方法,本发明的效果在于:
1.本发明提供了一种完整的在线调试天熠操作系统应用程序的方案,能够完美解决现有的嵌入式操作系统只能采用串口打印的方式进行应用程序的调试;
2.本发明支持对天熠嵌入式操作系统单个或者多个应用程序进行调试,将调试代理封装在shel l命令下,通过shel l命令的方式来初始化调试代理,将被调试程序作为一个运行在天熠嵌入式操作系统下的任务,且对此任务进行调试不会影响其他无关任务的运行。
附图说明
图1为本发明的整体框架图;
图2为调试代理框架图;
图3为断点创建过程;
图4为断点插入过程;
图5为中断或异常处理流程;
图6为断点插入时链表转换流程;
图7为用户与调试代理通信流程。
具体实施方式
为使本发明的目的、内容和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
鉴于天熠嵌入式操作系统任务级调试工具不完备的情况,本发明目的在于提供一种基于天熠嵌入式操作系统的任务级调试方法,在天熠嵌入式操作系统上实现调试代理并将调试代理模块运行在目标机端,以天熠嵌入式操作系统中线程的方式实现该调试代理模块,上位机运行GDB调试器,接收和处理来自用户的调试命令,然后GDB调试器将此命令基于目标机架构以RSP包的形式发给调试代理模块解析,返回结果信息,这样使得天熠嵌入式操作系统能够有一个在线调试环境。
本发明基于天熠嵌入式操作系统和特定目标CPU架构实现天熠嵌入式操作系统调试代理功能模块。由上位机的GDB宿主机端通过目标机的调试代理模块对被调试任务进行远程调试。
本发明的总体层次如图1所示。其中,上位机包括:GDB调试器、宿主机操作系统以及底层硬件。用户可以以命令行的形式或者通过集成到天熠集成开发环境以图形界面操作的方式与目标机端调试代理模块进行通信。
目标机端包括:调试代理模块、用户程序、天熠嵌入式操作系统和底层硬件;目标机端中的调试代理模块需要根据目标架构以及天熠嵌入式操作系统特性进行实现。在选择好具体要调试的任务之后,通过上位机GDB调试器和目标机调试代理模块进行命令交互,实现任务执行流程的指令级控制,实现用户对调试任务的出错位置的追踪判断,达到调试的目的。
本发明依据RSP协议建立上位机与目标机的远程通信。RSP协议是一种上位机与目标机之间的远程通信协议。
上位机GDB调试器与目标机调试代理之间的通信采用底层最常用的两种方式—串口以及网络来实现。用户可在调试代理初始化时根据自己硬件的情况来自行选择。
本发明的具体开发以及使用应遵循以下流程:
S1、准备好上位机运行环境。由于GDB调试器运行在上位机中,下载并编译对应版本以及对应架构的GDB源码。此外,由于调试代理模块以及应用程序在目标机上运行,因此除了调试器,还需要准备好对应目标机架构的交叉编译器以及链接脚本文件。
S2、开发调试代理。针对天熠嵌入式操作系统和具体的目标CPU架构,在天熠操作系统上,开发定制目标机端的调试代理源码。图2描述了本方案的调试代理模块的层次结构,调试代理模块包括初始化模块、命令解析执行模块以及数据传输模块。
初始化模块负责注册目标机,初始化连接宿主机GDB调试器需要的网络或者串口驱动。
数据传输模块负责上位机GDB调试器与目标机端调试代理模块的数据收发工作,将数据按照RSP协议要求打包,通过串口/网络双向传输。
命令解析执行模块,解析出的命令包括执行命令和校验命令两种,其中执行命令如“Z/z”(插入或删除断点)、“vcont:c/vcont:s”(non-stop模式下任务继续执行或单步)、“m/M”(读/写内存)等,校验命令包括“q”(基本功能校验)、“Q”(基本功能设置)、“?”(任务停止反馈)等。
解析执行模块包括:断点管理子模块、内存读写子模块、寄存器缓存子模块、中断或异常处理子模块、任务状态记录子模块等。
(1)断点管理子模块。插入断点的位置由用户给出,如“b TaskDebug.c:32”的含义是向TaskDebug.c文件的第32行插入断点,‘b’为breakpoint的缩写。然而在GDB调试器上通过‘b’命令插入断点时,并非是在这一时间向程序空间插入了断点,而是程序运行至32行时才会用断点指令替换原有的指令。断点创建与插入流程如图3、4所示。断点是依据用户输入的命令中给出的符号根据输入文件解析出地址address,进而分析该地址是否已有断点,并保存此地址原本的指令便于继续运行或者删除断点时恢复指令。
(2)中断或异常处理子模块。如图5所示,该模块触发的首要条件是在初始化模块时注册该中断或异常处理子模块。其次,进入中断或者异常时程序上下文如PC由硬件保存,一部分由软件负责维护,如通用寄存器寄存器的值。接着则是处理程序让调试代理模块和调试任务保持同步,比如通过信号量机制来实现,在处理例程中释放信号量,发送回复上位机GDB调试器的消息前获取信号量。就是在中断或者异常处理中完成任务状态的改变以便进行任务的切换。最后恢复现场,退出中断或异常处理。
(3)任务状态记录子模块。由于GDB主机端需要知道被调试任务的状态等信息(对外提供“info threads”命令查看任务信息),因此在设计调试代理模块时向任务插入断点,不仅要向GDB调试器报告任务停下来的位置,还要知道任务现在的状态,如suspended、stopped、running等,基于此目的设计了一种链表操作来实现调试任务状态转换记录。这里需要注意的是,用户调试任务的优先级需要低于调试守护任务的优先级。断点插入时任务节点在链表中的入链与出链表情况如图6所示。
实现了三种双向循环链表结构。
anchor:保存因断点进入中断或异常的任务的双向循环链表;
stopped:保存已经停止的任务的双向循环链表;
notification:保存需要报告给GDB的已停止任务信息的双向循环链表。
S3、应用开发与调试阶段
S31、在上位机中通过准备好的交叉编译链以及链接脚本将已开发完成的调试代理模块以及被调试应用源码一起编译生成带’-g’选项的可执行文件,‘-g’选项表示可执行文件附带调试信息,如符号表等;
S32、将目标镜像文件下载至目标机上运行,等待shel l启动;
S33、通过串口或者网络输入封装好的命令以初始化调试代理模块以及其他驱动,并输出字符串表示目标机等待连接;
S34、上位机编译好的GDB调试器启动,通过“target”命令连接目标机,连接成功后上位机GDB调试器处于轮询模式;
S35、应用调试。通过上位机GDB调试器发送各种调试命令实现对目标程序的远程调试,“thread”命令可选择单独对某一任务进行调试而不影响其他任务的执行。
S36、输入调试命令,等待GDB调试器回复。重复循环此过程即可达到调试目的。
详细执行流程如图7所示。
本发明的关键点分为以下几点:
1.设计调试代理。在天熠嵌入式操作系统上实现调试代理功能模块,由调试代理模块完成命令的获取、分发、解析执行以及向上位机反馈;
2.提供了一套完整的在线调试天熠操作系统应用程序的方案;
3.一种任务级调试方法。即调试一个或者多个任务时,不会影响其他无关任务的执行。
本发明的效果在于:
1.本发明提供了一种完整的在线调试天熠操作系统应用程序的方案,能够完美解决现有的嵌入式操作系统只能采用串口打印的方式进行应用程序的调试;
2.本发明支持对天熠嵌入式操作系统单个或者多个应用程序进行调试,将调试代理封装在shel l命令下,通过shel l命令的方式来初始化调试代理,将被调试程序作为一个运行在天熠嵌入式操作系统下的任务,且对此任务进行调试不会影响其他无关任务的运行。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (10)
1.一种天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,该方法包括
S1、准备好上位机运行环境:GDB调试器运行在上位机中,下载并编译对应版本以及对应架构的GDB源码,准备对应目标机架构的交叉编译器以及链接脚本文件;
S2、开发调试代理:针对天熠嵌入式操作系统和具体的目标CPU架构,在天熠操作系统上,开发定制目标机端的调试代理源码;调试代理模块包括初始化模块、命令解析执行模块以及数据传输模块;
S3、应用开发与调试阶段
S31、在上位机中通过准备好的交叉编译链以及链接脚本将已开发完成的调试代理模块以及被调试应用源码一起编译生成带’-g’选项的可执行文件,‘-g’选项表示可执行文件附带调试信息;
S32、将目标镜像文件下载至目标机上运行,等待shell启动;
S33、通过串口或者网络输入封装好的命令以初始化调试代理模块以及其他驱动,并输出字符串表示目标机等待连接;
S34、上位机编译好的GDB调试器启动,通过“target”命令连接目标机,连接成功后上位机GDB调试器处于轮询模式;
S35、通过上位机GDB调试器发送各种调试命令实现对目标程序的远程调试;
S36、输入调试命令,等待GDB调试器回复,重复循环此过程达到调试目的。
2.如权利要求1所述的天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,上位机包括:GDB调试器、宿主机操作系统以及底层硬件,用户以命令行的形式或者通过集成到天熠集成开发环境以图形界面操作的方式与目标机端调试代理模块进行通信。
3.如权利要求2所述的天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,目标机端包括:调试代理模块、用户程序、天熠嵌入式操作系统和底层硬件;目标机端中的调试代理模块需要根据目标架构以及天熠嵌入式操作系统特性进行实现,在选择好具体要调试的任务之后,通过上位机GDB调试器和目标机调试代理模块进行命令交互,实现任务执行流程的指令级控制,实现用户对调试任务的出错位置的追踪判断,达到调试的目的。
4.如权利要求3所述的天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,依据RSP协议建立上位机与目标机的远程通信。
5.如权利要求1-4任一项所述的天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,所述步骤S2中,初始化模块负责注册目标机,初始化连接宿主机GDB调试器需要的网络或者串口驱动。
6.如权利要求5所述的天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,所述步骤S2中,数据传输模块负责上位机GDB调试器与目标机端调试代理模块的数据收发工作,将数据按照RSP协议要求打包,通过串口/网络双向传输。
7.如权利要求5所述的天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,命令解析执行模块,解析出的命令包括执行命令和校验命令两种,解析执行模块包括:断点管理子模块、内存读写子模块、寄存器缓存子模块、中断或异常处理子模块和任务状态记录子模块。
8.如权利要求7所述的天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,断点管理子模块中,插入断点的位置由用户给出,在GDB调试器上通过‘b’命令插入断点时,断点是依据用户输入的命令中给出的符号根据输入文件解析出地址address,进而分析该地址是否已有断点,并保存此地址原本的指令便于继续运行或者删除断点时恢复指令。
9.如权利要求7所述的天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,中断或异常处理子模块中,该子模块触发的首要条件是在初始化模块时注册该中断或异常处理子模块,进入中断或者异常时程序上下文由硬件保存,由软件负责维护通用寄存器寄存器的值;该子模块让调试代理模块和调试任务保持同步,在中断或者异常处理中完成任务状态的改变以便进行任务的切换,最后恢复现场,退出中断或异常处理。
10.如权利要求7所述的天熠嵌入式操作系统下一种基于代理的任务级调试方法,其特征在于,任务状态记录子模块中,在设计调试代理模块时向任务插入断点,不仅要向GDB调试器报告任务停下来的位置,还要知道任务现在的状态,采用链表操作来实现调试任务状态转换记录,用户调试任务的优先级需要低于调试守护任务的优先级。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211557343.9A CN115757183A (zh) | 2022-12-06 | 2022-12-06 | 天熠嵌入式操作系统下一种基于代理的任务级调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211557343.9A CN115757183A (zh) | 2022-12-06 | 2022-12-06 | 天熠嵌入式操作系统下一种基于代理的任务级调试方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115757183A true CN115757183A (zh) | 2023-03-07 |
Family
ID=85343664
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211557343.9A Pending CN115757183A (zh) | 2022-12-06 | 2022-12-06 | 天熠嵌入式操作系统下一种基于代理的任务级调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115757183A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116662157A (zh) * | 2023-04-26 | 2023-08-29 | 北京计算机技术及应用研究所 | 一种针对tms320 c28x指令集模拟器的虚拟化调试系统设计方法 |
CN117376229A (zh) * | 2023-12-08 | 2024-01-09 | 成都菁蓉联创科技有限公司 | 基于嵌入式设备的ftp文件系统软件交叉调试方法及系统 |
CN117472790A (zh) * | 2023-12-28 | 2024-01-30 | 南京翼辉信息技术有限公司 | 一种嵌入式操作系统的远程调试实现方法 |
-
2022
- 2022-12-06 CN CN202211557343.9A patent/CN115757183A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116662157A (zh) * | 2023-04-26 | 2023-08-29 | 北京计算机技术及应用研究所 | 一种针对tms320 c28x指令集模拟器的虚拟化调试系统设计方法 |
CN116662157B (zh) * | 2023-04-26 | 2024-02-02 | 北京计算机技术及应用研究所 | 一种针对tms320 c28x指令集模拟器的虚拟化调试系统设计方法 |
CN117376229A (zh) * | 2023-12-08 | 2024-01-09 | 成都菁蓉联创科技有限公司 | 基于嵌入式设备的ftp文件系统软件交叉调试方法及系统 |
CN117376229B (zh) * | 2023-12-08 | 2024-02-06 | 成都菁蓉联创科技有限公司 | 基于嵌入式设备的ftp文件系统软件交叉调试方法及系统 |
CN117472790A (zh) * | 2023-12-28 | 2024-01-30 | 南京翼辉信息技术有限公司 | 一种嵌入式操作系统的远程调试实现方法 |
CN117472790B (zh) * | 2023-12-28 | 2024-03-15 | 南京翼辉信息技术有限公司 | 一种嵌入式操作系统的远程调试实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115757183A (zh) | 天熠嵌入式操作系统下一种基于代理的任务级调试方法 | |
EP2017983A1 (en) | A debugging method and apparatus for performing telecom class service development based on model driven | |
US7185321B1 (en) | Method and system for debugging through supervisory operating codes and self modifying codes | |
US5680542A (en) | Method and apparatus for synchronizing data in a host memory with data in target MCU memory | |
US5701488A (en) | Method and apparatus for restoring a target MCU debug session to a prior state | |
US6216237B1 (en) | Distributed indirect software instrumentation | |
US7761855B2 (en) | Computer program product and system for altering execution flow of a computer program | |
US7171653B2 (en) | Systems and methods for providing communication between a debugger and a hardware simulator | |
EP1014263A2 (en) | Method and system for modifying executable code to add additional functionality | |
US8527961B2 (en) | Expression-level debugging without format changes | |
US5689684A (en) | Method and apparatus for automatically reconfiguring a host debugger based on a target MCU identity | |
EP1489512A2 (en) | Debugging breakpoints on pluggable components | |
CN107577609B (zh) | 一种基于主机端动态链接的嵌入式系统动态模块调试系统 | |
US8533683B2 (en) | Stack walking enhancements using sensorpoints | |
US8196107B2 (en) | Simulating stepping through interpreted code | |
US20080127061A1 (en) | Method and system for editing code | |
US20050066312A1 (en) | Inter-job breakpoint apparatus and method | |
US7296187B1 (en) | Hardware debug device having script-based host interface | |
JP2004139458A (ja) | プログラム開発支援装置、プログラム実行装置、コンパイル方法およびデバッグ方法 | |
US11958511B2 (en) | Train signal system and linkage method therefor | |
CN114036047A (zh) | 一种基于串口的固件即时调试器的实现方法 | |
JPH11110256A (ja) | プログラムデバッグ装置、プログラムデバッグ方法及びその方法を記録したコンピュータ読取り可能な記録媒体 | |
CN113836046B (zh) | Mcu上虚拟机应用程序调试方法及系统 | |
CN117472790B (zh) | 一种嵌入式操作系统的远程调试实现方法 | |
KR100299623B1 (ko) | 클라이언트 프로그램과 서버 프로그램의 통합 디버깅 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |