程序的调试方法及装置制造方法及图纸

技术编号:24330916 阅读:23 留言:0更新日期:2020-05-29 19:34
本发明专利技术公开了一种程序的调试方法及装置,其中,该方法包括:通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;在所述第一设备中分配所述目标调试程序的内存空间;在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;通过所述中断处理程序调试所述目标调试程序。通过本发明专利技术,解决了相关技术中不能在x86设备中直接调试ARM设备的程序的技术问题,可以完全脱离真实设备进行调试,调试环境更加灵活,调试效率更高。

Debugging method and device of program

【技术实现步骤摘要】
程序的调试方法及装置
本专利技术涉及计算机领域,尤其是一种程序的调试方法及装置。
技术介绍
相关技术中,调试器是基于CPU的中断机制实现的,因此进阶精简指令集机器(AdvancedRISCMachine,ARM)架构的调试器就需要相同架构的CPU,ARMCPU大多使用在移动设备和嵌入式设备上,现有的软件调试器(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的地址宽度;缓存模块,用于本文档来自技高网...

【技术保护点】
1.一种程序的调试方法,其特征在于,包括:/n通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;/n在所述第一设备中分配所述目标调试程序的内存空间;/n在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;/n通过所述中断处理程序调试所述目标调试程序。/n

【技术特征摘要】
1.一种程序的调试方法,其特征在于,包括:
通过第一操作系统的CPU模拟器加载目标调试程序,其中,所述第一操作系统运行在x86构架的第一设备,所述目标调试程序的应用环境为第二操作系统,所述第二操作系统运行在进阶精简指令集机器ARM构架的第二设备;
在所述第一设备中分配所述目标调试程序的内存空间;
在所述第一设备中运行所述目标调试程序,并触发所述目标调试程序的中断处理程序;
通过所述中断处理程序调试所述目标调试程序。


2.根据权利要求1所述的方法,其特征在于,在所述第一设备中运行所述目标调试程序,并触发所述的目标调试程序的中断处理程序,包括:
检测所述CPU模拟器针对所述目标调试程序的执行操作;
在所述CPU模拟器执行所述目标调试程序的任一代码指令时,触发软件中断信号;
响应所述软件中断信号,执行回调函数的指定代码,其中,所述指定代码包括所述中断处理程序。


3.根据权利要求1所述的方法,其特征在于,在所述第一设备中分配所述目标调试程序的内存空间包括:
获取所述目标调试程序的文件地址,其中,所述文件地址为相对地址;
基于所述第一设备的存储器的寻址空间和所述文件地址计算所述目标调试程序的重定向地址,其中,所述重定向地址为绝对地址;
根据所述绝对地址在所述第一设备中分配所述目标调试程序的内存空间。


4.根据权利要求1所述的方法,其特征在于,通过所述中断处理程序调试所述目标调试程序包括:
读取所述目标调试程序当前执行的指令代码;
解析所述指令代码,以确定所述指令代码的指令类型;
若所述指令类型为系统调用指令,对所述目标调试程序执行系统调试;若所述指令类型为断点指令,对所述目标调试程序执行断点调试。


5.根据权利要求1所述的方法,其特征在于,通过所述中断处理程序调试所述目标调试程序包括:
读取所述目标调试程序当前执行的指令代码;
判断所述指令代码的内存地址与代码地址是否相同;
若内存地址与代码地址相同,暂停执行所述目标调试程序,接收外部调试指令;若内存地址与代码地址不相同,判断所述指令代码的代码地址是否存在单步执行断点,若所述代码地址存在单步执行断点,暂停执行所述目标调试程序,接收外部调试指令,其中,所述外部调试指令用于指示针对所述目标调试程序的调试方式;
根据所述外部调试指令控制所述目标调试程序。


6.根据权利要求5所述的方法,其特征在于,根据所述外部调试指令控制所述目标调试程序包括:
若所述外部调试指令为单步执行指令,以所述指令代码为起始位置逐行执行所述目标调试程序;
若所述外部调试指令为步入执行指令,进入所述指令代码的调用函数,并执行所述调用函数;
若所述外部调试指令为停止指令,停止执行所述目标调试程序;
若所述外部调试指令为运行指令,继续执行所述目标调试程序。


7.根据权利要求5所述的方法,其特征在于,在读取所述目标调试程序当前执行的指令代码之后,所述方法还包括:
对所述指令代码进行反汇编翻译,以将所述指令代码从机器语言转换为汇编语言;
在所述第一设备的用户界面显示所述汇编语言。


8.根据权利要求1所述的方法,其特征在于,在所述第一设备中运行所述目标调试程序之前,所述方法还包括:
确定所述第二设备的CPU的地址宽度;
以所述地址宽度为单位,将所述目标调试程序的指令代码缓存至所述CPU模拟器中。

<...

【专利技术属性】
技术研发人员:王一诺
申请(专利权)人:北京健康之家科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1