CN111209193A - 程序的调试方法及装置 - Google Patents
程序的调试方法及装置 Download PDFInfo
- Publication number
- CN111209193A CN111209193A CN201911396063.2A CN201911396063A CN111209193A CN 111209193 A CN111209193 A CN 111209193A CN 201911396063 A CN201911396063 A CN 201911396063A CN 111209193 A CN111209193 A CN 111209193A
- Authority
- CN
- China
- Prior art keywords
- debugging
- instruction
- target
- program
- address
- 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.)
- Granted
Links
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/3664—Environments for testing or debugging software
-
- 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
- G06F11/3648—Software debugging using additional hardware
- G06F11/3652—Software debugging using additional hardware in-circuit-emulation [ICE] arrangements
-
- 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)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种程序的调试方法及装置,其中,该方法包括:通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;在所述第一设备中分配所述目标调试程序的内存空间;在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;通过所述中断处理程序调试所述目标调试程序。通过本发明,解决了相关技术中不能在x86设备中直接调试ARM设备的程序的技术问题,可以完全脱离真实设备进行调试,调试环境更加灵活,调试效率更高。
Description
技术领域
本发明涉及计算机领域,尤其是一种程序的调试方法及装置。
背景技术
相关技术中,调试器是基于CPU的中断机制实现的,因此进阶精简指令集机器(Advanced RISC Machine,ARM)架构的调试器就需要相同架构的CPU,ARM CPU大多使用在移动设备和嵌入式设备上,现有的软件调试器(IDA(交互式反汇编器(InteractiveDisassembler))、GDB等)都需要通过PC端连接相应的ARM设备(如安卓设备)进行调试,操作步骤繁琐调试过程中存在限制,由于运行环境的差异,软件调试器无法模拟硬件中断信号,硬件中断信号由ARM设备直接出发,进而导致调试环境复杂,无法在x86设备中直接调试ARM设备的程序。
相关技术中的软件调试器都需要借助PC端连接设备,手机还需要进行ROOT等权限获取操作,操作步骤繁琐费时,导致调试场景有限,调试效率低。
针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。
发明内容
为解决相关技术中不能在x86设备中直接调试ARM设备的程序的技术问题,本发明实施例提供了一种程序的调试方法及装置。
根据本发明的一个实施例,提供了一种程序的调试方法,包括:通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;在所述第一设备中分配所述目标调试程序的内存空间;在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;通过所述中断处理程序调试所述目标调试程序。
可选的,在所述第一设备中运行所述目标调试程序,并触发所述的目标调试程序的中断处理程序,包括:检测所述CPU模拟器针对所述目标调试程序的执行操作;在所述CPU模拟器执行所述目标调试程序的任一代码指令时,触发软件中断信号;响应所述软件中断信号,执行回调函数的指定代码,其中,所述指定代码包括所述中断处理程序。
可选的,在所述第一设备中分配所述目标调试程序的内存空间包括:获取所述目标调试程序的文件地址,其中,所述文件地址为相对地址;基于所述第一设备的存储器的寻址空间和所述文件地址计算所述目标调试程序的重定向地址,其中,所述重定向地址为绝对地址;根据所述绝对地址在所述第一设备中分配所述目标调试程序的内存空间。
可选的,通过所述中断处理程序调试所述目标调试程序包括:读取所述目标调试程序当前执行的指令代码;解析所述指令代码,以确定所述指令代码的指令类型;若所述指令类型为系统调用指令,对所述目标调试程序执行系统调试;若所述指令类型为断点指令,对所述目标调试程序执行断点调试。
可选的,通过所述中断处理程序调试所述目标调试程序包括:读取所述目标调试程序当前执行的指令代码;判断所述指令代码的内存地址与代码地址是否相同;若内存地址与代码地址相同,暂停执行所述目标调试程序,接收外部调试指令;若内存地址与代码地址不相同,判断所述指令代码的代码地址是否存在单步执行断点,若所述代码地址存在单步执行断点,暂停执行所述目标调试程序,接收外部调试指令,其中,所述外部调试指令用于指示针对所述目标调试程序的调试方式;根据所述外部调试指令控制所述目标调试程序。
可选的,根据所述外部调试指令控制所述目标调试程序包括:若所述外部调试指令为单步执行指令,以所述指令代码为起始位置逐行执行所述目标调试程序;若所述外部调试指令为步入执行指令,进入所述指令代码的调用函数,并执行所述调用函数;若所述外部调试指令为停止指令,停止执行所述目标调试程序;若所述外部调试指令为运行指令,继续执行所述目标调试程序。
可选的,在读取所述目标调试程序当前执行的指令代码之后,所述方法还包括:对所述指令代码进行反汇编翻译,以将所述指令代码从机器语言转换为汇编语言;在所述第一设备的用户界面显示所述汇编语言。
可选的,在所述第一设备中运行所述目标调试程序之前,所述方法还包括:确定所述第二设备的CPU的地址宽度;以所述地址宽度为单位,将所述目标调试程序的指令代码缓存至所述CPU模拟器中。
根据本发明的另一个实施例,提供了一种程序的调试装置,包括:加载模块,用于通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;分配模块,用于在所述第一设备中分配所述目标调试程序的内存空间;运行模块,用于在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;调试模块,用于通过所述中断处理程序调试所述目标调试程序。
可选的,所述运行模块,具体用于:检测所述CPU模拟器针对所述目标调试程序的执行操作;在所述CPU模拟器执行所述目标调试程序的任一代码指令时,触发软件中断信号;响应所述软件中断信号,执行回调函数的指定代码,其中,所述指定代码包括所述中断处理程序。
可选的,所述分配模块,具体用于:获取所述目标调试程序的文件地址,其中,所述文件地址为相对地址;基于所述第一设备的存储器的寻址空间和所述文件地址计算所述目标调试程序的重定向地址,其中,所述重定向地址为绝对地址;根据所述绝对地址在所述第一设备中分配所述目标调试程序的内存空间。
可选的,所述调试模块,具体用于:读取所述目标调试程序当前执行的指令代码;解析所述指令代码,以确定所述指令代码的指令类型;若所述指令类型为系统调用指令,对所述目标调试程序执行系统调试;若所述指令类型为断点指令,对所述目标调试程序执行断点调试。
可选的,所述调试模块,具体用于:读取所述目标调试程序当前执行的指令代码;判断所述指令代码的内存地址与代码地址是否相同;若内存地址与代码地址相同,暂停执行所述目标调试程序,接收外部调试指令;若内存地址与代码地址不相同,判断所述指令代码的代码地址是否存在单步执行断点,若所述代码地址存在单步执行断点,暂停执行所述目标调试程序,接收外部调试指令,其中,所述外部调试指令用于指示针对所述目标调试程序的调试方式;根据所述外部调试指令控制所述目标调试程序。
可选的,所述调试模块用于根据所述外部调试指令控制所述目标调试程序时,具体用于:若所述外部调试指令为单步执行指令,以所述指令代码为起始位置逐行执行所述目标调试程序;若所述外部调试指令为步入执行指令,进入所述指令代码的调用函数,并执行所述调用函数;若所述外部调试指令为停止指令,停止执行所述目标调试程序;若所述外部调试指令为运行指令,继续执行所述目标调试程序。
可选的,所述调试模块在读取所述目标调试程序当前执行的指令代码之后,还用于:对所述指令代码进行反汇编翻译,以将所述指令代码从机器语言转换为汇编语言;在所述第一设备的用户界面显示所述汇编语言。
可选的,所述装置还包括:确定模块,用于在所述运行模块在所述第一设备中运行所述目标调试程序之前,确定所述第二设备的CPU的地址宽度;缓存模块,用于以所述地址宽度为单位,将所述目标调试程序的指令代码缓存至所述CPU模拟器中。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本实施例的方案,在x86构架的第一设备的CPU模拟器加载应用环境为ARM构架的目标调试程序,然后在第一设备中分配目标调试程序的内存空间,在第一设备中运行目标调试程序,并触发目标调试程序的中断处理程序,通过中断处理程序调试目标调试程序,基于CPU模拟器提供虚拟的运行环境,模拟程序调试过程中的软硬件断点,在x86构架的调试设备上调试运行在ARM构架上的程序时,不需要再连接ARM构架的第二设备,解决了相关技术中不能在x86设备中直接调试ARM设备的程序的技术问题,可以完全脱离真实设备进行调试,调试环境更加灵活,调试效率更高。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
构成说明书的一部分的附图描述了本发明的实施例,并且连同描述一起用于解释本发明的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:
图1是本发明实施例的一种程序的调试计算机的硬件结构框图;
图2是根据本发明实施例的一种程序的调试方法的流程图;
图3是本发明实施例的软件构架图;
图4是本发明实施例的调试运行流程图;
图5是根据本发明实施例的程序的调试装置的结构框图;
图6是本发明一个实施方式中的程序的调试装置的结构框图。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本发明实施例可以应用于计算机系统/服务器,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统、大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
计算机系统/服务器可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
本申请实施例一所提供的方法实施例可以在移动终端、计算机、服务器或者类似的运算装置中执行。以运行在计算机上为例,图1是本发明实施例的一种程序的调试计算机的硬件结构框图。如图1所示,计算机10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述计算机还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机的结构造成限定。例如,计算机10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的程序的调试方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种程序的调试方法,图2是根据本发明实施例的一种程序的调试方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,通过第一操作系统的CPU模拟器加载目标调试程序,其中,第一操作系统运行在x86构架的第一设备,目标调试程序的应用环境为第二操作系统,第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;
本实施例的第一设备可以是运行x86构架处理器的设备,如台式电脑,笔记本等,第二设备可以是运行ARM构架处理器的设备,如安卓设备(平板、手机等)。
目标调试程序可以是一个软件程序,也可以是一段代码程序,如恶意代码、病毒代码等。本实施例通过CPU模拟器,可以在第一设备中加载和执行只能在第二设备中正常执行的程序,通过在第一设备中模拟第二设备的运行环境,可以模拟执行第二设备的CPU的功能。
步骤S204,在第一设备中分配目标调试程序的内存空间;
步骤S206,在第一设备中运行目标调试程序,并触发目标调试程序的中断处理程序;
本实施例的中断处理程序设置在所述CPU模拟器中,用于与目标调试程序进行交互,并基于用户的外部指令,完成自动调试过程。
步骤S208,通过中断处理程序调试目标调试程序。
通过上述步骤,在x86构架的第一设备的CPU模拟器加载应用环境为ARM构架的目标调试程序,然后在第一设备中分配目标调试程序的内存空间,在第一设备中运行目标调试程序,并触发目标调试程序的中断处理程序,通过中断处理程序调试目标调试程序,基于CPU模拟器提供虚拟的运行环境,模拟程序调试过程中的软硬件断点,在x86构架的调试设备上调试运行在ARM构架上的程序时,不需要再连接ARM构架的第二设备,解决了相关技术中不能在x86设备中直接调试ARM设备的程序的技术问题,可以完全脱离真实设备进行调试,调试环境更加灵活,调试效率更高。
在本实施例中,在第一设备中运行目标调试程序,并触发的目标调试程序的中断处理程序,包括:
S11,检测CPU模拟器针对目标调试程序的执行操作;
S12,在CPU模拟器执行目标调试程序的任一代码指令时,触发软件中断信号;
S13,响应软件中断信号,执行回调函数的指定代码,其中,指定代码包括中断处理程序。
图3是本发明实施例的软件构架图,如图3所示,软件可以是运行在x86设备上的调试组件,如虚拟调试器,包括以下功能组件:CPU模拟器(unicorn cpu)30,中断处理31,文件系统32,内存管理33,系统调用34,反汇编35,以unicorn作为框架的基础组件,利用unicorn的中断机制,实现以下组件的系统功能,包括:
文件系统:加载/解析待调试程序;
内存管理:管理程序分配释放内存;
系统调用:模拟操作系统常用的系统调用,open、read、write等操作;
反汇编:处理断点,步入/步过/停止/运行等操作。
使用unicorn作为调试器的API,通过以下指令触发中断处理程序,uc_hook_add(uc_engine*uc,uc_hook*hh,int type,void*callback,void*user_data,uint64_tbegin,uint64_t end,...);调用API(unicorn API)后,当CPU将要执行一条指令时,都会先执行callback参数指定的代码。通过指令uc_mem_map(uc_engine*uc,uint64_t address,size_t size,uint32_t perms)和uc_mem_write(uc_engine*uc,uint64_t address,constvoid*bytes,size_t size),API可以实现内存操作。
在本实施例的一个实施方式中,在第一设备中分配目标调试程序的内存空间包括:获取目标调试程序的文件地址,其中,文件地址为相对地址;基于第一设备的存储器的寻址空间和文件地址计算目标调试程序的重定向地址,其中,重定向地址为绝对地址;根据绝对地址在第一设备中分配目标调试程序的内存空间。
目标调试程序从文件系统加载内存后,需要对其进行重定向处理,以确定目标调试程序在第一设备中的绝对地址,方便寻址访问。在一个示例中,目标调试程序在文件系统的文件地址为100,第一设备的存储器的寻址空间为10000,通过计算,重定向地址为100+10000=100100。
在本实施例的一个调试方式中,通过中断处理程序调试目标调试程序包括:
读取目标调试程序当前执行的指令代码;
解析指令代码,以确定指令代码的指令类型;
若指令类型为系统调用指令,对目标调试程序执行系统调试;若指令类型为断点指令,对目标调试程序执行断点调试。
在本实施例的另一个调试方式中,通过中断处理程序调试目标调试程序包括:
S21,读取目标调试程序当前执行的指令代码;
S22,判断指令代码的内存地址与代码地址是否相同;
若指令代码的内存地址与代码地址相同,则可以确定指令代码存在断点,目标调试程序暂停,等待用户输入外部调试指令。若指令代码的内存地址与代码地址不同,不存在断点,判断是否存在单步执行断点,目标调试程序暂停,等待用户输入外部调试指令。
S23,若内存地址与代码地址相同,暂停执行所述目标调试程序,接收外部调试指令;若内存地址与代码地址不相同,判断指令代码的代码地址是否存在单步执行断点,若代码地址存在单步执行断点,暂停执行所述目标调试程序,接收外部调试指令,其中,外部调试指令用于指示针对目标调试程序的调试方式;
可选的,外部调试指令可以但不限于为单步执行指令、步入执行指令、停止指令、运行指令,对应的调试方式分别为:单步调试、步入调试、停止、跳过并继续执行。
S24,根据外部调试指令控制目标调试程序。
在本实施例中,根据外部调试指令控制目标调试程序包括:若外部调试指令为单步执行指令,以指令代码为起始位置逐行执行目标调试程序;若外部调试指令为步入执行指令,进入指令代码的调用函数,并执行调用函数;若外部调试指令为停止指令,停止执行目标调试程序;若外部调试指令为运行指令,继续执行目标调试程序。
本实施例的单步执行即通过逐行地执行代码来实现调试,步入执行即代码指令调用了一个函数(或方法)时,单步进入会进入到该方法里面,除非此方法上有断点。
为了在用户界面显示当前的调试进度和调试内容,还可以通过反汇编的方式来显示调试状态信息。在读取目标调试程序当前执行的指令代码之后,对指令代码进行反汇编翻译,以将指令代码从机器语言转换为汇编语言;在第一设备的用户界面显示汇编语言。由于CPU执行的代码指令时机器语言,用户界面只能识别汇编语言(或者基于汇编语言的编程语言,如C语言等),所以需要将代码指令转换为汇编语言。
可选的,在第一设备中运行目标调试程序之前,还包括:确定第二设备的CPU的地址宽度;以地址宽度为单位,将目标调试程序的指令代码缓存至CPU模拟器中。第一设备的CPU支持较长的可读地址长度(地址宽度),而可读地址长度可以向下兼容,如64位可以兼容32位和16位,32位可以兼容16位,由于目标调试程序是为第二设备的,第二设备的CPU的可读地址长度可能与第一设备不同,通常情况下,第一设备的地址宽度会大于第二设备的地址宽度,因此可以第一设备的地址宽度为单位,将目标调试程序的指令代码缓存至CPU模拟器中,以实现CPU模拟器的正常运行。
图4是本发明实施例的调试运行流程图,流程包括:
S41,加载文件:将待调试代码,从文件系统加载到内存中;
S42,重定向:根据加载内存地址,调整待测试代码的地址、偏移等信息
S43,运行:此时待调试代码开始运行,16、32、64,可读地址长度;
S44,中断处理:CPU模拟器每执行一条代码都会发出一个中断信号,会有相应的中断处理程序被执行;
S45,判断系统调用:处理程序中判断当前执行的代码是否是一个系统调用或者断点,如果是系统调用,程序执行流程将转入“系统API实现模块”,否则进入下一个判断;
S46,判断断点,判断当前执行的代码地址,是否存在断点(内存地址,代码地址是否相同),如果有程序暂停,等待用户输入,否则进入下一个判断
S47,判断单步执行:如果当前有单步执行断点,则程序暂停,等待用户输入,否则程序继续执行回到运行状态;
S48,等待用户输入:此时程序暂停等待用户输入,用户根据执行情况可能会输入停止/运行/单步执行/步入执行4种情况;
S49,判断用户输入:停止则程序退出,单步执行则程序回到中断处理函数读取下一条指令执行,再次执行S44~S48的流程,运行则程序继续执行。
在这个模拟CPU的基础上进行开发可以实现一个功能更完善的调试器。模拟软硬件断点,可以完全脱离真实设备进行调试。调试环境更加灵活。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
在本实施例中还提供了一种程序的调试装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图5是根据本发明实施例的程序的调试装置的结构框图,如图5所示,该装置包括:加载模块50,分配模块52,运行模块54,调试模块56,其中,
加载模块50,用于通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;
分配模块52,用于在所述第一设备中分配所述目标调试程序的内存空间;
运行模块54,用于在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;
调试模块56,用于通过所述中断处理程序调试所述目标调试程序。
可选的,所述运行模块,具体用于:检测所述CPU模拟器针对所述目标调试程序的执行操作;在所述CPU模拟器执行所述目标调试程序的任一代码指令时,触发软件中断信号;响应所述软件中断信号,执行回调函数的指定代码,其中,所述指定代码包括所述中断处理程序。
可选的,所述分配模块,具体用于:获取所述目标调试程序的文件地址,其中,所述文件地址为相对地址;基于所述第一设备的存储器的寻址空间和所述文件地址计算所述目标调试程序的重定向地址,其中,所述重定向地址为绝对地址;根据所述绝对地址在所述第一设备中分配所述目标调试程序的内存空间。
可选的,所述调试模块,具体用于:读取所述目标调试程序当前执行的指令代码;解析所述指令代码,以确定所述指令代码的指令类型;若所述指令类型为系统调用指令,对所述目标调试程序执行系统调试;若所述指令类型为断点指令,对所述目标调试程序执行断点调试。
可选的,所述调试模块,具体用于:读取所述目标调试程序当前执行的指令代码;判断所述指令代码的内存地址与代码地址是否相同;若内存地址与代码地址相同,暂停执行所述目标调试程序,接收外部调试指令;若内存地址与代码地址不相同,判断所述指令代码的代码地址是否存在单步执行断点,若所述代码地址存在单步执行断点,暂停执行所述目标调试程序,接收外部调试指令,其中,所述外部调试指令用于指示针对所述目标调试程序的调试方式;根据所述外部调试指令控制所述目标调试程序。
可选的,所述调试模块用于根据所述外部调试指令控制所述目标调试程序时,具体用于:若所述外部调试指令为单步执行指令,以所述指令代码为起始位置逐行执行所述目标调试程序;若所述外部调试指令为步入执行指令,进入所述指令代码的调用函数,并执行所述调用函数;若所述外部调试指令为停止指令,停止执行所述目标调试程序;若所述外部调试指令为运行指令,继续执行所述目标调试程序。
可选的,所述调试模块在读取所述目标调试程序当前执行的指令代码之后,还用于:对所述指令代码进行反汇编翻译,以将所述指令代码从机器语言转换为汇编语言;在所述第一设备的用户界面显示所述汇编语言。
可选的,所述装置还包括:确定模块,用于在所述运行模块在所述第一设备中运行所述目标调试程序之前,确定所述第二设备的CPU的地址宽度;缓存模块,用于以所述地址宽度为单位,将所述目标调试程序的指令代码缓存至所述CPU模拟器中。
图6是本发明一个实施方式中的程序的调试装置的结构框图,如图6所示,该装置包括:加载模块50,分配模块52,运行模块54,调试模块56,上传模块50,确定模块60,缓存模块62,其中,确定模块60,用于在所述运行模块在所述第一设备中运行所述目标调试程序之前,确定所述第二设备的CPU的地址宽度;缓存模块62,用于以所述地址宽度为单位,将所述目标调试程序的指令代码缓存至所述CPU模拟器中。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;
S2,在所述第一设备中分配所述目标调试程序的内存空间;
S3,在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;
S4,通过所述中断处理程序调试所述目标调试程序。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;
S2,在所述第一设备中分配所述目标调试程序的内存空间;
S3,在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;
S4,通过所述中断处理程序调试所述目标调试程序。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
可能以许多方式来实现本发明的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和系统。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。
本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。
Claims (16)
1.一种程序的调试方法,其特征在于,包括:
通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;
在所述第一设备中分配所述目标调试程序的内存空间;
在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;
通过所述中断处理程序调试所述目标调试程序。
2.根据权利要求1所述的方法,其特征在于,在所述第一设备中运行所述目标调试程序,并触发所述的目标调试程序的中断处理程序,包括:
检测所述CPU模拟器针对所述目标调试程序的执行操作;
在所述CPU模拟器执行所述目标调试程序的任一代码指令时,触发软件中断信号;
响应所述软件中断信号,执行回调函数的指定代码,其中,所述指定代码包括所述中断处理程序。
3.根据权利要求1所述的方法,其特征在于,在所述第一设备中分配所述目标调试程序的内存空间包括:
获取所述目标调试程序的文件地址,其中,所述文件地址为相对地址;
基于所述第一设备的存储器的寻址空间和所述文件地址计算所述目标调试程序的重定向地址,其中,所述重定向地址为绝对地址;
根据所述绝对地址在所述第一设备中分配所述目标调试程序的内存空间。
4.根据权利要求1所述的方法,其特征在于,通过所述中断处理程序调试所述目标调试程序包括:
读取所述目标调试程序当前执行的指令代码;
解析所述指令代码,以确定所述指令代码的指令类型;
若所述指令类型为系统调用指令,对所述目标调试程序执行系统调试;若所述指令类型为断点指令,对所述目标调试程序执行断点调试。
5.根据权利要求1所述的方法,其特征在于,通过所述中断处理程序调试所述目标调试程序包括:
读取所述目标调试程序当前执行的指令代码;
判断所述指令代码的内存地址与代码地址是否相同;
若内存地址与代码地址相同,暂停执行所述目标调试程序,接收外部调试指令;若内存地址与代码地址不相同,判断所述指令代码的代码地址是否存在单步执行断点,若所述代码地址存在单步执行断点,暂停执行所述目标调试程序,接收外部调试指令,其中,所述外部调试指令用于指示针对所述目标调试程序的调试方式;
根据所述外部调试指令控制所述目标调试程序。
6.根据权利要求5所述的方法,其特征在于,根据所述外部调试指令控制所述目标调试程序包括:
若所述外部调试指令为单步执行指令,以所述指令代码为起始位置逐行执行所述目标调试程序;
若所述外部调试指令为步入执行指令,进入所述指令代码的调用函数,并执行所述调用函数;
若所述外部调试指令为停止指令,停止执行所述目标调试程序;
若所述外部调试指令为运行指令,继续执行所述目标调试程序。
7.根据权利要求5所述的方法,其特征在于,在读取所述目标调试程序当前执行的指令代码之后,所述方法还包括:
对所述指令代码进行反汇编翻译,以将所述指令代码从机器语言转换为汇编语言;
在所述第一设备的用户界面显示所述汇编语言。
8.根据权利要求1所述的方法,其特征在于,在所述第一设备中运行所述目标调试程序之前,所述方法还包括:
确定所述第二设备的CPU的地址宽度;
以所述地址宽度为单位,将所述目标调试程序的指令代码缓存至所述CPU模拟器中。
9.一种程序的调试装置,其特征在于,包括:
加载模块,用于通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;
分配模块,用于在所述第一设备中分配所述目标调试程序的内存空间;
运行模块,用于在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;
调试模块,用于通过所述中断处理程序调试所述目标调试程序。
10.根据权利要求9所述的装置,其特征在于,所述运行模块,具体用于:
检测所述CPU模拟器针对所述目标调试程序的执行操作;
在所述CPU模拟器执行所述目标调试程序的任一代码指令时,触发软件中断信号;
响应所述软件中断信号,执行回调函数的指定代码,其中,所述指定代码包括所述中断处理程序。
11.根据权利要求9所述的装置,其特征在于,所述分配模块,具体用于:
获取所述目标调试程序的文件地址,其中,所述文件地址为相对地址;
基于所述第一设备的存储器的寻址空间和所述文件地址计算所述目标调试程序的重定向地址,其中,所述重定向地址为绝对地址;
根据所述绝对地址在所述第一设备中分配所述目标调试程序的内存空间。
12.根据权利要求9所述的装置,其特征在于,所述调试模块,具体用于:
读取所述目标调试程序当前执行的指令代码;
解析所述指令代码,以确定所述指令代码的指令类型;
若所述指令类型为系统调用指令,对所述目标调试程序执行系统调试;若所述指令类型为断点指令,对所述目标调试程序执行断点调试。
13.根据权利要求9所述的装置,其特征在于,所述调试模块,具体用于:
读取所述目标调试程序当前执行的指令代码;
判断所述指令代码的内存地址与代码地址是否相同;
若内存地址与代码地址相同,暂停执行所述目标调试程序,接收外部调试指令;若内存地址与代码地址不相同,判断所述指令代码的代码地址是否存在单步执行断点,若所述代码地址存在单步执行断点,暂停执行所述目标调试程序,接收外部调试指令,其中,所述外部调试指令用于指示针对所述目标调试程序的调试方式;
根据所述外部调试指令控制所述目标调试程序。
14.根据权利要求13所述的装置,其特征在于,所述调试模块用于根据所述外部调试指令控制所述目标调试程序时,具体用于:
若所述外部调试指令为单步执行指令,以所述指令代码为起始位置逐行执行所述目标调试程序;
若所述外部调试指令为步入执行指令,进入所述指令代码的调用函数,并执行所述调用函数;
若所述外部调试指令为停止指令,停止执行所述目标调试程序;
若所述外部调试指令为运行指令,继续执行所述目标调试程序。
15.根据权利要求13所述的装置,其特征在于,所述调试模块在读取所述目标调试程序当前执行的指令代码之后,还用于:
对所述指令代码进行反汇编翻译,以将所述指令代码从机器语言转换为汇编语言;
在所述第一设备的用户界面显示所述汇编语言。
16.根据权利要求9所述的装置,其特征在于,所述装置还包括:
确定模块,用于在所述运行模块在所述第一设备中运行所述目标调试程序之前,确定所述第二设备的CPU的地址宽度;
缓存模块,用于以所述地址宽度为单位,将所述目标调试程序的指令代码缓存至所述CPU模拟器中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911396063.2A CN111209193B (zh) | 2019-12-30 | 2019-12-30 | 程序的调试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911396063.2A CN111209193B (zh) | 2019-12-30 | 2019-12-30 | 程序的调试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111209193A true CN111209193A (zh) | 2020-05-29 |
CN111209193B CN111209193B (zh) | 2023-09-22 |
Family
ID=70786572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911396063.2A Active CN111209193B (zh) | 2019-12-30 | 2019-12-30 | 程序的调试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111209193B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559328A (zh) * | 2020-12-04 | 2021-03-26 | 北京字节跳动网络技术有限公司 | 指令模拟引擎的判别方法、装置、设备及介质 |
CN113467861A (zh) * | 2021-07-16 | 2021-10-01 | 腾讯科技(深圳)有限公司 | 文件调用方法和装置、存储介质及电子设备 |
CN113590470A (zh) * | 2021-06-30 | 2021-11-02 | 龙芯中科(成都)技术有限公司 | 软件调试方法、装置、电子设备及存储介质 |
CN114327648A (zh) * | 2021-12-16 | 2022-04-12 | 北京安天网络安全技术有限公司 | 一种驱动调试方法、装置、电子设备及存储介质 |
CN115098402A (zh) * | 2022-07-25 | 2022-09-23 | 摩尔线程智能科技(北京)有限责任公司 | 调试方法以及调试装置 |
CN115470151A (zh) * | 2022-11-01 | 2022-12-13 | 统信软件技术有限公司 | 一种应用运行分析方法、计算设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU6235880A (en) * | 1979-10-05 | 1981-04-09 | Honeywell Information Systems Inc. | Interface circuit for maintenance system to a cpu |
EP0848329A2 (en) * | 1996-12-16 | 1998-06-17 | Texas Instruments Incorporated | Test access interface for integrated circuits |
EP1130501A1 (en) * | 2000-03-02 | 2001-09-05 | Texas Instruments Incorporated | Dynamically configurable debut port for concurrent support of debug functions from multiple data processing cores |
CN1645339A (zh) * | 2005-01-31 | 2005-07-27 | 浙江大学 | 在嵌入式系统模拟器上调试应用程序的方法 |
CN103577315A (zh) * | 2012-07-30 | 2014-02-12 | 国际商业机器公司 | 反向调试器和反向调试方法 |
CN103593292A (zh) * | 2013-11-19 | 2014-02-19 | 北京深思数盾科技有限公司 | 调试程序的系统及方法 |
CN105740139A (zh) * | 2014-12-09 | 2016-07-06 | 北京中船信息科技有限公司 | 一种基于虚拟环境的嵌入式软件调试方法 |
CN110597678A (zh) * | 2019-09-09 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 一种调试方法及调试单元 |
-
2019
- 2019-12-30 CN CN201911396063.2A patent/CN111209193B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU6235880A (en) * | 1979-10-05 | 1981-04-09 | Honeywell Information Systems Inc. | Interface circuit for maintenance system to a cpu |
EP0848329A2 (en) * | 1996-12-16 | 1998-06-17 | Texas Instruments Incorporated | Test access interface for integrated circuits |
EP1130501A1 (en) * | 2000-03-02 | 2001-09-05 | Texas Instruments Incorporated | Dynamically configurable debut port for concurrent support of debug functions from multiple data processing cores |
CN1645339A (zh) * | 2005-01-31 | 2005-07-27 | 浙江大学 | 在嵌入式系统模拟器上调试应用程序的方法 |
CN103577315A (zh) * | 2012-07-30 | 2014-02-12 | 国际商业机器公司 | 反向调试器和反向调试方法 |
CN103593292A (zh) * | 2013-11-19 | 2014-02-19 | 北京深思数盾科技有限公司 | 调试程序的系统及方法 |
CN105740139A (zh) * | 2014-12-09 | 2016-07-06 | 北京中船信息科技有限公司 | 一种基于虚拟环境的嵌入式软件调试方法 |
CN110597678A (zh) * | 2019-09-09 | 2019-12-20 | 腾讯科技(深圳)有限公司 | 一种调试方法及调试单元 |
Non-Patent Citations (2)
Title |
---|
JOSHUA S. MONSON: "《Enhancing debug observability for HLS-based FPGA circuits through source-to-source compilation》", 《JOURNAL OF PARALLEL AND DISTRIBUTED COMPUTING》, pages 148 * |
王敬宇: "《并行调试的可扩展性研究》", 《计算机工程与科学》, no. 3, pages 86 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112559328A (zh) * | 2020-12-04 | 2021-03-26 | 北京字节跳动网络技术有限公司 | 指令模拟引擎的判别方法、装置、设备及介质 |
CN113590470A (zh) * | 2021-06-30 | 2021-11-02 | 龙芯中科(成都)技术有限公司 | 软件调试方法、装置、电子设备及存储介质 |
CN113467861A (zh) * | 2021-07-16 | 2021-10-01 | 腾讯科技(深圳)有限公司 | 文件调用方法和装置、存储介质及电子设备 |
CN114327648A (zh) * | 2021-12-16 | 2022-04-12 | 北京安天网络安全技术有限公司 | 一种驱动调试方法、装置、电子设备及存储介质 |
CN114327648B (zh) * | 2021-12-16 | 2024-02-02 | 北京安天网络安全技术有限公司 | 一种驱动调试方法、装置、电子设备及存储介质 |
CN115098402A (zh) * | 2022-07-25 | 2022-09-23 | 摩尔线程智能科技(北京)有限责任公司 | 调试方法以及调试装置 |
CN115470151A (zh) * | 2022-11-01 | 2022-12-13 | 统信软件技术有限公司 | 一种应用运行分析方法、计算设备及存储介质 |
CN115470151B (zh) * | 2022-11-01 | 2023-01-24 | 统信软件技术有限公司 | 一种应用运行分析方法、计算设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111209193B (zh) | 2023-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111209193B (zh) | 程序的调试方法及装置 | |
US11210109B2 (en) | Method and system for loading resources | |
US10318409B2 (en) | Application development environment for portable electronic devices | |
US8407717B2 (en) | Parallel processing method for dual operating system | |
CN110457211B (zh) | 脚本性能测试方法、装置和设备及计算机存储介质 | |
CN108595220B (zh) | 应用组件的处理方法、设备及计算机可读存储介质 | |
CN109873735B (zh) | H5页面的性能测试方法、装置和计算机设备 | |
CN110196795B (zh) | 检测移动终端应用运行状态的方法及相关装置 | |
CN102591696A (zh) | 一种手机软件行为数据提取方法及系统 | |
CN108614767A (zh) | 一种远程调试方法及装置 | |
CN103176899A (zh) | 手机模拟器及在宿主机上模拟手机功能的方法 | |
CN112416775A (zh) | 基于人工智能的软件自动化测试方法、装置及电子设备 | |
CN115656788B (zh) | 一种芯片测试系统、方法、设备及存储介质 | |
CN110012003B (zh) | 一种云应用抓屏方法和装置 | |
CN111385661B (zh) | 语音控制全屏播放的方法、装置、终端及存储介质 | |
CN112084104A (zh) | 一种异常测试方法和装置 | |
CN113805854A (zh) | 基于Linux系统的应用层Hook实现方法、系统、装置及存储介质 | |
KR100751063B1 (ko) | 임베디드 시스템의 프로그램 개발을 위한 pc 기반의에뮬레이션 제공 방법 및 장치 | |
CN112631949A (zh) | 一种调试方法、装置、计算机设备及存储介质 | |
CN112199270A (zh) | 一种程序测试方法、装置、设备及介质 | |
CN112860224B (zh) | 一种函数执行环境构建方法、装置、电子设备及存储介质 | |
CN117762717B (zh) | 处理器缓存的工作机制的测试方法以及装置 | |
CN118152037A (zh) | 应用程序运行方法、装置、设备、存储介质及产品 | |
WO2024086965A1 (en) | Testing device driver by combining the device driver, firmware emulation layer, embedded simulator, and model of hardware subsystem within single native host application | |
WO2022120790A1 (en) | Methods and apparatus to mitigate locks in real-time computing environments |
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 | ||
CB02 | Change of applicant information |
Address after: 100102 201 / F, block C, 2 lizezhong 2nd Road, Chaoyang District, Beijing Applicant after: Beijing Shuidi Technology Group Co.,Ltd. Address before: Room 4103, room 101, floor 1, building 2, No. 208, Lize Zhongyuan, Chaoyang District, Beijing 100102 Applicant before: Beijing Health Home Technology Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |