CN113836046B - Mcu上虚拟机应用程序调试方法及系统 - Google Patents
Mcu上虚拟机应用程序调试方法及系统 Download PDFInfo
- Publication number
- CN113836046B CN113836046B CN202111432208.7A CN202111432208A CN113836046B CN 113836046 B CN113836046 B CN 113836046B CN 202111432208 A CN202111432208 A CN 202111432208A CN 113836046 B CN113836046 B CN 113836046B
- Authority
- CN
- China
- Prior art keywords
- debugging
- virtual machine
- application program
- ide
- machine thread
- 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 65
- 238000011161 development Methods 0.000 claims abstract description 18
- 230000000903 blocking effect Effects 0.000 claims description 29
- 238000012795 verification Methods 0.000 claims description 14
- 239000003999 initiator Substances 0.000 claims description 9
- 238000004364 calculation method Methods 0.000 abstract description 5
- 230000006870 function Effects 0.000 description 19
- 230000018109 developmental process Effects 0.000 description 18
- 230000015654 memory Effects 0.000 description 14
- 230000008569 process Effects 0.000 description 10
- 238000004458 analytical method Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000008672 reprogramming Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45591—Monitoring or debugging support
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种MCU上虚拟机应用程序调试方法及系统,所述方法通过接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE,能够根据不同的调试控制指令进行不同的应用程序调试,保证了应用程序调试的全面性和完整性,不需要依赖硬件调试器设备,调试实施简单方便,可以避免虚拟机应用程序调试运行的环境不是其最终运行的设备,两者环境存在差异,导致无法完全模拟和重现程序的问题,提升了应用程序调试的速度和效率,不需要大量修改输出log语句,节省了应用程序调试时间和算力消耗。
Description
技术领域
本发明涉及软件工程技术领域,尤其涉及一种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语句,节省了应用程序调试时间和算力消耗。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (6)
1.一种MCU上虚拟机应用程序调试方法,其特征在于,所述MCU上虚拟机应用程序调试方法包括:
接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;
接收IDE发送的应用程序字节码,所述应用程序字节码为IDE对应用程序编译链接得到;
生成应用程序的程序变量名与地址的第一对应关系及源程序与所述字节码的第二对应关系;
根据所述第一对应关系,将调试时的程序变量名转换为地址;
根据所述第二对应关系,计算单步调试时一条应用程序源码语句需要执行的字节码数量;
启动虚拟机线程解释所述应用程序字节码;
在所述虚拟机线程的调试状态下,接收调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录;
启动虚拟机线程,当所述虚拟机线程检测到应用程序字节码运行至断点地址后,重新使所述虚拟机线程进入阻塞状态,并反馈调试结果至IDE;
接收所述调试服务组件发送的单步运行指令,并解析所述单步运行指令中需要运行的字节码个数;
启动虚拟机线程,运行与所述字节码个数数量相等的字节码后,重新使虚拟机线程进入阻塞状态,并反馈调试内容给IDE。
2.如权利要求1所述的MCU上虚拟机应用程序调试方法,其特征在于,所述接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程,包括:
接收IDE发送的调试控制指令;
虚拟机线程在阻塞状态下等待调试控制指令。
3.如权利要求1所述的MCU上虚拟机应用程序调试方法,其特征在于,所述接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程之前,所述MCU上虚拟机应用程序调试方法还包括:
对调试控制指令发起者进行身份验证,验证通过后开启调试功能。
4.一种MCU上虚拟机应用程序调试系统,其特征在于,所述MCU上虚拟机应用程序调试系统包括:调试服务组件、虚拟机线程及集成开发环境IDE;其中,
所述调试服务组件,用于接收IDE发送的调试控制指令,并以调试状态启动虚拟机线程;
所述虚拟机线程,用于在所述虚拟机线程的调试状态下,根据所述调试控制指令对应用程序进行调试,并反馈调试结果至IDE;
所述虚拟机线程,还用于接收IDE发送的应用程序字节码,所述应用程序字节码为IDE对应用程序编译链接得到;
所述虚拟机线程,还用于生成应用程序的程序变量名与地址的第一对应关系及源程序与所述字节码的第二对应关系;根据所述第一对应关系,将调试时的程序变量名转换为地址;根据所述第二对应关系,计算单步调试时一条应用程序源码语句需要执行的字节码数量;
所述虚拟机线程,还用于启动虚拟机线程解释所述应用程序字节码;
所述虚拟机线程,还用于在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录;
所述虚拟机线程,还用于在所述虚拟机线程的调试状态下,接收所述调试服务组件发送的设置断点指令,分析所述设置断点指令中设置的断点地址并记录,当所述虚拟机线程检测到应用程序字节码运行至断点地址后,重新使所述虚拟机线程进入阻塞状态,并反馈调试结果至IDE;
所述虚拟机线程,还用于接收所述调试服务组件发送的单步运行指令,并解析所述单步运行指令中需要运行的字节码个数,运行与所述字节码个数数量相等的字节码后,重新使虚拟机线程进入阻塞状态,并反馈调试内容给IDE。
5.如权利要求4所述的MCU上虚拟机应用程序调试系统,其特征在于,
IDE,用于生成应用程序的程序变量名与地址的第一对应关系及源程序与所述应用程序字节码的第二对应关系;根据所述第一对应关系,将调试时的程序变量名转换为地址;根据所述第二对应关系,计算单步调试时一条应用程序源码语句需要执行的字节码数量;
所述调试服务组件,还用于接收IDE发送的调试控制指令;
所述虚拟机线程,还用于虚拟机线程在阻塞状态下等待调试控制指令。
6.如权利要求5所述的MCU上虚拟机应用程序调试系统,其特征在于,所述调试服务组件,还用于对调试控制指令发起者进行身份验证,验证通过后开启调试功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111432208.7A CN113836046B (zh) | 2021-11-29 | 2021-11-29 | Mcu上虚拟机应用程序调试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111432208.7A CN113836046B (zh) | 2021-11-29 | 2021-11-29 | Mcu上虚拟机应用程序调试方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113836046A CN113836046A (zh) | 2021-12-24 |
CN113836046B true CN113836046B (zh) | 2022-02-15 |
Family
ID=78971894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111432208.7A Active CN113836046B (zh) | 2021-11-29 | 2021-11-29 | Mcu上虚拟机应用程序调试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113836046B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114546701A (zh) * | 2022-02-27 | 2022-05-27 | 重庆长安汽车股份有限公司 | 一种mcu现场软件调试定位问题的方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101364200A (zh) * | 2008-09-18 | 2009-02-11 | 浙江大学 | 嵌入式MIDlet调试软件的断点实现方法 |
CN101739333A (zh) * | 2008-11-25 | 2010-06-16 | 国际商业机器公司 | 应用程序的调试方法、调试工具及调试装置 |
CN102567003A (zh) * | 2010-12-29 | 2012-07-11 | 上海邮电设计咨询研究院有限公司 | 一种电信增值业务开发环境中的业务调试实现方法 |
CN102855186A (zh) * | 2012-07-24 | 2013-01-02 | 飞天诚信科技股份有限公司 | 一种Java卡调试信息的处理方法 |
CN103019941A (zh) * | 2012-12-28 | 2013-04-03 | 大唐微电子技术有限公司 | 程序调试方法和装置 |
CN106201893A (zh) * | 2016-07-21 | 2016-12-07 | 恒宝股份有限公司 | 一种Java字节码调试器及调试方法 |
US9632912B1 (en) * | 2014-03-28 | 2017-04-25 | Cadence Design Systems, Inc. | Method and system for debugging a program |
CN111400172A (zh) * | 2020-03-03 | 2020-07-10 | 北京声智科技有限公司 | 程序调试方法及装置 |
CN111782525A (zh) * | 2020-06-30 | 2020-10-16 | 中国工商银行股份有限公司 | Java方法远程调试方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649009A (zh) * | 2016-11-30 | 2017-05-10 | 北京中电华大电子设计有限责任公司 | 一种java卡字节码引用访问测试方法 |
CN109684027B (zh) * | 2017-10-18 | 2020-11-24 | 北京京东尚科信息技术有限公司 | 动态跟踪Java虚拟机运行的方法和装置 |
KR102214698B1 (ko) * | 2019-04-05 | 2021-02-10 | 주식회사 티맥스 소프트 | 통합개발환경 상에서 가상 머신 프로그램 및 네이티브 프로그램의 디버깅을 위한 서버 및 컴퓨터 프로그램 |
US11748233B2 (en) * | 2020-04-30 | 2023-09-05 | Red Hat, Inc. | Debugging a native compiled application from an integrated development environment |
-
2021
- 2021-11-29 CN CN202111432208.7A patent/CN113836046B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101364200A (zh) * | 2008-09-18 | 2009-02-11 | 浙江大学 | 嵌入式MIDlet调试软件的断点实现方法 |
CN101739333A (zh) * | 2008-11-25 | 2010-06-16 | 国际商业机器公司 | 应用程序的调试方法、调试工具及调试装置 |
CN102567003A (zh) * | 2010-12-29 | 2012-07-11 | 上海邮电设计咨询研究院有限公司 | 一种电信增值业务开发环境中的业务调试实现方法 |
CN102855186A (zh) * | 2012-07-24 | 2013-01-02 | 飞天诚信科技股份有限公司 | 一种Java卡调试信息的处理方法 |
CN103019941A (zh) * | 2012-12-28 | 2013-04-03 | 大唐微电子技术有限公司 | 程序调试方法和装置 |
US9632912B1 (en) * | 2014-03-28 | 2017-04-25 | Cadence Design Systems, Inc. | Method and system for debugging a program |
CN106201893A (zh) * | 2016-07-21 | 2016-12-07 | 恒宝股份有限公司 | 一种Java字节码调试器及调试方法 |
CN111400172A (zh) * | 2020-03-03 | 2020-07-10 | 北京声智科技有限公司 | 程序调试方法及装置 |
CN111782525A (zh) * | 2020-06-30 | 2020-10-16 | 中国工商银行股份有限公司 | Java方法远程调试方法及装置 |
Non-Patent Citations (1)
Title |
---|
Python如何实现单步调试;腾云鹏A;《http://blog.csdn.net/studyvcmfc/article/details/102640536》;20191019;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113836046A (zh) | 2021-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109783342B (zh) | 脚本调试方法、设备及计算机存储介质 | |
CN101714119B (zh) | 基于二进制程序的测试数据生成器和方法 | |
CA2143145C (en) | Determining dynamic properties of programs | |
CN111459495B (zh) | 单元测试代码文件生成方法、电子装置及存储介质 | |
US7546585B2 (en) | Method, system and computer program product for testing computer programs | |
CN110688313B (zh) | 一种VxWorks操作系统下软件测试的故障注入方法 | |
CN115757183A (zh) | 天熠嵌入式操作系统下一种基于代理的任务级调试方法 | |
CN113282487A (zh) | 编程语言调试方法、装置及终端设备 | |
CN110704314A (zh) | 一种嵌入式软件测试的故障注入方法 | |
CN113836046B (zh) | Mcu上虚拟机应用程序调试方法及系统 | |
CN110704315B (zh) | 一种嵌入式软件测试的故障注入装置 | |
CN102722438B (zh) | 一种内核调试的方法和设备 | |
CN114625660A (zh) | 调试方法及装置 | |
Oliinyk et al. | Fuzzing BusyBox: Leveraging LLM and Crash Reuse for Embedded Bug Unearthing | |
CN113836023A (zh) | 一种基于体系结构交叉检查的编译器安全性测试方法 | |
US11429379B2 (en) | Software checkpoint-restoration between distinctly compiled executables | |
US6983454B2 (en) | Extended “run to” function | |
CN113127329A (zh) | 脚本调试方法、装置及计算机存储介质 | |
US20030188296A1 (en) | Conditional debug monitors | |
CN114510429B (zh) | 一种基于动态符号执行的调试方法、系统和介质 | |
CN110096888B (zh) | 一种加快验证及分析smm安全隐患的方法及系统 | |
Li et al. | Concolic Testing of Front-end JavaScript | |
CN111611161A (zh) | 一种应用于航空电子软件的轻量级调试工具的实现方法 | |
JP2007004516A (ja) | 組込みシステムのプログラムデバッグ方法 | |
Jeon et al. | SP-Fuzz: Fuzzing Soft PLC with Semi-automated Harness Synthesis |
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 |