CN117472790B - 一种嵌入式操作系统的远程调试实现方法 - Google Patents
一种嵌入式操作系统的远程调试实现方法 Download PDFInfo
- Publication number
- CN117472790B CN117472790B CN202311833038.2A CN202311833038A CN117472790B CN 117472790 B CN117472790 B CN 117472790B CN 202311833038 A CN202311833038 A CN 202311833038A CN 117472790 B CN117472790 B CN 117472790B
- Authority
- CN
- China
- Prior art keywords
- debugging
- breakpoint
- instruction
- command
- operating system
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 74
- 230000002159 abnormal effect Effects 0.000 claims abstract description 10
- 230000006870 function Effects 0.000 claims abstract description 10
- 238000012545 processing Methods 0.000 claims abstract description 10
- 238000003780 insertion Methods 0.000 claims abstract description 7
- 230000037431 insertion Effects 0.000 claims abstract description 7
- 238000011084 recovery Methods 0.000 claims 1
- 230000005856 abnormality Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000007547 defect Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3644—Debugging of software by instrumenting at runtime
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种嵌入式操作系统的远程调试实现方法,包括:1)远程上传调试程序及调试命令;2)进入调试模块;3)解析调试命令;4)初始化调试信号;5)注册信号处理函数以用于调试前后的进程终止和恢复工作;6)暂停需要调试的进程;7)执行客户端对应指令;7.1)当前指令为插入断点指令时,在所需位插入断点,判断程序是否处于断点异常状态,并实时向调试模块发送寄存器状态及内存信息;7.2)当前指令为单步调试指令时,获取下一条指令接口地址,并向调试模块发送寄存器状态及内存信息;8)结束调试模式,恢复被调试进程环境;实现远程调试功能,实时跟踪程序走向和程序参数变化,帮助开发者及用户分析问题。
Description
技术领域
本发明涉及操作系统远程调试的技术领域,具体涉及一种嵌入式操作系统的远程调试实现方法。
背景技术
现有的大多数嵌入式操作系统,并没有配备远程调试的功能,因此只能依据程序员自身经验,使用增量开发、回溯、日志记录等传统方法去定位和分析问题。
这就使得现有的嵌入式操作系统在使用时会存在以下缺陷与不足:
1)在程序开发过程中,开发者无法获得程序的实时走向和程序参数变化,分析问题困难重重;
2)用户在进行软件二次开发的时候,也会遇到和开发者同样的问题,用户体验差。
因此,亟需提供一种嵌入式操作系统的远程调试实现方法以解决上述现有技术中存在的缺陷与不足。
发明内容
为了解决现有技术中存在的缺陷与不足,本发明提供了一种嵌入式操作系统的远程调试实现方法。
本发明提供的具体方案为:
一种嵌入式操作系统的远程调试实现方法,其特征在于:包括以下步骤:
1)远程上传调试程序及调试命令;
2)进入调试模块;
3)解析调试命令;
4)初始化调试信号;
5)注册信号处理函数以用于调试前后的进程终止和恢复工作;
6)暂停需要调试的进程;
7)执行客户端对应指令:
7.1)当前指令为插入断点指令时,在所需位置插入断点,判断程序是否处于断点异常状态,并实时向调试模块发送寄存器状态及内存信息;
7.2)当前指令为单步调试指令时,获取下一条指令接口地址,并向调试模块发送寄存器状态及内存信息;
8)结束调试模式,恢复被调试进程环境。
作为本发明的进一步优选实施方式,所述步骤2)中,选用一键推送方式或手动启动方式进入调试模块。
一键推送方式进入调试模块时,先发送调试命令,然后运行调试程序后,进入调试模式;
手动启动方式进入调试模块时,先在服务端手动输入调试命令,然后客户端配置对应调试参数,进入调试模式;
所述调试命令选用网络调试或串口调试。
作为本发明的进一步优选实施方式,所述步骤2)中,根据获得的服务端正在运行的进程 ID,使用Attach方法到达该正在运行的进程进行调试。
作为本发明的进一步优选实施方式,所述步骤3)中,通过解析调试命令以获取与网络调试对应的IP和端口号或与串口调试对应的串口号,从而确定调试命令的种类。
作为本发明的进一步优选实施方式,所述步骤4)中,初始化的调试信号至少包括有进程终止信号。
作为本发明的进一步优选实施方式,所述步骤5)中,注册信号处理函数SIGKILL以用于调试前后的进程终止和恢复工作。
作为本发明的进一步优选实施方式,所述步骤6)中,
在插入断点后,调试进程全速运行至插入断点位置时,触发断点异常,调试进程暂停,进入断点异常处理,并向客户端发送当前寄存器状态及内存信息;
在单步调试时,运行一句指令就会暂停一次调试进程,然后暂停和运行交替进行;且每暂停一次,向客户端发送当前寄存器状态及内存信息。
作为本发明的进一步优选实施方式,所述步骤7.1)中,在需要设置断点的位置,设置断点指令,并将原指令保存在断点结构体中,在删除断点后恢复使用。
作为本发明的进一步优选实施方式,所述步骤7.2)中,执行跳转指令时,判断跳转条件是否成立,并根据判断结果确定下一条指令接口。
作为本发明的进一步优选实施方式,所述步骤7.2)中,
如果跳转条件成立,则下一条指令为目标地址值;
如果跳转条件不成立,则下一条指令为 PC + N,PC 是处理器中的一个通用寄存器,N为指令字节长度。
相较于现有技术,本发明能够实现的技术效果包括:
1)本发明提供一种嵌入式操作系统的远程调试实现方法,基于嵌入式操作系统,实现远程调试功能,实时跟踪程序走向和程序参数变化,帮助开发者及用户分析问题。
2)本发明提供一种嵌入式操作系统的远程调试实现方法,不仅支持程序调试,还支持动态库调试及进入进程调试等。
3)本发明提供一种嵌入式操作系统的远程调试实现方法,同时支持网络调试和串口调试,适应性更强,适用范围更广。
4)本发明提供一种嵌入式操作系统的远程调试实现方法,在多线程调试时,可能需要调试某特定线程,可以使进程在碰到断点时只停止断点线程,其它线程继续全速运行。
5)本发明提供一种嵌入式操作系统的远程调试实现方法,为开发者和用户提供一个有效方法,方便开发者开发程序及提升用户使用体验。
附图说明
如图1所示为本发明远程调试时的逻辑示意图。
如图2所示为本发明的步骤流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明的描述中,需要说明的是,术语“上”、“下”、“内”、“外”“前端”、“后端”、“两端”、“一端”、“另一端”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“设置有”、“连接”等,应做广义理解,例如“连接”,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
[第一实施例]
如图1-2所示,本实施例中的远程调试过程是将调试程序运行于一台电脑中,并与图1中的客户端连接,而被调试程序运行于另一台电脑中,并与图1中的服务端连接,在本实施例中,服务端选用SW831开发板,而客户端选用RealEvo-IDE。
本发明的第一实施例提供一种嵌入式操作系统的远程调试实现方法,其包括以下步骤:
1)远程上传调试程序及调试命令;以便于后期调试时进行按需调用;
2)进入调试模块;可以选用一键推送方式或手动启动方式进入调试模块;
选用一键推送方式进入调试模块时:先发送调试命令,然后运行调试程序后,进入调试模式;
而选用手动启动方式进入调试模块时,需要在服务端手动输入调试命令,然后通过客户端去配置相应调试参数,进入调试模式。相比一键推送方式,手动启动方式只是多了手动输入命令、客户端配置调试参数的过程,进入调试模式后所有的过程二者都是一样的。
本实施例中的调试命令可以选用网络调试或串口调试。
进一步地,选用一键推送方式或手动启动方式进入调试模块时,可以根据服务端正在运行的进程的ID,使用Attach方法进入该正在运行的进程进行调试。而非 Attach方法的调试方式则需要将调试的程序上传至服务端、输入对应调试命令、程序运行后,才能调试该程序。
3)解析调试命令,通过解析调试命令以获取IP 和端口号或串口号,从而确定调试命令的种类,这里解析出来的IP和端口号或者串口号,是作为客户端和服务端通信的物理媒介,因为客户端和服务端之间的具体通信是通过RSP 协议,且发送RSP 数据的形式进行的。
4)初始化调试信号;初始化的调试信号至少包括有进程终止信号SIGCHLD 等,因为在解析 RSP 数据包的时候会根据收到的信号(例如进程终止信号SIGCHLD 等),执行相应的操作,因此需要将其进行初始化。
5)注册信号处理函数以用于调试前后的进程终止和恢复工作;在本实施例中,通过注册SIGKILL信号处理函数以用于调试前后的进程终止和恢复工作。当需要退出调试或者出现异常需要停止调试时,系统会向调试线程发送一个 SIGKILL信号,当调试进程收到这个SIGKILL信号时,就知道需要进行退出工作。退出工作时,首先需要释放调试进程占用的相关资源,然后继续运行之前被调试进程打断的线程。
6)暂停需要调试的进程:具体包括:
在插入断点后,调试进程全速运行至插入断点位置时,触发断点异常,调试进程暂停,进入断点异常处理,并通过RSP数据包的形式向客户端发送当前寄存器状态及内存信息;
在单步调试时,运行一句指令就会暂停一次调试进程,然后暂停和运行交替进行;且每暂停一次,并通过RSP数据包的形式向客户端发送当前寄存器状态及内存信息。
该步骤完成后,调试环境已经搭建完毕,然后根据接收到的客户端指令去执行相应操作。指令包括有多种,这里只介绍比较常用的两种,一种是插入断点,一种是单步调试。
7)执行客户端对应指令:
7.1)当前指令为插入断点指令时,在所需位置插入断点,判断程序是否处于断点异常状态,并实时向调试模块发送寄存器状态及内存信息;
在需要设置断点的位置,设置断点指令,从而便于程序在设置断点的位置中断,以便于对当前位置进行查看和分析,方便操作且节约时间。设置断点指令时,将原指令保存在断点结构体中,以便于在调用结束后,删除断点后恢复使用。
在该步骤中,可以使用对应指令触发断点异常,并根据陷入指令异常后返回的参数判断当前寄存器是否处于断点异常状态。当系统出现异常时,硬件会向系统报告并给出异常类型,例如可以将异常类型以数字的形式表示,设置每个数字代表一种异常类型,断点异常也属于异常的一种,当向系统报告并给出与断点异常对应的数字,即可以获知当前系统处于断点异常状态。
7.2)当前指令为单步调试指令时,获取下一条指令接口地址,并向调试模块发送寄存器状态及内存信息;
在单步调试过程中, 如果需要执行跳转指令时,判断跳转条件是否成立,并根据判断结果确定下一条指令接口。
跳转指令带有对应的判断条件,当判断条件成立时,进行对应跳转,否则不跳转。例如,可以设置跳转条件为a=b时,发生跳转;
因此,如果满足判断条件a=b,则进行跳转;如果不满足判断条件a=b,则不进行跳转。
而确定判断条件中a是否等于b,会通过相应寄存器进行说明,例如可以设置为:
当从c寄存器读出的数据为0时,则表明a不等于b,不满足判断条件;
当从c寄存器读出的数据为1时,则表明a等于b,满足判断条件;
进一步地,
如果跳转条件成立,则下一条指令为目标地址值;
如果跳转条件不成立,则下一条指令为 PC + N ,PC 是处理器中的一个通用寄存器, N为指令字节长度(指令长度一般为 32 位4个字节),所以PC + N用来指向当前运行指令的下一条指令地址,对于一般4个字节长度的指令,下一条指令地址位即为 PC + 4;
根据实际需求,本领域技术人员也可以将其设置为其他具体地址值。
8)结束调试模式,通常是接收到相应信号才会结束,例如 SIGKILL 信号或者进程终止信号 SIGCHLD等,恢复被调试进程环境。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
Claims (5)
1.一种嵌入式操作系统的远程调试实现方法,其特征在于:包括以下步骤:
1)远程上传调试程序及调试命令;
2)进入调试模块;
3)解析调试命令;
4)初始化调试信号;
5)注册信号处理函数以用于调试前后的进程终止和恢复工作;
6)暂停需要调试的进程;
7)执行客户端对应指令:
7.1)当前指令为插入断点指令时,在所需位置插入断点,判断程序是否处于断点异常状态,并实时向调试模块发送寄存器状态及内存信息;
7.2)当前指令为单步调试指令时,获取下一条指令接口地址,并向调试模块发送寄存器状态及内存信息;
8)结束调试模式,恢复被调试进程环境;
所述步骤4)中,初始化的调试信号至少包括有进程终止信号SIGCHLD;
所述步骤5)中,注册信号处理函数SIGKILL以用于调试前后的进程终止和恢复工作;
所述步骤6)中,
在插入断点后,调试进程全速运行至插入断点位置时,触发断点异常,调试进程暂停,进入断点异常处理,并向客户端发送当前寄存器状态及内存信息;
在单步调试时,运行一句指令就会暂停一次调试进程,然后暂停和运行交替进行;且每暂停一次,向客户端发送当前寄存器状态及内存信息;
所述步骤7.2)中,执行跳转指令时,判断跳转条件是否成立,并根据判断结果确定下一条指令接口;
如果跳转条件成立,则下一条指令为目标地址值;
如果跳转条件不成立,则下一条指令为 PC + N,PC 是处理器中的一个通用寄存器;N为指令字节长度。
2.根据权利要求1所述的一种嵌入式操作系统的远程调试实现方法,其特征在于:所述步骤2)中,选用一键推送方式或手动启动方式进入调试模块;
一键推送方式进入调试模块时,先发送调试命令,然后运行调试程序后,进入调试模式;
手动启动方式进入调试模块时,先在服务端手动输入调试命令,然后客户端配置对应调试参数,进入调试模式;
所述调试命令选用网络调试或串口调试。
3.根据权利要求2所述的一种嵌入式操作系统的远程调试实现方法,其特征在于:所述步骤2)中,根据获得的服务端正在运行的进程 ID,使用Attach方法到达该正在运行的进程进行调试。
4.根据权利要求2所述的一种嵌入式操作系统的远程调试实现方法,其特征在于:所述步骤3)中,通过解析调试命令以获取与网络调试对应的IP和端口号或与串口调试对应的串口号,从而确定调试命令的种类。
5.根据权利要求1所述的一种嵌入式操作系统的远程调试实现方法,其特征在于:所述步骤7.1)中,在需要设置断点的位置,设置断点指令,并将原指令保存在断点结构体中,在删除断点后恢复使用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311833038.2A CN117472790B (zh) | 2023-12-28 | 2023-12-28 | 一种嵌入式操作系统的远程调试实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311833038.2A CN117472790B (zh) | 2023-12-28 | 2023-12-28 | 一种嵌入式操作系统的远程调试实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117472790A CN117472790A (zh) | 2024-01-30 |
CN117472790B true CN117472790B (zh) | 2024-03-15 |
Family
ID=89627897
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311833038.2A Active CN117472790B (zh) | 2023-12-28 | 2023-12-28 | 一种嵌入式操作系统的远程调试实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117472790B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118170655A (zh) * | 2024-03-18 | 2024-06-11 | 成都摩芯半导体有限公司 | 一种基于多种连接方式的嵌入式设备远程调试方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101354676A (zh) * | 2008-09-10 | 2009-01-28 | 浪潮齐鲁软件产业有限公司 | 一种嵌入式程序调试方法 |
CN103593292A (zh) * | 2013-11-19 | 2014-02-19 | 北京深思数盾科技有限公司 | 调试程序的系统及方法 |
CN103729288A (zh) * | 2013-11-01 | 2014-04-16 | 华中科技大学 | 一种嵌入式多核环境下应用程序的调试方法 |
CN109246120A (zh) * | 2018-09-29 | 2019-01-18 | 中国船舶重工集团公司第七〇九研究所 | 一种嵌入式设备的远程调试方法及其系统 |
CN112131125A (zh) * | 2020-09-28 | 2020-12-25 | 珠海市一微半导体有限公司 | 一种动态远程调试嵌入式设备的方法及操作系统 |
CN113111001A (zh) * | 2021-04-29 | 2021-07-13 | 苏州大学 | 一种嵌入式终端远程软件调试方法 |
CN115757183A (zh) * | 2022-12-06 | 2023-03-07 | 北京计算机技术及应用研究所 | 天熠嵌入式操作系统下一种基于代理的任务级调试方法 |
-
2023
- 2023-12-28 CN CN202311833038.2A patent/CN117472790B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101354676A (zh) * | 2008-09-10 | 2009-01-28 | 浪潮齐鲁软件产业有限公司 | 一种嵌入式程序调试方法 |
CN103729288A (zh) * | 2013-11-01 | 2014-04-16 | 华中科技大学 | 一种嵌入式多核环境下应用程序的调试方法 |
CN103593292A (zh) * | 2013-11-19 | 2014-02-19 | 北京深思数盾科技有限公司 | 调试程序的系统及方法 |
CN109246120A (zh) * | 2018-09-29 | 2019-01-18 | 中国船舶重工集团公司第七〇九研究所 | 一种嵌入式设备的远程调试方法及其系统 |
CN112131125A (zh) * | 2020-09-28 | 2020-12-25 | 珠海市一微半导体有限公司 | 一种动态远程调试嵌入式设备的方法及操作系统 |
CN113111001A (zh) * | 2021-04-29 | 2021-07-13 | 苏州大学 | 一种嵌入式终端远程软件调试方法 |
WO2022227410A1 (zh) * | 2021-04-29 | 2022-11-03 | 苏州大学 | 一种嵌入式终端远程软件调试方法 |
CN115757183A (zh) * | 2022-12-06 | 2023-03-07 | 北京计算机技术及应用研究所 | 天熠嵌入式操作系统下一种基于代理的任务级调试方法 |
Also Published As
Publication number | Publication date |
---|---|
CN117472790A (zh) | 2024-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3660684B1 (en) | Efficient and comprehensive source code fuzzing | |
CN104281520B (zh) | 跟踪和调试的方法、装置及系统 | |
CN117472790B (zh) | 一种嵌入式操作系统的远程调试实现方法 | |
EP2017983A1 (en) | A debugging method and apparatus for performing telecom class service development based on model driven | |
US20110191752A1 (en) | Method and System for Debugging of Software on Target Devices | |
CN115757183A (zh) | 天熠嵌入式操作系统下一种基于代理的任务级调试方法 | |
CN110688313B (zh) | 一种VxWorks操作系统下软件测试的故障注入方法 | |
CN110704314B (zh) | 一种嵌入式软件测试的故障注入方法 | |
WO2007061241A1 (en) | Error test method for mobile communication terminals | |
US8196107B2 (en) | Simulating stepping through interpreted code | |
Santiago et al. | An environment for automated test case generation from statechart-based and finite state machine-based behavioral models | |
CN112860362B (zh) | 一种机器人自动化流程的可视化调试方法及调试系统 | |
US7200839B2 (en) | Debugging transactions across multiple processors | |
CN111880683A (zh) | vxworks系统下基于windml虚拟设备的触摸屏串口驱动设计方法 | |
US8458669B2 (en) | Automated test system | |
CN113254164B (zh) | 卫星测控过程执行任务状态的监控方法及系统、测控系统 | |
CN116775442A (zh) | 一种软件调试系统 | |
US7296187B1 (en) | Hardware debug device having script-based host interface | |
CN117909160A (zh) | 基于物联网的固件崩溃分析方法及装置 | |
KR100794130B1 (ko) | 이동통신단말기의 응용 프로그램 및 부가 서비스 자동기능시험장치 | |
CN114510429B (zh) | 一种基于动态符号执行的调试方法、系统和介质 | |
CN113704032A (zh) | 一种嵌入式异构多核处理器架构并行调试系统及方法 | |
CN117376229B (zh) | 基于嵌入式设备的ftp文件系统软件交叉调试方法及系统 | |
Shea et al. | Scoped identifiers for efficient bit aligned logging | |
KR20040055629A (ko) | 트레이스 스트림에서 전송되는 패킷 그룹의 op 코드확장을 위한 장치 및 방법 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |