一种可追溯目标码的生成方法及可追溯目标码生成器的制造方法

文档序号:6632254阅读:329来源:国知局
一种可追溯目标码的生成方法及可追溯目标码生成器的制造方法
【专利摘要】本发明提供一种可追溯目标码的生成方法及可追溯目标码生成器。可追溯目标码的生成方法包括:获取编译环境信息,获取源码版本信息,解析所述编译环境信息和所述源码版本信息,形成预编译信息,将所述预编译信息写入目标码。本发明提供的可追溯目标码的生成方法及可追溯目标码生成器在生成目标码的过程中,提取原始编译脚本的版本信息和编译环境信息,通过预编译的方式将版本信息和编译环境信息植入目标码。因此当目标码运行过程中出现问题时,能够方便从目标码中定位编译过程中源码的版本信息并确定目标码编译时的编译环境信息,能够提高修复目标码的工作效率。
【专利说明】—种可追溯目标码的生成方法及可追溯目标码生成器

【技术领域】
[0001]本发明涉及计算机编译领域,特别是涉及一种可追溯目标码的生成方法及可追溯目标码生成器。

【背景技术】
[0002]随着计算机技术的发展,越来越多的工作能够由计算机完成。人与计算机的交互需要通过计算机能够识别的语言完成。在实现特定功能时,工程师需要编写特定的语言,供计算机识别。但这些语言有高级语言,有低级语言。计算机只能识别最低级的语言。因此,要实现计算机识别语言,需要将高级的语言一步步变成低级的计算机能够直接识别的语言,这个过程,通常表现为将源代码转换为目标码。
[0003]源代码转化的目标码出错后,需要寻找到其对应的源代码的信息,以及源代码转化为目标码时的转化环境,以便有针对性地改正出错的部分,使其功能正常实现。
[0004]但是目前的目标码不含有源代码版本信息和转换环境,在出问题时就无法向源代码进行追溯,导致修复目标码时效率降低。


【发明内容】

[0005]本发明的目的是提供一种可追溯目标码的生成方法及可追溯目标码生成器,实现目标码向源代码的可追溯性,提高修复目标码的效率。
[0006]一种可追溯目标码的生成方法,包括:
[0007]获取编译环境信息;
[0008]获取源码版本信息;
[0009]解析所述编译环境信息和所述源码版本信息,形成预编译信息;
[0010]将所述预编译信息写入目标码。
[0011]优选地,所述获取编译环境信息包括:
[0012]提取环境变量;
[0013]获取所述环境变量包含的编译环境信息。
[0014]优选地,所述源码获取源码版本信息包括:
[0015]提取版本信息变量;
[0016]获取所述版本信息变量包含的所述源码版本信息。
[0017]优选地,所述解析所述编译环境信息和所述源码版本信息,形成预编译信息包括:
[0018]将所述环境变量和所述版本信息变量写入预编译文件;
[0019]对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
[0020]优选地,所述将所述预编译信息写入目标码,包括:
[0021 ]通过链接参数链接所述预编译信息和所述目标码。
[0022]一种可追溯目标码生成器,包括:
[0023]环境信息获取模块,用于获取编译环境信息;
[0024]版本信息获取模块,用于获取源码版本信息;
[0025]与所述环境信息获取模块和所述版本信息获取模块相连的预编译模块,用于解析所述编译环境信息和所述源码版本信息,形成预编译信息;
[0026]与所述预编译模块相连的写入模块,用于将所述预编译信息写入目标码。
[0027]优选地,所述环境信息获取模块包括:
[0028]第一提取单元,用于提取环境变量;
[0029]与所述第一提取单元相连的环境信息获取单元,用于获取所述环境变量包含的所述编译环境信息。
[0030]优选地,所述版本信息获取模块包括:
[0031]第二提取单元,用于提取版本信息变量;
[0032]与所述第二提取单元相连的版本信息获取单元,用于获取所述版本信息变量包含的所述源码版本信息。
[0033]优选地,所述预编译模块包括:
[0034]预编译信息写入单元,用于将所述环境变量和所述版本信息变量写入预编译文件;
[0035]与所述预编译信息写入单元相连的解析单元,用于对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
[0036]优选地,所述写入模块包括:
[0037]链接参数单元,用于链接所述预编译信息和所述目标码。
[0038]因此,本发明具有如下有益效果:
[0039]本发明在生成目标码的过程中,提取原始编译脚本的版本信息和编译环境信息,通过预编译的方式将版本信息和编译环境信息植入目标码。因此当目标码运行过程中出现问题时,能够方便从目标码中定位编译过程中源码的版本信息并确定目标码编译时的编译环境信息。提高了修复目标码的工作效率。

