CN104331665B - 一种可追溯目标码的生成方法及可追溯目标码生成器 - Google Patents
一种可追溯目标码的生成方法及可追溯目标码生成器 Download PDFInfo
- Publication number
- CN104331665B CN104331665B CN201410594660.7A CN201410594660A CN104331665B CN 104331665 B CN104331665 B CN 104331665B CN 201410594660 A CN201410594660 A CN 201410594660A CN 104331665 B CN104331665 B CN 104331665B
- Authority
- CN
- China
- Prior art keywords
- information
- precompile
- version information
- translation
- object code
- 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.)
- Active
Links
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/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
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)
- Stored Programmes (AREA)
Abstract
本发明提供一种可追溯目标码的生成方法及可追溯目标码生成器。可追溯目标码的生成方法包括:获取编译环境信息,获取源码版本信息,解析所述编译环境信息和所述源码版本信息,形成预编译信息,将所述预编译信息写入目标码。本发明提供的可追溯目标码的生成方法及可追溯目标码生成器在生成目标码的过程中,提取原始编译脚本的版本信息和编译环境信息,通过预编译的方式将版本信息和编译环境信息植入目标码。因此当目标码运行过程中出现问题时,能够方便从目标码中定位编译过程中源码的版本信息并确定目标码编译时的编译环境信息,能够提高修复目标码的工作效率。
Description
技术领域
本发明涉及计算机编译领域,特别是涉及一种可追溯目标码的生成方法及可追溯目标码生成器。
背景技术
随着计算机技术的发展,越来越多的工作能够由计算机完成。人与计算机的交互需要通过计算机能够识别的语言完成。在实现特定功能时,工程师需要编写特定的语言,供计算机识别。但这些语言有高级语言,有低级语言。计算机只能识别最低级的语言。因此,要实现计算机识别语言,需要将高级的语言一步步变成低级的计算机能够直接识别的语言,这个过程,通常表现为将源代码转换为目标码。
源代码转化的目标码出错后,需要寻找到其对应的源代码的信息,以及源代码转化为目标码时的转化环境,以便有针对性地改正出错的部分,使其功能正常实现。
但是目前的目标码不含有源代码版本信息和转换环境,在出问题时就无法向源代码进行追溯,导致修复目标码时效率降低。
发明内容
本发明的目的是提供一种可追溯目标码的生成方法及可追溯目标码生成器,实现目标码向源代码的可追溯性,提高修复目标码的效率。
一种可追溯目标码的生成方法,包括:
获取编译环境信息;
获取源码版本信息;
解析所述编译环境信息和所述源码版本信息,形成预编译信息;
将所述预编译信息写入目标码。
优选地,所述获取编译环境信息包括:
提取环境变量;
获取所述环境变量包含的编译环境信息。
优选地,所述源码获取源码版本信息包括:
提取版本信息变量;
获取所述版本信息变量包含的所述源码版本信息。
优选地,所述解析所述编译环境信息和所述源码版本信息,形成预编译信息包括:
将所述环境变量和所述版本信息变量写入预编译文件;
对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
优选地,所述将所述预编译信息写入目标码,包括:
通过链接参数链接所述预编译信息和所述目标码。
一种可追溯目标码生成器,包括:
环境信息获取模块,用于获取编译环境信息;
版本信息获取模块,用于获取源码版本信息;
与所述环境信息获取模块和所述版本信息获取模块相连的预编译模块,用于解析所述编译环境信息和所述源码版本信息,形成预编译信息;
与所述预编译模块相连的写入模块,用于将所述预编译信息写入目标码。
优选地,所述环境信息获取模块包括:
第一提取单元,用于提取环境变量;
与所述第一提取单元相连的环境信息获取单元,用于获取所述环境变量包含的所述编译环境信息。
优选地,所述版本信息获取模块包括:
第二提取单元,用于提取版本信息变量;
与所述第二提取单元相连的版本信息获取单元,用于获取所述版本信息变量包含的所述源码版本信息。
优选地,所述预编译模块包括:
预编译信息写入单元,用于将所述环境变量和所述版本信息变量写入预编译文件;
与所述预编译信息写入单元相连的解析单元,用于对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
优选地,所述写入模块包括:
链接参数单元,用于链接所述预编译信息和所述目标码。
因此,本发明具有如下有益效果:
本发明在生成目标码的过程中,提取原始编译脚本的版本信息和编译环境信息,通过预编译的方式将版本信息和编译环境信息植入目标码。因此当目标码运行过程中出现问题时,能够方便从目标码中定位编译过程中源码的版本信息并确定目标码编译时的编译环境信息。提高了修复目标码的工作效率。
附图说明
图1为本发明提供的一种可追溯目标码的生成方法流程图;
图2为本发明提供的另一种可追溯目标码的生成方法流程图;
图3为本发明提供的一种可追溯目标码的生成器结构示意图;
图4为本发明提供的可追溯目标码的生成器中一种具体的环境信息获取模块结构示意图;
图5为本发明提供的可追溯目标码的生成器中一种具体的版本信息获取模块结构示意图;
图6为本发明提供的可追溯目标码的生成器中一种具体的预编译模块结构示意图;
图7为本发明提供的可追溯目标码的生成器中一种具体的写入模块结构示意图;
图8为本发明提供的另一种可追溯目标码的生成器结构示意图。
具体实施方式
本发明的核心是提供一种可追溯目标码的生成方法和可追溯目标码生成器实现目标码出问题时,可以准确定位编译目标码过程中所用到的编译环境和源码版本,提高修复目标码的效率。
为了使本技术领域的人员更好地理解本发明的方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。
本发明公开的一种可追溯目标码的生成方法,参见图1,该方法包括以下步骤:
S101、获取编译环境信息。
编译环境信息可以包括编译时使用的操作系统、中间件、数据库、可以唯一标识编译环境信息的编译机器名、标识编译人员信息的编译用户名、以及编译日期和时间。
S102、获取源码版本信息。
在需要追溯源码信息时,查看源码版本信息能够知道源码的哪一部分做了改动,更有助于提高修复源码的效率。
S103、解析所述编译环境信息和所述源码版本信息,形成预编译信息。
在具体的预编译过程中,往往是对携带有获取编译环境信息命令和获取源码版本信息命令的变量的值进行解析,得到含有编译环境信息和源码版本信息的预编译信息。
S104、将所述预编译信息写入目标码。
在本实施方案中,获取编译环境信息和获取源码版本信息之间没有先后顺序。本方案提供的先获取编译环境信息再获取源码版本信息指示一个具体举例。在其他情况下,可以根据需要先获取源码版本信息或者同时获取编译环境信息和源码版本信息。
本发明在编译源码生成目标码的过程中,提取原始编译脚本的版本信息和编译环境信息,将版本信息和编译环境信息经过预编译形成预编译信息并植入目标码。当目标码运行出错,能够方便从目标码中定位编译过程中源码的版本信息并确定目标码编译时的编译机器、编译用户等信息。这样的准确定位提高了修复目标码的工作效率。而且,在将版本信息和编译环境信息植入目标码的过程中,用到的是原始编译脚本,因而不需要增加其他资源,调用其他模块。
本发明公开的另一种可追溯目标码的生成方法,参见图2,该方法包括以下步骤:
S201、提取环境变量。
在环境变量中,包含了提取编译环境信息的命令。要最终获取编译环境信息,首先需要提取环境变量。
S202、获取所述环境变量包含的编译环境信息。
在一个具体场景下,以buildinfo作为环境变量,以C语言为例,获取编译环境信息的方式可以是以下语句:
buildinfo="const char zgbbuildinfo[]=\"Built on`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变量。
当然,在不同的情况下,可以根据需要提取相关的编译环境信息。
S203、提取版本信息变量。
在这里,版本信息变量中包含了获取源码版本信息的命令,编译过程中会将获取源码版本信息的命令的执行结果赋值给版本信息变量。因而在获取版本信息前,先提取版本信息变量。
S204、获取所述版本信息变量包含的所述源码版本信息。
在一个具体场景下,以versioninfo作为环境变量,以C语言为例,获取源码版本信息的方式如下述语句:
versioninfo="const char zgbbuildinfo[]=\"Baseline:`cat$(HOME)/.baseline`\""其中cat$(HOME)/.baseline就是从baseline文件中获取源码版本信息。
S205、将所述环境变量和所述版本信息变量写入预编译文件。
在本实施例中,可以是将buildinfo变量和versioninfo变量写入预编译文件中。
S206、对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
同样的,以在C语言环境下为例,
将buildinfo变量和versioninfo变量写入缺省info.c文件后,通过cc-c info.c生成info.o,其中cc-c info.c即为预编译的过程。在预编译的过程中,对buildinfo变量和versioninfo变量的值进行解析,得到预编译信息。
在一个具体的实例中,预编译信息带有“Baseline:PETS_PRBL_V3.0.0 Built onD_P595A1_M by p59new at 2014081816:35:38”这样的信息。
这里面,PETS_PRBL_V3.0.0即是源码基线,包含确定的源码版本信息,D_P595A1_M是机器名,p59new是编译用户名,20140818为编译日期,16:35:38为编译时间。
这样,在预编译信息中就包含了所需的编译环境信息和源码版本信息。当然,在不同的情况下,具体的信息是不同的。在提取信息时,也可以根据需要提取。
S207、通过链接参数链接所述预编译信息和所述目标码。
利用不同的编译器的链接参数,将预编译信息与目标码链接,实现预编译信息的植入。
在具体的实例中,仍以C语言环境为例,编译器cc的链接参数为:LINKFLAGS=-bkeepfile:info.o info.o
生成目标码bin的方式如下:
cc-o bin bin.o$(LINKFLAGS)其中cc命令将info.o中的信息全部写入目标码bin中。
本发明公开的一种可追溯目标码生成器,参见图3,包括以下部分:环境信息获取模块10,用于获取编译环境信息。
版本信息获取模块20,用于获取源码版本信息。
与所述环境信息获取模块10和所述版本信息获取模块20相连的预编译模块30,用于解析所述编译环境信息和所述源码版本信息,形成预编译信息。
与所述预编译模块30相连的写入模块40,用于将所述预编译信息写入目标码。
本发明提供的可追溯目标码生成器,由环境信息获取模块获取编译环境信息,由版本信息模块获取源码版本信息。预编译模块将环境信息模块获取的编译环境信息和版本信息模块获取的源码版本信息进行解析并形成预编译信息。最后写入模块将预编译信息植入目标码。这样目标码中就带有编译时的源码版本信息和编译环境信息,包括编译机器、编译用户、编译时间等。一旦目标码出现问题时,可以准确定位,减少修复目标码的时间,提高效率。
在本发明公开的另一种可追溯目标码生成器中,参见图4,环境信息获取模块10包括第一提取单元11,用于提取环境变量。
与所述第一提取单元11相连的环境信息获取单元12,用于获取所述环境变量包含的所述编译环境信息。
具体的工作原理请参见可追溯目标码的生成方法实施例中步骤S201和步骤S202的表述,此处不再赘述。
在本发明公开的另一种可追溯目标码生成器中,参见图5,版本信息获取模块20包括第二提取单元21,用于提取版本信息变量。
与所述第二提取单元21相连的版本信息获取单元22,用于获取所述版本信息变量包含的所述源码版本信息。
具体的工作原理请参见可追溯目标码的生成方法实施例中步骤S203和步骤S204的表述,此处不再赘述。
在本发明公开的另一种可追溯目标码生成器中,参见图6,预编译模块30包括预编译信息写入单元31,用于将所述环境变量和所述版本信息变量写入预编译文件。
与所述预编译信息写入单元31相连的解析单元32,用于对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
具体的工作原理请参见可追溯目标码的生成方法实施例中步骤S205和步骤S206的表述,此处不再赘述。
在本发明公开的另一种可追溯目标码生成器中,参见图7,写入模块40包括链接参数单元41,用于链接预编译信息和目标码。
具体的工作原理请参见可追溯目标码的生成方法实施例中步骤S207的表述,此处不再赘述。
本发明公开的另一种可追溯目标码生成器,参见图8,包括以下部分:
第一提取单元11,用于提取环境变量。
与所述第一提取单元11相连的环境信息获取单元12,用于获取所述环境变量包含的所述编译环境信息。
第二提取单元21,用于提取版本信息变量。
与所述第二提取单元21相连的版本信息获取单元22,用于获取所述版本信息变量包含的所述源码版本信息。
与所述环境信息获取单元12相连且与所述版本信息获取单元22相连的预编译信息写入单元31,用于将所述环境变量和所述版本信息变量写入预编译文件。
与所述预编译信息写入单元31相连的解析单元32,用于对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息。
与解析单元32相连的链接参数单元41,用于链接所述预编译信息和所述目标码。
具体的,本发明提供的可追溯目标码生成器的实施方案中各组成部分的工作原理请参见可追溯目标码的生成方法实施方案,此处不再赘述。
以上对本发明所提供的可追溯目标码的生成方法及可追溯目标码生成器进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (2)
1.一种可追溯目标码的生成方法,其特征在于,包括:
获取编译环境信息;
获取源码版本信息;
解析所述编译环境信息和所述源码版本信息,形成预编译信息;
将所述预编译信息写入目标码;
其中,所述获取编译环境信息包括:
提取环境变量;
获取所述环境变量包含的编译环境信息;
其中,所述源码获取源码版本信息包括:
提取版本信息变量;
获取所述版本信息变量包含的所述源码版本信息;
其中,所述解析所述编译环境信息和所述源码版本信息,形成预编译信息包括:
将所述环境变量和所述版本信息变量写入预编译文件;
对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息;
其中,所述将所述预编译信息写入目标码,包括:
通过链接参数链接所述预编译信息和所述目标码。
2.一种可追溯目标码生成器,其特征在于,包括:
环境信息获取模块,用于获取编译环境信息;
版本信息获取模块,用于获取源码版本信息;
与所述环境信息获取模块和所述版本信息获取模块相连的预编译模块,用于解析所述编译环境信息和所述源码版本信息,形成预编译信息;
与所述预编译模块相连的写入模块,用于将所述预编译信息写入目标码;
其中,所述环境信息获取模块包括:
第一提取单元,用于提取环境变量;
与所述第一提取单元相连的环境信息获取单元,用于获取所述环境变量包含的所述编译环境信息;
其中,所述版本信息获取模块包括:
第二提取单元,用于提取版本信息变量;
与所述第二提取单元相连的版本信息获取单元,用于获取所述版本信息变量包含的所述源码版本信息;
其中,所述预编译模块包括:
预编译信息写入单元,用于将所述环境变量和所述版本信息变量写入预编译文件;
与所述预编译信息写入单元相连的解析单元,用于对述预编译文件解析,形成含有所述编译环境信息和所述源码版本信息的预编译信息;
其中,所述写入模块包括:
链接参数单元,用于链接所述预编译信息和所述目标码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410594660.7A CN104331665B (zh) | 2014-10-29 | 2014-10-29 | 一种可追溯目标码的生成方法及可追溯目标码生成器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410594660.7A CN104331665B (zh) | 2014-10-29 | 2014-10-29 | 一种可追溯目标码的生成方法及可追溯目标码生成器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104331665A CN104331665A (zh) | 2015-02-04 |
CN104331665B true CN104331665B (zh) | 2017-08-08 |
Family
ID=52406387
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410594660.7A Active CN104331665B (zh) | 2014-10-29 | 2014-10-29 | 一种可追溯目标码的生成方法及可追溯目标码生成器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104331665B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105183507A (zh) * | 2015-08-24 | 2015-12-23 | 汉柏科技有限公司 | 一种应用程序间版本的匹配方法及系统 |
CN107291437A (zh) * | 2016-04-13 | 2017-10-24 | 上海思立微电子科技有限公司 | 发布包版本信息产生方法、装置及终端 |
CN112698864A (zh) * | 2021-01-05 | 2021-04-23 | 潍柴动力股份有限公司 | 源文件版本信息处理方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102135877A (zh) * | 2010-01-27 | 2011-07-27 | 金蝶软件(中国)有限公司 | 自动化构建方法及装置 |
CN102667717A (zh) * | 2009-12-21 | 2012-09-12 | 诺基亚公司 | 用于编译的方法、装置和系统 |
CN103049268A (zh) * | 2012-12-25 | 2013-04-17 | 中国科学院深圳先进技术研究院 | 一种基于Naplet的应用开发管理系统 |
CN103729184A (zh) * | 2013-12-29 | 2014-04-16 | 国云科技股份有限公司 | 一种软件组件组合构建方法 |
CN103970579A (zh) * | 2014-05-29 | 2014-08-06 | 中国银行股份有限公司 | 应用版本部署方法及装置 |
-
2014
- 2014-10-29 CN CN201410594660.7A patent/CN104331665B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102667717A (zh) * | 2009-12-21 | 2012-09-12 | 诺基亚公司 | 用于编译的方法、装置和系统 |
CN102135877A (zh) * | 2010-01-27 | 2011-07-27 | 金蝶软件(中国)有限公司 | 自动化构建方法及装置 |
CN103049268A (zh) * | 2012-12-25 | 2013-04-17 | 中国科学院深圳先进技术研究院 | 一种基于Naplet的应用开发管理系统 |
CN103729184A (zh) * | 2013-12-29 | 2014-04-16 | 国云科技股份有限公司 | 一种软件组件组合构建方法 |
CN103970579A (zh) * | 2014-05-29 | 2014-08-06 | 中国银行股份有限公司 | 应用版本部署方法及装置 |
Non-Patent Citations (1)
Title |
---|
Qt Creator自动使用svn源代码版本号编译;foruok;《网页在线公开:http://blog.csdn.net/foruok/article/details/22665353》;20140331;第1-4页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104331665A (zh) | 2015-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108399064B (zh) | 基于Qt开发的多语言词条生成方法 | |
CN104317589B (zh) | 一种用于加载动态链接库的代码自动生成方法及装置 | |
CN108491199A (zh) | 一种自动生成接口的方法及终端 | |
CN104331665B (zh) | 一种可追溯目标码的生成方法及可追溯目标码生成器 | |
CN105512304A (zh) | 在线生成互联网应用方法和系统集成方法及支撑平台 | |
CN109783195A (zh) | 一种基于容器的智能合约实时调试方法 | |
US20080244541A1 (en) | Code translator and method of automatically translating modeling language code to hardware language code | |
CN105183476B (zh) | 一种跨平台应用程序的构建方法和装置 | |
CN103942086A (zh) | 基于aadl的创建、分析和仿真混成系统模型的方法 | |
CN104657189A (zh) | 混合式动态码编译装置、方法及其服务系统 | |
KR101770292B1 (ko) | 컴퓨터 수행 가능한 모델 역공학 방법 및 장치 | |
CN102830975A (zh) | 一种汇编语言到高级语言的代码转换方法和装置 | |
CN103823793A (zh) | 基于Excel模板的动态报表实现方法 | |
CN105447246A (zh) | 一键生成电气原理图的方法与系统 | |
CN102955740A (zh) | 一种基于Perl的驱动函数和桩函数生成方法 | |
CN102521008B (zh) | 程序编译装置和程序编译方法 | |
CN107450922A (zh) | 安卓中弹幕事件自动注册的方法、存储介质、设备及系统 | |
CN109725896A (zh) | 一种在线编辑python代码的方法以及电子设备 | |
CN103902677A (zh) | 一种跨平台的数据库访问方法 | |
CN110362312A (zh) | 一种适用于多种框架的语法转换编译系统及方法 | |
CN106021242B (zh) | Dwg格式图纸翻译数据回写系统及其回写方法 | |
CN101288072A (zh) | 数据结构的移植和转换 | |
CN103970776A (zh) | 一种创建can分层树的方法和系统 | |
CN106021197B (zh) | Dwg格式文件的翻译系统及翻译方法 | |
CN103885754A (zh) | 一种数据模型自动生成系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |