首页> 中国专利> MCU上虚拟机应用程序调试方法及系统

MCU上虚拟机应用程序调试方法及系统

摘要

本发明公开了一种MCU上虚拟机应用程序调试方法及系统,所述方法通过接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE,能够根据不同的调试控制指令进行不同的应用程序调试,保证了应用程序调试的全面性和完整性,不需要依赖硬件调试器设备,调试实施简单方便,可以避免虚拟机应用程序调试运行的环境不是其最终运行的设备,两者环境存在差异,导致无法完全模拟和重现程序的问题,提升了应用程序调试的速度和效率,不需要大量修改输出log语句,节省了应用程序调试时间和算力消耗。

著录项

  • 公开/公告号CN113836046A

    专利类型发明专利

  • 公开/公告日2021-12-24

    原文格式PDF

  • 申请/专利权人 武汉天喻信息产业股份有限公司;

    申请/专利号CN202111432208.7

  • 申请日2021-11-29

  • 分类号G06F11/36(20060101);G06F9/455(20060101);

  • 代理机构42225 武汉智权专利代理事务所(特殊普通合伙);

  • 代理人张凯

  • 地址 430223 湖北省武汉市东湖开发区华中科技大学科技园天喻大厦

  • 入库时间 2023-06-19 13:49:36

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-02-15

    授权

    发明专利权授予

说明书

技术领域

本发明涉及软件工程技术领域,尤其涉及一种MCU上虚拟机应用程序调试方法及系统。

背景技术

在微控制器(Microcontroller Unit,MCU)软件开发中,为了简化程序开发、保证程序之间的隔离和信息安全,经常采用虚拟机技术,比如MCU上运行Python虚拟机,应用开发人员采用Python语言编写应用程序,然后编译成Python字节码下载到MCU上,由MCU上的Python虚拟机解释运行字节码;MCU上的虚拟机一般是用C语言开发;调试虚拟机上运行的应用程序,目前常用的方法有:

1、在应用程序中添加打印log的语句,输出感兴趣的信息进行观察;这种方法存在如下缺点:调试过程中,要反复修改输出log的语句,重新编译下载运行再观察log,效率低下;为了观察程序运行到不同地方时的不同状态,需要反复输出大量log,分析log费时费力;增加输出log语句可能改变原有程序的逻辑,影响问题分析;不能在汇编层面调试代码。

2、使用JLINK、STLINK等调试器和配套调试软件做调试;这种是调试C语言程序的,调试的是虚拟机本身,不能直接针对虚拟机上的应用程序进行调试,只能通过虚拟机层面调试观察应用程序的字节码解释过程,要求开发人员对字节码十分熟悉,还需要查找字节码对应的应用程序源码,调试效率低。

3、将MCU上的虚拟机和运行环境移植到PC机上,利用PC机上成熟的调试软件做调试;这种方法存在如下缺点:只有少部分广泛使用的虚拟机编程语言才有成熟可用的调试器,对于私有实现的虚拟机则没有成熟可用的调试器;虚拟机应用程序调试运行的环境不是其最终运行的设备,两者环境存在差异,有时候无法完全模拟和重现程序的问题。

发明内容

本发明的主要目的在于提供一种MCU上虚拟机应用程序调试方法及系统,旨在解决现有技术中MCU上虚拟机的应用程序通过添加log语句,调试需要反复修改输出log的语句,费时费力,效率低下,通过调试器调试,需要开发人员分析应用程序的字节码,调试效率低,在PC无法完完全模拟和重新程序的技术问题。

第一方面,本发明提供一种MCU上虚拟机应用程序调试方法,所述MCU上虚拟机应用程序调试方法包括以下步骤:

接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;

在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE。

可选地,所述接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程之后,所述MCU上虚拟机应用程序调试方法还包括:

接收IDE发送的应用程序字节码,所述应用程序字节码为IDE对应用程序编译链接得到;

启动虚拟机线程解释所述应用程序字节码。

可选地,所述接收IDE发送的应用程序字节码,所述应用程序字节码为IDE对应用程序编译链接得到之后,所述MCU上虚拟机应用程序调试方法还包括:

生成应用程序的程序变量名与地址的第一对应关系及源程序与所述字节码的第二对应关系;

根据所述第一对应关系,将调试时的程序变量名转换为地址;

根据所述第二对应关系,计算单步调试时一条应用程序源码语句需要执行的字节码数量。

可选地,所述接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程,包括:

接收IDE发送的调试控制指令;

虚拟机线程在阻塞状态下等待调试控制指令。

可选地,所述在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE,包括:

在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录;

启动虚拟机线程,当所述虚拟机线程检测到应用程序字节码运行至断点地址后,重新使所述虚拟机线程进入阻塞状态,并反馈调试结果至IDE。

可选地,所述启动虚拟机线程,当所述虚拟机线程检测到应用程序字节码运行至断点地址后,重新使所述虚拟机线程进入阻塞状态,并反馈调试结果至IDE之后,所述MCU上虚拟机应用程序调试方法还包括:

接收所述调试服务组件发送的单步运行指令,并解析所述单步运行指令中需要运行的字节码个数;

启动虚拟机线程,运行与所述字节码个数数量相等的字节码后,重新使虚拟机线程进入阻塞状态,并反馈调试内容给IDE。

可选地,所述接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程之前,所述MCU上虚拟机应用程序调试方法还包括:

对调试控制指令发起者进行身份验证,验证通过后开启调试功能。

第二方面,为实现上述目的,本发明还提出一种MCU上虚拟机应用程序调试系统,所述MCU上虚拟机应用程序调试系统包括:

调试服务组件、虚拟机线程及集成开发环境IDE;其中,

所述调试服务组件,用于接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;

所述虚拟机线程,用于在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE。

可选地,

IDE,用于生成应用程序的程序变量名与地址的第一对应关系及源程序与所述字节码的第二对应关系;根据所述第一对应关系,将调试时的程序变量名转换为地址;根据所述第二对应关系,计算单步调试时一条应用程序源码语句需要执行的字节码数量;

所述调试服务组件,还用于接收IDE发送的调试控制指令;

所述虚拟机线程,还用于虚拟机线程在阻塞状态下等待调试控制指令。

可选地,所述虚拟机线程,还用于在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录;

所述虚拟机线程,还用于在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录,当所述虚拟机线程检测到应用程序字节码运行至断点地址后,重新使所述虚拟机线程进入阻塞状态,并反馈调试结果至IDE;

所述虚拟机线程,还用于接收所述调试服务组件发送的单步运行指令,并解析所述单步运行指令中需要运行的字节码个数,运行与所述字节码个数数量相等的字节码后,重新使虚拟机线程进入阻塞状态,并反馈调试内容给IDE;

所述调试服务组件,还用于对调试控制指令发起者进行身份验证,验证通过后开启调试功能。

本发明提出的MCU上虚拟机应用程序调试方法,通过接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE,能够根据不同的调试控制指令进行不同的应用程序调试,保证了应用程序调试的全面性和完整性,不需要依赖硬件调试器设备,调试实施简单方便,可以避免虚拟机应用程序调试运行的环境不是其最终运行的设备,两者环境存在差异,导致无法完全模拟和重现程序的问题,提升了应用程序调试的速度和效率,不需要大量修改输出log语句,节省了应用程序调试时间和算力消耗。

附图说明

图1为本发明MCU上虚拟机应用程序调试方法第一实施例的流程示意图;

图2为本发明MCU上虚拟机应用程序调试方法第二实施例的流程示意图;

图3为本发明MCU上虚拟机应用程序调试方法第三实施例的流程示意图;

图4为本发明MCU上虚拟机应用程序调试方法第四实施例的流程示意图;

图5为本发明MCU上虚拟机应用程序调试方法第五实施例的流程示意图;

图6为本发明MCU上虚拟机应用程序调试方法第六实施例的流程示意图;

图7为本发明MCU上虚拟机应用程序调试方法第七实施例的流程示意图;

图8为本发明MCU上虚拟机应用程序调试系统第一实施例的功能模块图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例的解决方案主要是:通过接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE,能够根据不同的调试控制指令进行不同的应用程序调试,保证了应用程序调试的全面性和完整性,不需要依赖硬件调试器设备,调试实施简单方便,可以避免虚拟机应用程序调试运行的环境不是其最终运行的设备,两者环境存在差异,导致无法完全模拟和重现程序的问题,提升了应用程序调试的速度和效率,不需要大量修改输出log语句,节省了应用程序调试时间和算力消耗,解决了现有技术中MCU上虚拟机的应用程序通过添加log语句,调试需要反复修改输出log的语句,费时费力,效率低下,通过调试器调试,需要开发人员分析应用程序的字节码,调试效率低,在PC无法完完全模拟和重新程序的技术问题。

参照图1,图1为本发明MCU上虚拟机应用程序调试方法第一实施例的流程示意图。

在第一实施例中,所述MCU上虚拟机应用程序调试方法包括以下步骤:

步骤S10、接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程。

需要说明的是,调试服务组件运行于MCU上,可以设计为一个线程或者多个线程,接收集成开发环境(Integrated Development Environment,IDE)发来的调试控制指令后,可以以调试状态启动虚拟机线程。

步骤S20、在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE。

可以理解的是,虚拟机线程用来解释执行应用程序,在解释执行应用程序的过程中,虚拟机线程会判断当前是否处于调试运行状态,在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE,从而通过IDE显示以供开发人员观察。

应当理解的是,对应用程序进行调试,可以根据当前调试状态返回相应的调试信息至调试服务组件,所述调试服务组件可以将这些信息更新,将更新后的数据即调试更新数据发送至IDE,从而通过IDE显示以供开发人员观察。

在具体实现中,所述调试控制指令可以是断点、单步运行指令,也可以是变量观察相关调试指令,还可以是存储器观察调试指令,也可以是其他调试指令,例如调用堆栈观察相关调试指令,本实施例对此不加以限制。

在具体实现中,IDE和调试服务组件之间可以根据实际情况灵活选择连接方式,比如串口、串行外设接口(Serial Peripheral Interface,SPI)、蓝牙及Internet等,本实施例对此不加以限制。

可以理解的是,虚拟机线程可以正常启动运行、调试启动运行,正常启动运行时,不接收调试服务组件的调试控制指令,正常全速解释应用程序;调试启动运行时,可以接收调试服务组件的调试控制指令,并且在解释应用程序过程中检测断点,遇到断点则给调试服务组件发送断点捕获通知、变量值等信息,虚拟机使用操作系统的线程阻塞功能实现虚拟机解释字节码时的单步和暂停功能。

本实施例通过上述方案,通过接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE,能够根据不同的调试控制指令进行不同的应用程序调试,保证了应用程序调试的全面性和完整性,不需要依赖硬件调试器设备,调试实施简单方便,可以避免虚拟机应用程序调试运行的环境不是其最终运行的设备,两者环境存在差异,导致无法完全模拟和重现程序的问题,提升了应用程序调试的速度和效率,不需要大量修改输出log语句,节省了应用程序调试时间和算力消耗。

进一步地,图2为本发明MCU上虚拟机应用程序调试方法第二实施例的流程示意图,如图2所示,基于第一实施例提出本发明MCU上虚拟机应用程序调试方法第二实施例,在本实施例中,所述步骤S10之后,所述MCU上虚拟机应用程序调试方法还包括以下步骤:

步骤S01、接收IDE发送的应用程序字节码,所述应用程序字节码为IDE对应用程序编译链接得到。

需要说明的是,应用开发人员通过PC机上的IDE完成应用程序的编辑和编译链接,生成对应的应用程序的字节码。

步骤S02、启动虚拟机线程解释所述应用程序字节码。

可以理解的是,虚拟机线程在启动后,可以用于解释所述应用程序字节码。

本实施例通过上述方案,通过接收IDE发送的应用程序字节码,所述应用程序字节码为IDE对应用程序编译链接得到;启动虚拟机线程解释所述应用程序字节码;能够为后续应用程序的执行提供基础,提高了应用程序调试的效率。

进一步地,图3为本发明MCU上虚拟机应用程序调试方法第三实施例的流程示意图,如图3所示,基于第二实施例提出本发明MCU上虚拟机应用程序调试方法第三实施例,在本实施例中,所述步骤S01之后,所述MCU上虚拟机应用程序调试方法还包括以下步骤:

步骤S011、生成应用程序的程序变量名与地址的第一对应关系及源程序与所述字节码的第二对应关系。

需要说明的是,应用开发人员通过PC机上的IDE完成应用程序的编辑和编译链接,生成对应的应用程序的字节码的同时,可以生成应用程序的程序变量名和地址的第一对应关系,以及应用程序的源程序和所述字节码的第二对应关系。

步骤S012、根据所述第一对应关系,将调试时的程序变量名转换为地址。

可以理解的是,通过所述第一对应关系可以将调试时的程序变量名转换为地址,即为将需要观察的变量名转换为地址。

步骤S013、根据所述第二对应关系,计算单步调试时一条应用程序源码语句需要执行的字节码数量。

应当理解的是,通过所述第二对应关系可以计算单步调试时一条应用程序源码语句需要执行的字节码数量。

在具体实现中,IDE包括编译、链接和调试的功能,在编译链接完成后,会生成应用程序的变量地址、应用程序源码和生成的字节码之间的对应关系,利用这些信息,发送调试控制指令给调试服务组件时,将需要观察的变量名转换为地址,计算一条应用程序源码语句需要执行的字节码数量,所述第一对应关系和所述第二对应关系保存在集成开发环境里使用。

进一步地,图4为本发明MCU上虚拟机应用程序调试方法第四实施例的流程示意图,如图4所示,基于第一实施例提出本发明MCU上虚拟机应用程序调试方法第四实施例,在本实施例中,所述步骤S10具体包括以下步骤:

步骤S11、接收IDE发送的调试控制指令。

在具体实现中,应用开发人员点击IDE上的开始调试按钮,IDE给MCU上的调试服务组件发出调试状态启动应用程序的命令,调试服务组件用调试状态启动虚拟机线程,虚拟机线程启动后,发现要求其用调试状态运行,就阻塞等待调试服务组件的后续命令,虚拟机线程根据当前状态和调试指令决定自己是不是进入阻塞状态。

步骤S12、虚拟机线程在阻塞状态下等待调试控制指令。

可以理解的是,虚拟机线程在阻塞状态下会等待后续的调试控制指令。

虚拟机线程在阻塞状态下等待调试控制指令

进一步地,图5为本发明MCU上虚拟机应用程序调试方法第五实施例的流程示意图,如图5所示,基于第一实施例提出本发明MCU上虚拟机应用程序调试方法第五实施例,在本实施例中,所述步骤S20具体包括以下步骤:

步骤S21、在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录。

需要说明的是,在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,可以分析所述设置断点指令汇总设置的断点地址,进而虚拟机线程记录该断点地址。

在具体实现中,开发人员在集成开发环境针对某个程序语句设置断点,集成开发环境查找该语句对应的字节码地址,然后给调试服务组件发指令,要求在该地址处设置一个断点,虚拟机线程解释字节码时,检查当前解释的字节码的地址是否有设置断点,如果有,就给调试服务组件返回当前要观察的变量和存储器内容,然后进入阻塞状态,暂停解释应用程序的字节码,等待后续调试指令。

步骤S22、启动虚拟机线程,当所述虚拟机线程检测到应用程序字节码运行至断点地址后,重新使所述虚拟机线程进入阻塞状态,并反馈调试结果至IDE。

可以理解的是,启动虚拟机线程后,所述虚拟机线程检测到应用程序字节码运行至断点地址后,会进入阻塞状态,并且可以反馈调试结果至IDE。

在具体实现中,调试服务组件给虚拟机线程发出运行命令,虚拟机线程退出阻塞状态,开始循环解释应用程序字节码,每运行完一个字节码,就检查是否运行到了断点所在地址;检测到已经运行到断点所在地址,将当前变量值、存储器值、寄存器值等发给调试服务组件,然后阻塞等待调试服务器的后续命令,此时应用程序暂停在断点处;调试服务组件将断点捕获通知、当前调试信息等发给IDE,IDE对开发人员进行展示应用程序的变量值、存储器内容、寄存器内容等信息。

本实施例通过上述方案,通过在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录;启动虚拟机线程,当所述虚拟机线程检测到应用程序字节码运行至断点地址后,重新使所述虚拟机线程进入阻塞状态,并反馈调试结果至IDE;能够根据不同的调试控制指令进行不同的应用程序调试,保证了应用程序调试的全面性和完整性,不需要依赖硬件调试器设备,调试实施简单方便。

进一步地,图6为本发明MCU上虚拟机应用程序调试方法第六实施例的流程示意图,如图6所示,基于第五实施例提出本发明MCU上虚拟机应用程序调试方法第六实施例,在本实施例中,所述步骤S22之后,所述MCU上虚拟机应用程序调试方法还包括以下步骤:

步骤S23、接收所述调试服务组件发送的单步运行指令,并解析所述单步运行指令中需要运行的字节码个数。

需要说明的是,在接收IDE发送的单步运行指令后,可以解析获得所述单步运行指令中需要运行的字节码个数,即IDE计算单步运行的指令对应的字节码个数。

步骤S24、启动虚拟机线程,运行与所述字节码个数数量相等的字节码后,重新使虚拟机线程进入阻塞状态,并反馈调试内容给IDE。

可以理解的是,启动虚拟机线程后,可以运行所述字节码个数数量相等的字节码后,虚拟机线程重新阻塞,并且可以反馈相应调试内容给IDE。

在具体实现中,集成开发环境计算单步运行的源程序对应N个字节码指令,然后给调试服务组件发指令,要求运行N个字节码,然后调试服务组件给虚拟机发运行N个字节码的指令,虚拟机运行N个字节码,然后将变量、存储器、寄存器内容返回给调试服务组件,虚拟机线程重新进入阻塞,等待调试服务器的后续命令,调试服务组件再返回给集成开发环境显示给开发人员观察,即调试服务组件给IDE发送新的变量值、存储器内容、寄存器内容等信息,IDE上展示程序继续运行了一步,并且变量值、存储器内容、寄存器内容进行了更新。

本实施例通过上述方案,通过接收所述调试服务组件发送的单步运行指令,并解析所述单步运行指令中需要运行的字节码个数;启动虚拟机线程,运行与所述字节码个数数量相等的字节码后,重新使虚拟机线程进入阻塞状态,并反馈调试内容给IDE,能够根据不同的调试控制指令进行不同的应用程序调试,保证了应用程序调试的全面性和完整性,不需要依赖硬件调试器设备,调试实施简单方便,可以避免虚拟机应用程序调试运行的环境不是其最终运行的设备,两者环境存在差异,导致无法完全模拟和重现程序的问题,提升了应用程序调试的速度和效率,不需要大量修改输出log语句,节省了应用程序调试时间和算力消耗。

进一步地,图7为本发明MCU上虚拟机应用程序调试方法第七实施例的流程示意图,如图7所示,基于第一实施例提出本发明MCU上虚拟机应用程序调试方法第七实施例,在本实施例中,所述步骤S10之前,所述MCU上虚拟机应用程序调试方法还包括以下步骤:

步骤S01、对调试控制指令发起者进行身份验证,验证通过后开启调试功能。

需要说明的是,对调试控制指令发起者进行身份验证后,可以根据验证结果确定是否进行后续调试操作,即验证通过开启调试功能,验证未通过不开启调试功能。

在具体实现中,调试服务组件和虚拟机线程同时运行于MCU上,它们之间使用线程间通信完成信息交换,为了保证信息安全,阻止非法对应用程序进行调试,调试服务组件可以永久关闭调试功能,也可以启用调试认证功能,需要先对调试者做完合法身份认证后才能开始调试。

