程序调试方法、装置及系统的制作方法_2

文档序号:8258305阅读:来源:国知局
序的PC,判断PC是否在第一映射表内,如果所述PC在所述第一映射表内,则重新向所述目标芯片发送程序调试指令,直到所述目标芯片在程序运行停止时的二进制代码程序的PC不在所述第一映射表内为止,解决了调试过程中程序停止在库函数对应的机器码中的问题,进而能够确定目标芯片运行的二进制机器码与源程序之间的对应关系。
【附图说明】
[0048]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0049]图1为本发明程序调试方法实施例一的流程图;
[0050]图2为本发明程序调试方法实施例二的流程图;
[0051]图3为本发明程序调试方法实施例三的流程图;
[0052]图4为本发明程序调试器一实施例的结构示意图;
[0053]图5为本发明界面处理装置一实施例的结构示意图;
[0054]图6为本发明程序调试系统一实施例的结构示意图。
【具体实施方式】
[0055]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0056]图1为本发明程序调试方法实施例一的流程图。本实施例的执行主体为程序调试器,该程序调试器可以对目标芯片进行实时调试及监控,实现基本的调试命令,本实施例中程序调试器还可以对单片机进行调试。具体的,本实施例包括如下步骤:
[0057]步骤101、向目标芯片发送程序调试指令,以使所述目标芯片根据所述程序调试指令运行二进制代码程序。
[0058]在本实施例中,程序调试向目标芯片发送程序调试指令之前,程序调试器会将界面处理装置编译生成的可执行文件下载到目标芯片中,目标芯片运行的是二进制机器代码,所以可执行文件中的程序是以二进制形式表示的,该可执行文件中包含了用户自己编写的源代码对应的二进制代码以及源代码中调用的库函数对应的二进制代码,其中调用的库函数对应的二进制代码是通过链接方式连接到源代码对应的二进制代码中的。在本实施例中,程序调试器与界面处理装置通过串口、USB等方式进行数据交换,程序调试器与目标芯片通过专用调试线连接。在本实施例中,调试指令包括了单步指令、步越指令或停止运行指令,程序调试器开始调试时,接收界面处理装置发送的调试指令,程序调试器根据接收到的调试指令指示目标芯片根据调试指令运行二进制代码程序。
[0059]步骤102、在程序运行停止时,读取所述目标芯片当前运行的二进制代码程序的PCo
[0060]本实施例中,目标芯片根据调试指令停止运行时,程序调试器读取目标芯片当前运行的二进制代码程序对应的PC,由于目标芯片无法识别当前运行的二进制代码是用户自己编写的源代码还是源代码调用的库函数对应的二进制代码,所以目标芯片停止运行时,返回的PC可能是源代码对应的二进制代码的PC,也可能是库函数对应的二进制代码的PC,而在现有技术中,如果返回的PC是库函数对应的二进制代码的PC,即程序停止在库函数对应的二进制代码程序中,则界面处理装置根据该PC是无法找到对应的源代码行号的,也就无法显示当前运行的程序在源代码中的位置,如果返回的PC是用户自己编写的源代码对应的二进制代码的PC时,界面处理装置根据该PC能够找到对应的源代码行号信息,也就能够准确显示当前运行的程序在源代码中的位置。
[0061]步骤103、判断所述PC是否在第一映射表内,所述第一映射表包括库函数与所述库函数在所述二进制代码程序中的PC之间的映射关系。
[0062]本实施例中,程序调试器判断读取的PC是否在第一映射表内,第一映射表包括库函数与所述库函数在所述二进制代码程序中的PC之间的映射关系,具体地,所述库函数在所述二进制代码程序中的PC为库函数在所述二进制代码程序中的起始PC和结束PC的范围,如果读取的PC在库函数对应的二进制代码的起始PC和结束PC的范围内,则执行步骤104。
[0063]步骤104、如果所述PC在所述第一映射表内,则重新向所述目标芯片发送程序调试指令,直到所述目标芯片在程序运行停止时的二进制代码程序的PC不在所述第一映射表内为止。
[0064]本实施例中,如果读取的PC在第一映射表内,则重新向目标芯片发送调试指令,在该步骤中,重新向目标芯片发送的调试指令为单步指令或步越指令,目标芯片根据单步指令或步越指令继续执行一条指令,接着执行步骤102、步骤103,如果读取的PC还在第一映射表内,则继续执行步骤104,直到目标芯片在程序运行停止时的二进制代码程序的PC不在第一映射表内为止,如果读取的PC不在第一映射表内,即当前运行的二进制代码程序为用户自己编写的源代码程序而不是库函数对应的二进制代码,此时根据PC可以找到对应的源代码行号,进而能够显示当前运行的二进制代码在源代码中的位置。
[0065]本发明实施例提供的程序调试方法,通过向目标芯片发送程序调试指令,在程序停止时,读取目标芯片当前运行的二进制代码程序的PC,判断PC是否在第一映射表内,如果所述PC在所述第一映射表内,则重新向所述目标芯片发送程序调试指令,直到所述目标芯片在程序运行停止时的二进制代码程序的PC不在所述第一映射表内为止,解决了调试过程中程序停止在库函数对应的机器码中的问题,进而能够确定目标芯片运行的二进制机器码与源程序之间的对应关系。
[0066]图2为本发明程序调试方法实施例二的流程图,如图2所示,本实施例的方法可以包括:
[0067]步骤201、接收界面处理装置发送的第一映射表,所述第一映射表为界面处理装置根据编译过程中生成的调试信息生成的,调试信息包括源代码行号与源代码对应的二进制代码的PC之间的对应关系,以及程序指令与当前运行的二进制代码的PC之间的对应关系,其中程序指令与二进制代码是一一对应的。
[0068]在本实施例中,程序调试器接收界面处理装置发送的第一映射表并将其保存,第一映射表是界面处理装置根据编译过程生成的调试信息中分析得到所有库函数在二进制代码中的起始PC和结束PC而生成的,其中编译生成的调试信息中包括了源代码行号与源代码对应的二进制代码的PC之间的对应关系,以及程序指令与当前运行的二进制代码的PC之间的对应关系,其中程序指令与二进制代码是一一对应的,分析程序指令,找到所有库函数对应的二进制代码的PC并将其生成第一映射表。
[0069]步骤202、向目标芯片发送程序调试指令,以使所述目标芯片根据所述程序调试指令运行二进制代码程序。
[0070]在本实施例中,调试指令包括了单步指令、步越指令或停止运行指令,当目标芯片接收到单步指令时,目标芯片执行完一行指令后停止运行,只有再次接收到调试指令才会继续运行程序,当目标芯片接收到步越指令时,根据步越指令不同,运行的程序会执行步入函数或者不步入函数的操作,当正在运行的程序接收到停止运行指令时,该程序会停止运行。
[0071]步骤203、在程序运行停止时,读取所述目标芯片当前运行的二进制代码程序的PCo
[0072]在本实施例中,目标芯片执行完单步指令、步越指令或停止运行指令而停止时,程序调试器读取目标芯片当前运行的二进制代码程序的PC,
[0073]步骤204、判断PC是否在第一映射表内,第一映射表包括库函数与库函数在二进制代码程序中的PC之间的映射关系。
[0074]本实施例中,如果PC在第一映射表内,执行步骤205,否则执行步骤206。
[0075]步骤205、如果PC在第一映射表内,则重新向所述目标芯片发送程序调试指令,直到所述目标芯片在程序运行停止时的二进制代码程序的PC不在第一映射表内
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1