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

文档序号:8258305阅读:454来源:国知局
程序调试方法、装置及系统的制作方法
【技术领域】
[0001]本发明涉及一种程序调试技术,特别涉及一种防止程序停止在库函数中的程序调试方法、装置及系统。
【背景技术】
[0002]C语言调试开发环境包括界面处理装置和硬件调试器部分,其中界面处理装置包括了代码编写、分析、编译和调试等功能,界面处理装置与硬件调试器通过串口或USB等端口相连实现相互通信,硬件调试器连接用户实际应用系统,用于对目标芯片进行实时调试及监控,实现基本的调试命令。
[0003]调试时,硬件调试器提供了运行、单步、停止、断点等功能实现对目标芯片的运行控制,目标芯片中运行的是C编译器产生的二进制机器码,其中二进制机器码包括了用户自己编写的源程序对应的二进制机器码和编译器内部提供的库函数程序对应的二进制机器码,源程序通过调用库函数实现相应的功能,C编译器提供的库函数一般集成在工具链中,不以用户源代码形式出现,当目标芯片执行完单步、步越命令或接收到停止运行命令时,目标芯片停止运行并返回当前的程序计数器(Program counter,简称:PC),界面处理装置根据PC找到所对应的源程序行号信息并显示当前程序运行的源码位置。
[0004]然而,现有技术在执行完单步、步越命令或接收到停止运行命令之后,时常出现无法确定目标芯片运行的二进制机器码与源程序之间的对应关系,不便于用户调试。

【发明内容】

[0005]本发明提供一种程序调试方法、装置及系统,解决了调试过程中程序停止在库函数对应的机器码中的问题,进而能够确定目标芯片运行的二进制机器码与源程序之间的对应关系。
[0006]第一个方面,本发明实施例提供一种程序调试方法,包括:
[0007]向目标芯片发送程序调试指令,以使所述目标芯片根据所述程序调试指令运行二进制代码程序;
[0008]在程序运行停止时,读取所述目标芯片当前运行的二进制代码程序的PC ;
[0009]判断所述PC是否在第一映射表内,所述第一映射表包括库函数与所述库函数在所述二进制代码程序中的PC之间的映射关系;
[0010]如果所述PC在所述第一映射表内,则重新向所述目标芯片发送程序调试指令,直到所述目标芯片在程序运行停止时的二进制代码程序的PC不在所述第一映射表内为止。
[0011]进一步的,所述向目标芯片发送程序调试指令之前,还包括:
[0012]接收界面处理装置发送的所述第一映射表,所述第一映射表为所述界面处理装置根据编译过程中生成的调试信息生成的,所述调试信息包括源代码行号与源代码对应的二进制代码的PC之间的对应关系,以及程序指令与当前运行的二进制代码的PC之间的对应关系,其中所述程序指令与二进制代码一一对应。
[0013]进一步的,还包括:
[0014]如果所述PC不在所述第一映射表内,则向界面处理装置发送所述PC,以使所述界面处理装置根据第二映射表,确定所述PC对应的源代码行号,所述第二映射表包括源代码行号与源代码对应的二进制代码的PC之间的映射关系。
[0015]可选的,在上述所有实施例提供的一种程序调试方法中,所述调试指令包括了单步指令、步越指令或停止运行指令。
[0016]第二个方面,本发明实施例提供一种程序调试方法,包括:
[0017]对源代码进行编译,生成二进制代码和调试信息,所述调试信息包括源代码行号与源代码对应的二进制代码的PC之间的对应关系,以及程序指令与当前运行的二进制代码的PC之间的对应关系,其中程序指令与二进制代码一一对应;
[0018]根据程序指令与当前运行的二进制代码的PC之间的对应关系,确定所述源代码中调用的库函数对应的二进制代码的起始PC和结束PC ;
[0019]根据各个库函数对应的二进制代码的起始PC和结束PC,生成第一映射表,所述第一映射表包括库函数与所述库函数在所述二进制代码程序中的PC之间的映射关系;
[0020]根据源代码行号与源代码对应的二进制代码的PC之间的对应关系,生成第二映射表,所述第二映射表包括源代码行号与源代码对应的二进制代码的PC之间的映射关系。
[0021]进一步的,所述生成第一映射表之后,还包括:
[0022]向程序调试器发送所述第一映射表。
[0023]进一步的,所述向程序调试器发送所述第一映射表之后,还包括:
[0024]接收所述程序调试器发送的PC ;
[0025]根据所述第二映射表,确定所述PC对应的源代码行号。
[0026]第三个方面,本发明实施例提供一种程序调试器,包括:
[0027]第一发送模块,用于向目标芯片发送程序调试指令,以使所述目标芯片根据所述程序调试指令运行二进制代码程序;
[0028]读取模块,用于在程序运行停止时,读取所述目标芯片当前运行的二进制代码程序的PC ;
[0029]判断模块,用于判断所述PC是否在第一映射表内,所述第一映射表包括库函数与所述库函数在所述二进制代码程序中的PC之间的映射关系;
[0030]第一发送模块,还用于如果所述PC在所述第一映射表内,则重新向所述目标芯片发送程序调试指令,直到所述目标芯片在程序运行停止时的二进制代码程序的PC不在所述第一映射表内为止。
[0031]进一步的,所述第一发送模块还包括:
[0032]第一接收单元,用于第一发送模块向目标芯片发送程序调试指令之前,接收界面处理装置发送的所述第一映射表,所述第一映射表为所述界面处理装置根据编译过程中生成的调试信息生成的,所述调试信息包括源代码行号与源代码对应的二进制代码的PC之间的对应关系,以及程序指令与当前运行的二进制代码的PC之间的对应关系,其中所述程序指令与二进制代码一一对应。
[0033]进一步的,还包括:
[0034]第二发送模块,用于如果所述PC不在所述第一映射表内,则向界面处理装置发送所述PC,以使所述界面处理装置根据第二映射表,确定所述PC对应的源代码行号,所述第二映射表包括所述源代码行号与源代码对应的二进制代码的PC之间的映射关系。
[0035]第四个方面,本发明实施例提供一种界面处理装置,包括:
[0036]编译模块,用于对源代码进行编译,生成二进制代码和调试信息,所述调试信息包括源代码行号与源代码对应的二进制代码的PC之间的对应关系,以及程序指令与当前运行的二进制代码的PC之间的对应关系,其中所述程序指令与二进制代码一一对应;
[0037]确定模块,用于根据所述程序指令与当前运行的二进制代码的PC之间的对应关系,确定所述源代码中调用的库函数对应的二进制代码的起始PC和结束PC ;
[0038]第一生成模块,用于根据各个库函数对应的二进制代码的起始PC和结束PC,生成第一映射表,所述第一映射表包括库函数与所述库函数在所述二进制代码程序中的PC之间的映射关系;
[0039]第二生成模块,用于根据源代码行号与源代码对应的二进制代码的PC之间的对应关系,生成第二映射表,所述第二映射表包括源代码行号与源代码对应的二进制代码的PC之间的映射关系。
[0040]进一步的,还包括
[0041]第三发送模块,用于在第一生成模块生成第一映射表之后,向程序调试器发送所述第一映射表。
[0042]进一步的,所述第三发送模块还包括:
[0043]第二接收单元,用于第三模块向程序调试器发送所述第一映射表之后,接收所述程序调试器发送的PC ;
[0044]确定单元,用于根据所述第二映射表,确定所述PC对应的源代码行号。
[0045]第五个方面,本发明实施例提供一种程序调试系统,包括:
[0046]如上第三个方面任一所述的程序调试器和第四个方面的任一所述的界面处理装置。
[0047]本发明实施例提供的程序调试方法、装置及系统,通过向目标芯片发送程序调试指令,在程序停止时,读取目标芯片当前运行的二进制代码程
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1