本实施例通过上述方案,通过对调试控制指令发起者进行身份验证,验证通过后开启调试功能,可以保证线程间通信的信息安全,避免了非法对应用程序进行调试的情况发生。

相应地,本发明进一步提供一种MCU上虚拟机应用程序调试系统。

参照图8,图8为本发明MCU上虚拟机应用程序调试系统第一实施例的功能模块图。

本发明MCU上虚拟机应用程序调试系统第一实施例中,该MCU上虚拟机应用程序调试系统包括:

调试服务组件10、虚拟机线程20及集成开发环境IDE30;其中,

所述调试服务组件,用于接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程。

需要说明的是,调试服务组件运行于MCU上,可以设计为一个线程或者多个线程,接收集成开发环境(Integrated Development Environment,IDE)发来的调试控制指令后,可以以调试状态启动虚拟机线程。

所述虚拟机线程,用于在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE。

可以理解的是,虚拟机线程用来解释执行应用程序,在解释执行应用程序的过程中,虚拟机线程会判断当前是否处于调试运行状态,在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE,从而通过IDE显示以供开发人员观察。

应当理解的是,对应用程序进行调试,可以根据当前调试状态返回相应的调试信息至调试服务组件,所述调试服务组件可以将这些信息更新,将更新后的数据即调试更新数据发送至IDE,从而通过IDE显示以供开发人员观察。

在具体实现中,所述调试控制指令可以是断点、单步运行指令,也可以是变量观察相关调试指令,还可以是存储器观察调试指令,也可以是其他调试指令,例如调用堆栈观察相关调试指令,本实施例对此不加以限制。

在具体实现中,IDE和调试服务组件之间可以根据实际情况灵活选择连接方式,比如串口、串行外设接口(Serial Peripheral Interface,SPI)、蓝牙及Internet等,本实施例对此不加以限制。

可以理解的是,虚拟机线程可以正常启动运行、调试启动运行,正常启动运行时,不接收调试服务组件的调试控制指令,正常全速解释应用程序;调试启动运行时,可以接收调试服务组件的调试控制指令,并且在解释应用程序过程中检测断点,遇到断点则给调试服务组件发送断点捕获通知、变量值等信息,虚拟机使用操作系统的线程阻塞功能实现虚拟机解释字节码时的单步和暂停功能。

进一步的,IDE,用于生成应用程序的程序变量名与地址的第一对应关系及源程序与所述字节码的第二对应关系;根据所述第一对应关系,将调试时的程序变量名转换为地址;根据所述第二对应关系,计算单步调试时一条应用程序源码语句需要执行的字节码数量。

需要说明的是,应用开发人员通过PC机上的IDE完成应用程序的编辑和编译链接,生成对应的应用程序的字节码的同时,可以生成应用程序的程序变量名和地址的第一对应关系,以及应用程序的源程序和所述字节码的第二对应关系。

可以理解的是,通过所述第一对应关系可以将调试时的程序变量名转换为地址,即为将需要观察的变量名转换为地址。

应当理解的是,通过所述第二对应关系可以计算单步调试时一条应用程序源码语句需要执行的字节码数量。

在具体实现中,IDE包括编译、链接和调试的功能,在编译链接完成后,会生成应用程序的变量地址、应用程序源码和生成的字节码之间的对应关系,利用这些信息,发送调试控制指令给调试服务组件时,将需要观察的变量名转换为地址,计算一条应用程序源码语句需要执行的字节码数量,所述第一对应关系和所述第二对应关系保存在集成开发环境里使用。

所述调试服务组件,还用于接收IDE发送的调试控制指令。

需要说明的是,接收IDE的调试控制指令后,所述虚拟机线程,还用于虚拟机线程在阻塞状态下等待调试控制指令。

在具体实现中,应用开发人员点击IDE上的开始调试按钮,IDE给MCU上的调试服务组件发出调试状态启动应用程序的命令,调试服务组件用调试状态启动虚拟机线程,虚拟机线程启动后,发现要求其用调试状态运行,就阻塞等待调试服务组件的后续命令。