【专利附图】

【附图说明】
[0040]图1为本发明提供的一种可追溯目标码的生成方法流程图;
[0041]图2为本发明提供的另一种可追溯目标码的生成方法流程图;
[0042]图3为本发明提供的一种可追溯目标码的生成器结构示意图;
[0043]图4为本发明提供的可追溯目标码的生成器中一种具体的环境信息获取模块结构示意图;
[0044]图5为本发明提供的可追溯目标码的生成器中一种具体的版本信息获取模块结构示意图;
[0045]图6为本发明提供的可追溯目标码的生成器中一种具体的预编译模块结构示意图;
[0046]图7为本发明提供的可追溯目标码的生成器中一种具体的写入模块结构示意图;
[0047]图8为本发明提供的另一种可追溯目标码的生成器结构示意图。

【具体实施方式】
[0048]本发明的核心是提供一种可追溯目标码的生成方法和可追溯目标码生成器实现目标码出问题时,可以准确定位编译目标码过程中所用到的编译环境和源码版本,提高修复目标码的效率。
[0049]为了使本【技术领域】的人员更好地理解本发明的方案,下面结合附图和【具体实施方式】对本发明作进一步的详细说明。
[0050]本发明公开的一种可追溯目标码的生成方法,参见图1,该方法包括以下步骤:
[0051]S101、获取编译环境信息。
[0052]编译环境信息可以包括编译时使用的操作系统、中间件、数据库、可以唯一标识编译环境信息的编译机器名、标识编译人员信息的编译用户名、以及编译日期和时间。
[0053]S102、获取源码版本信息。
[0054]在需要追溯源码信息时,查看源码版本信息能够知道源码的哪一部分做了改动,更有助于提高修复源码的效率。
[0055]S103、解析所述编译环境信息和所述源码版本信息,形成预编译信息。
[0056]在具体的预编译过程中,往往是对携带有获取编译环境信息命令和获取源码版本信息命令的变量的值进行解析,得到含有编译环境信息和源码版本信息的预编译信息。
[0057]S104、将所述预编译信息写入目标码。
[0058]在本实施方案中,获取编译环境信息和获取源码版本信息之间没有先后顺序。本方案提供的先获取编译环境信息再获取源码版本信息指示一个具体举例。在其他情况下,可以根据需要先获取源码版本信息或者同时获取编译环境信息和源码版本信息。
[0059]本发明在编译源码生成目标码的过程中,提取原始编译脚本的版本信息和编译环境信息,将版本信息和编译环境信息经过预编译形成预编译信息并植入目标码。当目标码运行出错,能够方便从目标码中定位编译过程中源码的版本信息并确定目标码编译时的编译机器、编译用户等信息。这样的准确定位提高了修复目标码的工作效率。而且,在将版本信息和编译环境信息植入目标码的过程中,用到的是原始编译脚本,因而不需要增加其他资源,调用其他模块。
[0060]本发明公开的另一种可追溯目标码的生成方法,参见图2,该方法包括以下步骤:
[0061]S201、提取环境变量。
[0062]在环境变量中,包含了提取编译环境信息的命令。要最终获取编译环境信息,首先需要提取环境变量。
[0063]S202、获取所述环境变量包含的编译环境信息。
[0064]在一个具体场景下,以buildinfo作为环境变量,以C语言为例,获取编译环境信息的方式可以是以下语句:
[0065]buildinfo = "const char zgbbuildinfo [] = Builton' uname-n' by' id-un' at' date+% Y% m% d'' date+% T' 其中 uname-n 可以获取 unix环境下的机器名,id-un是获取编译时所用用户信息,date ate+% Y% m% d是获取编译时的日期,而date+% T则是获取编译时间。在编译过程中会将上述命令执行的结果赋值给buildinfo 变量。
[0066]当然,在不同的情况下,可以根据需要提取相关的编译环境信息。
[0067]S203、提取版本信息变量。
[0068]在这里,版本信息变量中包含了获取源码版本信息的命令,编译过程中会将获取源码版本信息的命令的执行结果赋值给版本信息变量。因而在获取版本信息前,先提取版本信息变量。
[0069]S204、获取所述版本信息变量包含的所述源码版本信息。
[0070]在一个具体场景下,以vers1ninfo作为环境变量,以C语言为例,获取源码版本信息的方式如下述语句:
[0071]vers1ninfo = 〃const char zgbbuildinfo[] = \〃Baseline:'cat$(HOME)/.baseline'\〃〃其中cat$(H0ME)/.baseline就是从baseline文件中获取源码版本信息。
[0072]S205、将所述环境变量和所述版本信息变量写入预编译文件。
[0073]在本实施例中,可以是将buildinfo变量和vers1ninfo变量写入预编译文件中。
[0074]S206、对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
[0075]同样的,以在C语言环境下为例,
[0076]将buildinfo变量和vers1ninfo变量写入缺省info, c文件后,通过cc-c info,c生成info, ο,其中cc-c info, c即为预编译的过程。在预编译的过程中,对buildinfo变量和vers1ninfo变量的值进行解析,得到预编译信息。
[0077]在一个具体的实例中,预编译信息带有“Baseline:PETS_PRBL_V3.0.0 Built onD_P595A1_M by p59new at 2014081816:35:38” 这样的信息。
[0078]这里面,PETS_PRBL_V3.0.0即是源码基线,包含确定的源码版本信息,D_P595A1_M是机器名,p59new是编译用户名,20140818为编译日期,16:35:38为编译时间。
[0079]这样,在预编译信息中就包含了所需的编译环境信息和源码版本信息。当然,在不同的情况下,具体的信息是不同的。在提取信息时,也可以根据需要提取。
[0080]S207、通过链接参数链接所述预编译信息和所述目标码。
[0081]利用不同的编译器的链接参数,将预编译信息与目标码链接,实现预编译信息的植入。
[0082]在具体的实例中,仍以C语言环境为例,编译器cc的链接参数为:LINKFLAGS=-bkeepfile:1nfo, o info, ο
[0083]生成目标码bin的方式如下:
[0084]cc-o bin bin.0$ (LINKFLAGS)其中cc命令将info, ο中的信息全部写入目标码bin 中。
[0085]本发明公开的一种可追溯目标码生成器,参见图3,包括以下部分:环境信息获取模块10,用于获取编译环境信息。
[0086]版本信息获取模块20,用于获取源码版本信息。
[0087]与所述环境信息获取模块10和所述版本信息获取模块20相连的预编译模块30,用于解析所述编译环境信息和所述源码版本信息,形成预编译信息。
[0088]与所述预编译模块30相连的写入模块40,用于将所述预编译信息写入目标码。
[0089]本发明提供的可追溯目标码生成器,由环境信息获取模块获取编译环境信息,由版本信息模块获取源码版本信息。预编译模块将环境信息模块获取的编译环境信息和版本信息模块获取的源码版本信息进行解析并形成预编译信息。最后写入模块将预编译信息植入目标码。这样目标码中就带有编译时的源码版本信息和编译环境信息,包括编译机器、编译用户、编译时间等。一旦目标码出现问题时,可以准确定位,减少修复目标码的时间,提高效率。
[0090]在本发明公开的另一种可追溯目标码生成器中,参见图4,环境信息获取模块10包括第一提取单元11,用于提取环境变量。
[0091]与所述第一提取单元11相连的环境信息获取单元12,用于获取所述环境变量包含的所述编译环境信息。
[0092]具体的工作原理请参见可追溯目标码的生成方法实施例中步骤S201和步骤S202的表述,此处不再赘述。
[0093]在本发明公开的另一种可追溯目标码生成器中,参见图5,版本信息获取模块20包括第二提取单元21,用于提取版本信息变量。
[0094]与所述第二提取单元21相连的版本信息获取单元22,用于获取所述版本信息变量包含的所述源码版本信息。
[0095]具体的工作原理请参见可追溯目标码的生成方法实施例中步骤S203和步骤S204的表述,此处不再赘述。
[0096]在本发明公开的另一种可追溯目标码生成器中,参见图6,预编译模块30包括预编译信息写入单元31,用于将所述环境变量和所述版本信息变量写入预编译文件。
[0097]与所述预编译信息写入单元31相连的解析单元32,用于对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
[0098]具体的工作原理请参见可追溯目标码的生成方法实施例中步骤S205和步骤S206的表述,此处不再赘述。
[0099]在本发明公开的另一种可追溯目标码生成器中,参见图7,写入模块40包括链接参数单元41,用于链接预编译信息和目标码。
[0100]具体的工作原理请参见可追溯目标码的生成方法实施例中步骤S207的表述,此处不再赘述。
[0101]本发明公开的另一种可追溯目标码生成器,参见图8,包括以下部分:
[0102]第一提取单元11,用于提取环境变量。
[0103]与所述第一提取单元11相连的环境信息获取单元12,用于获取所述环境变量包含的所述编译环境信息。
[0104]第二提取单元21,用于提取版本信息变量。
[0105]与所述第二提取单元21相连的版本信息获取单元22,用于获取所述版本信息变量包含的所述源码版本信息。
[0106]与所述环境信息获取单元12相连且与所述版本信息获取单元22相连的预编译信息写入单元31,用于将所述环境变量和所述版本信息变量写入预编译文件。
[0107]与所述预编译信息写入单元31相连的解析单元32,用于对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
[0108]与解析单元32相连的链接参数单元41,用于链接所述预编译信息和所述目标码。
[0109]具体的,本发明提供的可追溯目标码生成器的实施方案中各组成部分的工作原理请参见可追溯目标码的生成方法实施方案,此处不再赘述。
[0110]以上对本发明所提供的可追溯目标码的生成方法及可追溯目标码生成器进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的核心思想。应当指出,对于本【技术领域】的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
【权利要求】
1.一种可追溯目标码的生成方法,其特征在于,包括: 获取编译环境信息; 获取源码版本信息; 解析所述编译环境信息和所述源码版本信息,形成预编译信息; 将所述预编译信息写入目标码。
2.如权利要求1所述的可追溯目标码的生成方法,其特征在于,所述获取编译环境信息包括: 提取环境变量; 获取所述环境变量包含的编译环境信息。
3.如权利要求1所述的可追溯目标码的生成方法,其特征在于,所述源码获取源码版本信息包括: 提取版本信息变量; 获取所述版本信息变量包含的所述源码版本信息。
4.如权利要求1所述的可追溯目标码的生成方法,其特征在于,所述解析所述编译环境信息和所述源码版本信息,形成预编译信息包括: 将所述环境变量和所述版本信息变量写入预编译文件; 对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信肩、O
5.如权利要求1所述的可追溯目标码的生成方法,其特征在于,所述将所述预编译信息写入目标码,包括: 通过链接参数链接所述预编译信息和所述目标码。
6.一种可追溯目标码生成器,其特征在于,包括: 环境信息获取模块,用于获取编译环境信息; 版本信息获取模块,用于获取源码版本信息; 与所述环境信息获取模块和所述版本信息获取模块相连的预编译模块,用于解析所述编译环境信息和所述源码版本信息,形成预编译信息; 与所述预编译模块相连的写入模块,用于将所述预编译信息写入目标码。
7.如权利要求6所述的可追溯目标码生成器,其特征在于,所述环境信息获取模块包括: 第一提取单元,用于提取环境变量; 与所述第一提取单元相连的环境信息获取单元,用于获取所述环境变量包含的所述编译环境信息。
8.如权利要求6所述的可追溯目标码生成器,其特征在于,所述版本信息获取模块包括: 第二提取单元,用于提取版本信息变量; 与所述第二提取单元相连的版本信息获取单元,用于获取所述版本信息变量包含的所述源码版本信息。
9.如权利要求6所述的可追溯目标码生成器,其特征在于,所述预编译模块包括: 预编译信息写入单元,用于将所述环境变量和所述版本信息变量写入预编译文件; 与所述预编译信息写入单元相连的解析单元,用于对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
10.如权利要求6所述的可追溯目标码生成器,其特征在于,所述写入模块包括: 链接参数单元,用于链接所述预编译信息和所述目标码。
【文档编号】G06F21/57GK104331665SQ201410594660
【公开日】2015年2月4日 申请日期:2014年10月29日 优先权日:2014年10月29日
【发明者】孙绍伟, 李明 申请人:中国农业银行股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1