可以理解的是,虚拟机线程在阻塞状态下会等待后续的调试控制指令。

进一步的,所述虚拟机线程,还用于在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录。

需要说明的是,在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,可以分析所述设置断点指令汇总设置的断点地址,进而虚拟机线程记录该断点地址。

在具体实现中,开发人员在集成开发环境针对某个程序语句设置断点,集成开发环境查找该语句对应的字节码地址,然后给调试服务组件发指令,要求在该地址处设置一个断点,虚拟机线程解释字节码时,检查当前解释的字节码的地址是否有设置断点,如果有,就给调试服务组件返回当前要观察的变量和存储器内容,然后进入阻塞状态,暂停解释应用程序的字节码,等待后续调试指令。

所述虚拟机线程,还用于在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录,当所述虚拟机线程检测到应用程序字节码运行至断点地址后,重新使所述虚拟机线程进入阻塞状态,并反馈调试结果至IDE。

可以理解的是,启动虚拟机线程后,所述虚拟机线程检测到应用程序字节码运行至断点地址后,会进入阻塞状态,并且可以反馈调试结果至IDE。

在具体实现中,调试服务组件给虚拟机线程发出运行命令,虚拟机线程退出阻塞状态,开始循环解释应用程序字节码,每运行完一个字节码,就检查是否运行到了断点所在地址;检测到已经运行到断点所在地址,将当前变量值、存储器值、寄存器值等发给调试服务组件,然后阻塞等待调试服务器的后续命令,此时应用程序暂停在断点处;调试服务组件将断点捕获通知、当前调试信息等发给IDE,IDE对开发人员进行展示应用程序的变量值、存储器内容、寄存器内容等信息。

所述虚拟机线程,还用于接收所述调试服务组件发送的单步运行指令,并解析所述单步运行指令中需要运行的字节码个数,运行与所述字节码个数数量相等的字节码后,重新使虚拟机线程进入阻塞状态,并反馈调试内容给IDE。

需要说明的是,在接收IDE发送的单步运行指令后,可以解析获得所述单步运行指令中需要运行的字节码个数,即IDE计算单步运行的指令对应的字节码个数。

可以理解的是,启动虚拟机线程后,可以运行所述字节码个数数量相等的字节码后,虚拟机线程重新阻塞,并且可以反馈相应调试内容给IDE。

在具体实现中,集成开发环境计算单步运行的源程序对应N个字节码指令,然后给调试服务组件发指令,要求运行N个字节码,然后调试服务组件给虚拟机发运行N个字节码的指令,虚拟机运行N个字节码,然后将变量、存储器、寄存器内容返回给调试服务组件,虚拟机线程重新进入阻塞,等待调试服务器的后续命令,调试服务组件再返回给集成开发环境显示给开发人员观察,即调试服务组件给IDE发送新的变量值、存储器内容、寄存器内容等信息,IDE上展示程序继续运行了一步,并且变量值、存储器内容、寄存器内容进行了更新。

所述调试服务组件,还用于对调试控制指令发起者进行身份验证,验证通过后开启调试功能。

需要说明的是,对调试控制指令发起者进行身份验证后,可以根据验证结果确定是否进行后续调试操作,即验证通过开启调试功能,验证未通过不开启调试功能。

在具体实现中,调试服务组件和虚拟机线程同时运行于MCU上,它们之间使用线程间通信完成信息交换,为了保证信息安全,阻止非法对应用程序进行调试,调试服务组件可以永久关闭调试功能,也可以启用调试认证功能,需要先对调试者做完合法身份认证后才能开始调试。

本实施例通过上述方案,通过接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE,能够根据不同的调试控制指令进行不同的应用程序调试,保证了应用程序调试的全面性和完整性,不需要依赖硬件调试器设备,调试实施简单方便,可以避免虚拟机应用程序调试运行的环境不是其最终运行的设备,两者环境存在差异,导致无法完全模拟和重现程序的问题,提升了应用程序调试的速度和效率,不需要大量修改输出log语句,节省了应用程序调试时间和算力消耗。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号