CN108614704A - 代码编译方法及装置 - Google Patents
代码编译方法及装置 Download PDFInfo
- Publication number
- CN108614704A CN108614704A CN201710031295.2A CN201710031295A CN108614704A CN 108614704 A CN108614704 A CN 108614704A CN 201710031295 A CN201710031295 A CN 201710031295A CN 108614704 A CN108614704 A CN 108614704A
- Authority
- CN
- China
- Prior art keywords
- code
- debugging
- program
- source program
- debugging 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 238000012360 testing method Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 16
- 238000012986 modification Methods 0.000 description 13
- 230000004048 modification Effects 0.000 description 13
- 238000003860 storage Methods 0.000 description 13
- 230000015654 memory Effects 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 238000013519 translation Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000012856 packing Methods 0.000 description 3
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/362—Debugging of software
- G06F11/3624—Debugging of software by performing operations on the source code, e.g. via a compiler
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明是关于一种代码编译方法,属于软件开发技术领域。所述方法包括:接收针对源程序的编译指令;若所述编译指令指示编译获得的目标程序用于调试,则获取调试代码设置规则;根据所述调试代码设置规则设置调试代码;对设置有所述调试代码的所述源程序进行编译。该方法由开发人员预先设置好调试代码设置规则,当开发人员需要对源程序进行调试时,自动根据调试代码设置规则在源程序的代码中设置调试代码并编译,当开发人员需要对源程序进行反复修改和调试时,不需要开发人员每一轮调试之前在源程序中手动设置调试代码,极大的简化了开发人员的调试代码设置步骤,减少了调试时间,提高软件程序的调试效率。
Description
技术领域
本发明涉及软件开发技术领域,特别涉及一种代码编译方法及装置。
背景技术
代码编译是将高级语言编写的源程序的代码翻译成计算机可识别的二进制语言的代码的过程。一个软件程序的开发过程中,通常需要经过多轮修改、编译和调试。比如,开发人员编写完成软件程序的源程序后,对源程序进行首轮修改、编译和调试,首轮调试通过后,将通过调试的源程序提交给测试人员进行测试,测试人员将测试发现的问题反馈给开发人员,由开发人员对源程序进行第二轮修改、编译和调试,并在第二轮调试通过后,将通过调试的源程序再次提交给测试人员进行测试,以此反复,直至通过测试人员的测试。
在现有技术中,对软件程序的每一轮修改、编译和调试过程可以如下:开发人员在源程序中人工设置调试代码,获得用于调试的源程序,并通过编译器对用于调试的源程序进行编译,获得用于调试的目标程序,开发人员通过调试器运行目标程序,并根据目标程序的运行情况检查目标程序是否存在错误,若目标程序存在错误,则开发人员对用于调试的源程序的代码进行修改,并对修改后的用于调试的源程序的代码编译后进行调试,直至编译获得的目标程序的试运行不存在错误,本轮修改和调试结束。之后开发人员将本轮最后修改的源程序的代码中的调试代码删除,对删除调试代码后的源程序的代码进行编译,获得供测试人员测试使用的目标程序。
在对软件程序的每一轮修改和调试中,开发人员都需要在软件程序的源程序中设置调试代码,而人工设置调试代码的过程需要消耗开发人员大量的时间,影响软件的开发效率。
发明内容
为了解决现有技术中对软件程序的每一轮修改和调试中,开发人员都需要在软件程序的源程序中设置调试代码,从而消耗开发人员大量的时间,影响软件的开发效率的问题,本发明实施例提供了一种代码编译方法及装置,技术方案如下:
第一方面,提供了一种代码编译方法,所述方法包括:
接收针对源程序的编译指令,所述编译指令指示编译获得的目标程序是否用于调试;
若所述编译指令指示编译获得的目标程序用于调试,则获取调试代码设置规则,所述调试代码设置规则中包含目标代码以及调试代码;
根据所述调试代码设置规则,对应所述源程序中包含的所述目标代码设置调试代码;
对设置有所述调试代码的所述源程序进行编译,获得目标程序。
第二方面,提供了一种代码编译装置,所述装置包括:
指令接收模块,用于接收针对源程序的编译指令,所述编译指令指示编译获得的目标程序是否用于调试;
规则获取模块,用于若所述编译指令指示编译获得的目标程序用于调试,则获取调试代码设置规则,所述调试代码设置规则中包含目标代码以及调试代码;
代码设置模块,用于根据所述调试代码设置规则,对应所述源程序中包含的所述目标代码设置所述调试代码;
编译模块,用于对设置有所述调试代码的所述源程序进行编译,获得目标程序。
本发明实施例提供的技术方案可以包括以下有益效果:
由开发人员预先设置好调试代码设置规则,当开发人员需要对源程序进行调试时,自动根据调试代码设置规则在源程序的代码中设置调试代码并编译,当开发人员需要对源程序进行反复修改和调试时,不需要开发人员每一轮调试之前在源程序中手动设置调试代码,极大的简化了开发人员的调试代码设置步骤,减少了调试时间,提高软件程序的调试效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是本发明实施例所示方案的实现流程示意图;
图2是根据一示例性实施例示出的一种代码编译方法的流程图;
图3是图2所示实施例涉及的一种设置界面示意图;
图4是图2所示实施例涉及的一种调试代码编译示意图;
图5是图2所示实施例涉及的另一种调试代码编译示意图;
图6是根据一示例性实施例示出的一种代码编译方法的流程图;
图7是图6所示实施例涉及的一种调试标记示意图;
图8是图6所示实施例涉及的方案的实现流程示意图;
图9是根据一示例性实施例示出的一种代码编译装置的框图;
图10是根据一示例性实施例提供的电子设备的结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
本发明所示的方案可以应用于安装有软件开发工具的电子设备中。比如,该电子设备可以是个人电脑、笔记本电脑或者工作站等开发设备。
在本发明所示的方案中,开发人员通过软件开发工具编写完成某个源程序之后,可以基于是否对源程序编译后的目标程序进行调试来发出不同的编译指令,若软件开发工具接收到的编译指令指示需要对目标程序进行调试,则软件开发工具可以在源程序的代码中自动设置调试代码,并对设置有调试代码的源程序的代码进行编译,以便开发人员对编译获得的目标程序进行调试;反之,若软件开发工具接收到的编译指令指示不对目标程序进行调试,则软件开发工具可以对源程序的代码不做改动,直接进行编译。
具体的,请参考图1,其示出了本发明所示方案的实现流程示意图。如图1所示,开发人员可以预先编写或设置一系列的调试代码设置规则,开发人员编写或修改完源程序的代码后,在对源程序进行编译时,软件开发工具获取编译指令,根据编译指令选择对源程序执行普通编译或调试编译。当执行普通编译时,软件开发工具直接将源程序的代码由高级语言翻译成二进制语言,获得目标代码1;当执行调试编译时,软件开发工具可以获取预先设置的调试代码设置规则,并按照调试代码设置规则在源程序的代码中设置调试代码,并将设置有调试代码的源程序的代码由高级语言翻译成二进制语言,获得目标代码2。
本发明所示的方案,可以由开发人员预先设置好调试代码设置规则,当需要对源程序进行调试时,自动根据调试代码设置规则在源程序的代码中设置调试代码并编译,当开发人员需要对源程序进行反复修改和调试时,不需要开发人员每一轮调试之前在源程序中手动设置调试代码,极大的简化了开发人员的调试代码设置步骤,减少了调试时间,提高软件程序的调试效率。
图2是根据一示例性实施例示出的一种代码编译方法的流程图,该方法可以用于运行有软件开发工具的电子设备中。如图2所示,该代码编译方法可以包括如下几个步骤:
步骤201,接收开发人员设置的调试代码设置规则。
本发明实施例所示的方案可以由软件开发工具来实现,该软件开发工具可以类似于NPM(node package manager,node的包管理器)。开发人员可以通过命令提示符的方式控制软件开发工具的启动及运行。
其中,调试代码可以分为两种,一种是直接在源程序的代码中插入的调试代码,比如用于显示带有一条指定消息和一个OK按钮的警告框的alert语句,或者用于设置断点的debugger语句等,此类调试代码通常不需要对源程序中的代码做改动,只需要在源程序的代码中的目标代码的指定位置插入即可;另一种是需要将源程序的代码中的目标代码进行置换的调试代码,比如,源程序的代码中存在某一个参数,比如一个文件地址,该文件地址是在正式的发布环境中使用的地址,而调试过程通常离线进行,在程序调试时无法对该文件地址进行访问。为了在调试时正常执行,需要将该文件地址替换为一个可以在调试时访问的地址,则该源程序的代码中的文件地址即为目标代码,而用于替换的可以在调试时访问的地址则为调试代码。在本发明实施例中,上述调试代码设置规则中可以包含目标代码和调试代码,而调试代码的设置方式可以包括插入和替换。
可选的,开发人员可以在软件开发工具的配置文件中设置上述调试代码设置规则,比如,开发人员在使用软件开发工具开发一个源程序的过程中,可以在该软件开发工具的配置文件中手动编写调试代码设置规则并保存。
可选的,当开发人员在软件开发工具的配置文件中手动编写调试代码设置规则时,可以通过正则表达式的方式来编写该调试代码设置规则。
比如,当开发人员设置的调试代码设置规则是在目标代码的指定位置插入调试代码时,该调试代码设置规则可以如下:
其中,上述指定位置可以是预先设置好的位置,比如,该指定位置可以是目标代码之前,或者,该指定位置也可以是目标代码之后。
或者,当开发人员设置的调试代码设置规则是将目标代码替换为调试代码时,该调试代码设置规则可以如下:
可选的,软件开发工具也可以提供调试代码设置规则的设置界面,由开发人员可以在该设置界面中设置上述调试代码设置规则,软件开发工具在配置文件中添加开发人员设置的调试代码设置规则。
比如,请参考图3,其示出了本发明实施例涉及的一种设置界面示意图,其中,开发人员可以通过命令提示符启动设置界面30,或者,软件开发工具的界面中也可以提供设置入口,开发人员通过点击该设置入口打开该设置界面30。如图3所示,该设置界面30中可以包含3个设置项或输入框,分别为设置方式选项301、目标代码输入框302以及调试代码输入框303。其中,开发人员可以通过设置方式选项301选择“插入”或者“替换”,并在目标代码输入框302中输入目标代码,并在调试代码输入框303中输入调试代码,开发人员点击设置界面30中的确定按钮304之后,软件开发工具即根据开发人员设置或输入的内容自动生成调试代码设置规则,并保存至软件开发工具的配置文件中。
可选的,软件开发工具还可以向开发人员展示规则管理界面,开发人员通过该规则管理界面发出对已保存的调试代码设置规则的管理指令,比如删除调试代码设置规则,或者修改调试代码设置规则等。
开发人员对同一个软件程序的代码进行多轮修改、编译以及调试的过程中,每一轮修改和调试时在源程序中设置的调试代码绝大多数是相同的,因此,本发明实施例所示的方案中,开发人员调试某个软件程序时,只需要在第一次调试之前设置好调试代码设置规则,后续多轮调试过程中如果需要对调试代码做小的调整时,只需要在设置好的调试代码设置规则中进行修改即可,不需要在每一轮修改和调试时都设置完整的调试代码设置规则。
步骤202,接收针对源程序的编译指令。
其中,该编译指令指示编译获得的目标程序是否用于调试。
本发明实施例中,开发人员可以通过命令提示符的方式向软件开发工具发送编译指令。
比如,开发人员编写或者修改完一个源程序后,若想要对该源程序进行调试,可以通过命令提示符“qbt b--dev”向软件开发工具发出调试编译的编译指令,若开发人员不想对该源程序进行调试,则可以通过命令提示符“qbt b”向软件开发工具发出普通编译的编译指令。
步骤203,若该编译指令指示编译获得的目标程序用于调试,则获取调试代码设置规则。
当开发人员输入的命令提示符为“qbt b--dev”时,软件开发工具可以确定对该源程序进行编译获得的目标程序用于调试,此时,软件开发工具可以从配置文件中获取上述调试代码设置规则。
可选的,软件开发工具在获取调试代码设置规则时,可以首先获取该源程序的程序名,并从预先设置的配置文件中查询与该程序名相对应的该调试代码设置规则。
在实际应用中,开发人员有可能会同时开发多个源程序,且该多个源程序中可能同时存在相同的目标代码,而在对多个源程序进行调试时,对不同的源程序中的相同目标代码的处理方式也可能不同。比如,在源程序1中,需要将该目标代码替换为调试代码,而在源程序2中,可能需要在该目标代码的指定位置插入调试代码,在源程序3中,又可能不需要对该目标代码做任何处理,如果对所有的源程序都使用相同的调试代码设置规则,则可能会导致调试代码设置错误。
为了避免上述情形,在本发明实施例中,开发人员在设置调试代码设置规则时,可以配置该调试代码设置规则对哪些源程序生效。具体的,开发人员在设置某个调试代码设置规则时,可以配置该调试代码设置规则相对应的源程序的程序名,比如,当开发人员在软件开发工具的配置文件中手动编写调试代码设置规则时,可以将该调试代码设置规则相对应的源程序的程序名直接编写在该配置文件中,并通过预定格式与该调试代码设置规则相关联。或者,当开发人员在设置界面中设置上述调试代码设置规则时,该设置界面中还可以包含一个程序名设置选项,开发人员可以通过该程序名设置选线选择或输入该调试代码设置规则对应的程序名,由软件开发工具建立该调试代码设置规则与该程序名之间的关联关系。在获取调试代码设置规则时,软件开发工具可以获取当前待编译的源程序的程序名,并根据获取到的程序名查询对应的调试代码设置规则。
步骤204,根据该调试代码设置规则在该源程序中设置调试代码。
在本发明实施例中,调试代码设置规则中可以包含目标代码以及调试代码,软件开发工具可以根据调试代码设置规则,对应源程序中包含的目标代码设置调试代码。
可选的,软件开发工具可以在该源程序中匹配该目标代码;若成功匹配到该目标代码,则将该目标代码替换为该调试代码,或者,对应在该目标代码的指定位置插入该调试代码。
在设置调试代码时,软件开发工具可以在源程序的代码中匹配目标代码,如果成功匹配到目标代码,则当该调试代码设置规则的设置方式为插入时,在该源程序中的目标代码的指定位置处插入调试代码,当该调试代码设置规则的设置方式为替换时,将该目标代码替换为调试代码。
可选的,软件开发工具在根据该调试代码设置规则在该源程序中设置调试代码时,还可以输出调试代码设置日志,以指示具体的设置位置和设置结果。比如,软件开发工具的设置日志可以如下:
其中,上述设置日志表示软件开发工具将文件app.xxcbd.index.js的第62行中的目标代码1替换为调试代码1,将文件app.yycbd.index.js的第81行中的目标代码2替换为调试代码2,并将文件app.yycbd.index.js的第143行中的目标代码3替换为调试代码3。
步骤205,对设置有该调试代码的源程序进行编译,获得目标程序。
软件开发工具将设置了调试代码后的源程序的代码由高级语言翻译成计算机可执行的二进制语言。
在本发明所示的方案中,软件开发工具可以在执行完成上述步骤204之后,再执行上述步骤205。比如,软件开发工具可以在源程序中匹配目标代码,将匹配到的目标代码替换为调试代码,获得设置了调试代码的源程序的完整代码,再从该完整代码的第一行开始,对该设置了调试代码的源程序的完整代码进行逐行编译。
可选的,软件开发工具也可以同步执行步骤204和步骤205。比如,软件开发工具对源程序的代码进行逐行编译,同时在源程序的待编译的代码中匹配目标代码,并在编译到目标代码时,按照调试代码设置规则所对应的设置方式,对应目标代码插入调试代码,或者,将目标代码替换为调试代码,并对插入或者替换的调试代码进行编译。
具体的,请参考图4和图5,其中,图4示出了本发明实施例涉及的一种调试代码编译示意图,图5示出了本发明实施例涉及的另一种调试代码编译示意图。在图4和图5中,src.js为源程序的代码文件(高级语言),build.js为目标程序的代码文件(二进制语言)。在图4中,调试代码设置规则所对应的设置方式为替换,在执行调试编译时,软件开发工具编译到src.js中的目标代码时,将目标代码替换为调试代码后,对调试代码进行编译,编译后的build.js中包含调试代码。在图5中,调试代码设置规则所对应的设置方式为插入,在执行调试编译时,软件开发工具编译到src.js中的目标代码时,在目标代码之前插入调试代码,并对插入的调试代码以及调试代码之后的目标代码进行编译,编译后的build.js中包含调试代码和目标代码。
步骤206,若该编译指令指示对该源程序进行编译获得的目标程序不用于调试,则对该源程序进行编译,获得目标程序。
当开发人员输入的命令提示符为“qbt b”时,软件开发工具可以确定对该源程序进行编译获得的目标程序不用于调试,此时,软件开发工具可以直接将该源程序的代码由高级语言翻译成计算机可执行的二进制语言。
综上所述,本发明实施例所示的方法,由开发人员预先设置好调试代码设置规则,当开发人员需要对源程序进行调试时,自动根据调试代码设置规则在源程序的代码中设置调试代码并编译,当开发人员需要对源程序进行反复修改和调试时,不需要开发人员每一轮调试之前在源程序中手动设置调试代码,极大的简化了开发人员的调试代码设置步骤,减少了调试时间,提高软件程序的调试效率。
由于在用于调试的目标程序中包含有上述调试代码,而调试代码有可能会对目标程序的正常运行造成影响。比如,以上述调试代码设置规则的设置方式为替换为例,若源程序的代码中的目标代码是正式的发布环境中使用的文件地址,而调试代码是调试时访问的地址,则在将目标代码替换为调试代码并编译后,若直接将编译获得的目标程序误打包或误发布,则在测试人员基于正式的发布环境对目标程序继续测试,或者在用户使用该目标程序时,该调试代码对应的地址可能无法被访问,从而导致程序出错。为了避免上述情况,在本发明所示的方案中,当目标程序用于调试时,若接收到对该目标程序进行打包或发布的指令,则软件开发工具可以对开发人员发出提示,具体请参见下面图6所示的实施例。
图6是根据一示例性实施例示出的一种代码编译方法的流程图,该方法可以用于运行有软件开发工具的电子设备中。如图6所示,该代码编译方法可以包括如下几个步骤:
步骤601,接收开发人员设置的调试代码设置规则。
步骤602,接收针对源程序的编译指令。
步骤603,若该编译指令指示对该源程序进行编译获得的目标程序用于调试,则获取调试代码设置规则。
步骤604,根据该调试代码设置规则在该源程序中设置调试代码。
步骤605,对设置该调试代码后的该源程序进行编译,获得目标程序。
步骤606,接收到对该目标程序进行打包或发布的指令时,展示提示消息,该提示消息用于提示该目标程序用于调试。
可选的,在本发明所示的方案中,在对设置该调试代码后的源程序进行编译之前,软件开发工具可以在该源程序中,对应该调试代码设置调试标记,在该对设置该调试代码后的源程序进行编译时,可以对设置调试代码和该调试标记的源程序的代码进行编译;在接收到对该目标程序进行打包或发布的指令时,软件开发工具可以展检测该目标程序中是否包含该调试标记,若检测结果为该目标程序中包含该调试标记,则展示该提示消息。
可选的,软件开发工具还可以确定该调试标记在该目标程序中的位置信息,在展示该提示消息时,可以展示包括该位置信息的提示消息。
可选的,上述调试标记可以是一个指定内容的代码注释。比如,请参考图7,其示出了本发明实施例涉及的一种调试标记示意图,其中,build.js为调试编译获得的目标程序,在build.js中,对应调试代码的位置设置有代码注释“//此处存在调试代码”,该代码注释“//此处存在调试代码”即为调试标记。
可选的,本发明实施例所示的方案,还可以对用户人工添加调试代码的目标程序进行提示。具体的,用户在编写或修改软件程序的源程序时,可以在源程序中人工设置调试代码,同时,对应调试代码设置调试标记,软件开发工具对人工设置了调试代码和调试标记的源程序进行编译后,接收到打包或发布编译后的目标程序的指令时,检测到目标程序中包含调试标记,则可以向开发人员展示提示消息,以提示开发人员该目标程序中包含调试代码。
步骤607,若该编译指令指示对该源程序进行编译获得的目标程序不用于调试,则对该源程序进行编译,获得目标程序。
通过上述方案,开发人员在设置调试代码设置规则后,每次调试发现问题后,在源程序的基础上进行修改,后续如果是调试编译,则软件开发工具自动按照调试代码设置规则对修改后的源程序设置调试代码并编译,在若干次调试后,若开发人员确认目标代码通过调试,则在打包或发布该源程序的编译后的代码时,只需要通过普通编译的编译指令指示软件开发工具对最后一次修改的源程序的代码直接进行编译即可,由于开发人员不需要在源程序中直接设置调试代码,在打包或发布时,也就不需要开发人员再删除通过调试的源程序中的调试代码,进一步缩短了调试时间,提高软件程序的调试效率。
另外,本发明实施例中,开发人员只需要编写不包含调试代码的源程序,在修改时,也只需要对不包含调试代码的源程序进行修改,后续通过不同的编译指令控制软件开发工具将源程序编译为用于调试的目标程序(调试程序)或者用于打包或发布的目标程序(正式程序),相对于现有技术中在源程序中人工调试代码并编译获得调试程序,以及将源程序中的调试代码人工删除并编译获得正式程序的方式,本发明所示的方案能够实现调试程序和正式程序的快速切换。
具体的,请参考图8,其示出了本发明所示实施例涉及的方案的实现流程示意图,如图8所示,开发人员可以预先编写或设置一系列的调试代码设置规则,开发人员编写或修改完源程序的代码后,在对源程序进行编译时,软件开发工具获取到编译指令后,根据编译指令选择对源程序执行普通编译或调试编译。当执行普通编译时,软件开发工具直接将源程序的代码由高级语言翻译成二进制语言,获得目标程序1;当执行调试编译时,软件开发工具可以获取预先设置的调试代码设置规则,并按照调试代码设置规则设置调试代码,同时对应调试代码设置调试标记,并将设置了调试代码和调试标记后的源程序的代码由高级语言翻译成二进制语言,获得目标程序2。软件开发工具对源程序执行调试编译后,开发人员对目标程序发出打包或发布的指令,此时,软件开发工具检查该目标程序中是否包含调试标记,若目标程序中包含调试标记(即目标程序2),则软件开发工具确定调试标记在目标程序中的位置信息,并展示提示消息,以提示开发人员该目标程序对应该位置信息处包含有调试代码;若目标程序中不包含调试标记(即目标程序1),则对目标程序执行打包或发布操作。
综上所述,本发明实施例所示的方法,由开发人员预先设置好调试代码设置规则,当开发人员需要对源程序进行调试时,自动根据调试代码设置规则在源程序的代码中设置调试代码并编译,当开发人员需要对源程序进行反复修改和调试时,不需要开发人员每一轮调试之前在源程序中手动设置调试代码,极大的简化了开发人员的调试代码设置步骤,减少了调试时间,提高软件程序的调试效率。
此外,本发明实施例所示的方法,当目标程序用于调试时,若接收到对该目标程序进行打包或发布的指令,则软件开发工具可以展示一个提示消息,以提示开发人员该目标程序是用于调试的程序,不宜打包或发布,避免开发人员将用于调试的目标程序误打包或误发布。
下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
请参考图9,其示出了一示例性实施例示出的一种代码编译装置的框图。该代码编译装置可以通过硬件或者软硬结合的方式实现为电子设备的全部或者部分。该代码编译装置可以包括:
指令接收模块901,用于接收针对源程序的编译指令,所述编译指令指示编译获得的目标程序是否用于调试;
规则获取模块902,用于若所述编译指令指示编译获得的目标程序用于调试,则获取调试代码设置规则,所述调试代码设置规则中包含目标代码以及调试代码;
代码设置模块903,用于根据所述调试代码设置规则,对应所述源程序中包含的所述目标代码设置所述调试代码;
编译模块904,用于对设置有所述调试代码的所述源程序进行编译,获得目标程序。
可选的,所述调试代码设置规则中包含目标代码以及所述调试代码,所述代码设置模块,包括:
匹配单元,用于在所述源程序中匹配所述目标代码;
设置单元,用于若成功匹配到所述目标代码,则将所述目标代码替换为所述调试代码,或者,对应在所述目标代码的指定位置插入所述调试代码。
可选的,所述规则获取模块,包括:
程序名获取单元,用于获取所述源程序的程序名;
查询单元,用于从预先设置的配置文件中查询与所述程序名相对应的所述调试代码设置规则。
可选的,所述装置还包括:
提示模块,用于在接收到对所述目标程序进行打包或发布的指令时,展示提示消息,所述提示消息用于提示所述目标程序中包含调试代码。
可选的,所述装置还包括:
标记模块,用于在所述编译模块对设置有所述调试代码的源程序进行编译之前,对应所述调试代码设置调试标记;
所述编译模块,用于对设置有所述调试标记的所述源程序进行编译;
所述提示模块,用于接收到对所述目标程序进行打包或发布的指令时,检测所述目标程序中是否包含所述调试标记,若检测结果为所述目标程序中包含所述调试标记,则展示所述提示消息。
可选的,所述装置还包括:
位置确定模块,用于确定所述调试标记在所述目标程序中的位置信息;
所述提示模块,用于展示包括所述位置信息的所述提示消息。
综上所述,本发明实施例所示的装置,由开发人员预先设置好调试代码设置规则,当开发人员需要对源程序进行调试时,自动根据调试代码设置规则在源程序的代码中设置调试代码并编译,当开发人员需要对源程序进行反复修改和调试时,不需要开发人员每一轮调试之前在源程序中手动设置调试代码,极大的简化了开发人员的调试代码设置步骤,减少了调试时间,提高软件程序的调试效率。
此外,本发明实施例所示的装置,当目标程序用于调试时,若接收到对该目标程序进行打包或发布的指令,则软件开发工具可以展示一个提示消息,以提示开发人员该目标程序是用于调试的程序,不宜打包或发布,避免开发人员将用于调试的目标程序误打包或误发布。
本发明实施例还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器,上述指令可由电子设备的处理器执行以完成本发明各个实施例所示的代码编译方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
图10是根据一示例性实施例示出的一种电子设备的结构示意图。该电子设备可以实现为本发明上述方案中运行有软件开发工具的设备。所述电子设备1000包括中央处理单元(CPU)1001、包括随机存取存储器(RAM)1002和只读存储器(ROM)1003的系统存储器1004,以及连接系统存储器1004和中央处理单元1001的系统总线1005。所述电子设备1000还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)1006,和用于存储操作系统1013、应用程序1014和其他程序模块1015的大容量存储设备1007。
所述基本输入/输出系统1006包括有用于显示信息的显示器1008和用于用户输入信息的诸如鼠标、键盘之类的输入设备1009。其中所述显示器1008和输入设备1009都通过连接到系统总线1005的输入输出控制器1010连接到中央处理单元1001。所述基本输入/输出系统1006还可以包括输入输出控制器1010以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器1010还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备1007通过连接到系统总线1005的大容量存储控制器(未示出)连接到中央处理单元1001。所述大容量存储设备1007及其相关联的计算机可读介质为电子设备1000提供非易失性存储。也就是说,所述大容量存储设备1007可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1004和大容量存储设备1007可以统称为存储器。
根据本发明的各种实施例,所述电子设备1000还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即电子设备1000可以通过连接在所述系统总线1005上的网络接口单元1011连接到网络1012,或者说,也可以使用网络接口单元1011来连接到其他类型的网络或远程计算机系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,中央处理器1001通过执行该一个或一个以上程序来实现图2或图6所示的代码编译方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (12)
1.一种代码编译方法,其特征在于,所述方法包括:
接收针对源程序的编译指令,所述编译指令指示编译获得的目标程序是否用于调试;
若所述编译指令指示对编译获得的目标程序用于调试,则获取调试代码设置规则,所述调试代码设置规则中包含目标代码以及调试代码;
根据所述调试代码设置规则,对应所述源程序中包含的所述目标代码设置所述调试代码;
对设置有所述调试代码的所述源程序进行编译,获得目标程序。
2.根据权利要求1所述的方法,其特征在于,所述根据所述调试代码设置规则,对应所述源程序中包含的所述目标代码设置所述调试代码,包括:
在所述源程序中匹配所述目标代码;
若成功匹配到所述目标代码,则将所述目标代码替换为所述调试代码,或者,对应在所述目标代码的指定位置插入所述调试代码。
3.根据权利要求1所述的方法,其特征在于,所述获取调试代码设置规则,包括:
获取所述源程序的程序名;
从预先设置的配置文件中查询与所述程序名相对应的所述调试代码设置规则。
4.根据权利要求1至3任一所述的方法,其特征在于,所述方法还包括:
接收到对所述目标程序进行打包或发布的指令时,展示提示消息,所述提示消息用于提示所述目标程序用于调试。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在对设置有所述调试代码的源程序进行编译之前,对应所述调试代码设置调试标记;
所述对设置有所述调试代码的源程序进行编译,包括:
对设置有所述调试标记的所述源程序进行编译;
所述接收到对所述目标程序进行打包或发布的指令时,展示提示消息,包括:
接收到对所述目标程序进行打包或发布的指令时,检测所述目标程序中是否包含所述调试标记,若检测结果为所述目标程序中包含所述调试标记,则展示所述提示消息。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
确定所述调试标记在所述目标程序中的位置信息;
所述展示所述提示消息,包括:
展示包括所述位置信息的所述提示消息。
7.一种代码编译装置,其特征在于,所述装置包括:
指令接收模块,用于接收针对源程序的编译指令,所述编译指令指示编译获得的目标程序是否用于调试;
规则获取模块,用于若所述编译指令指示编译获得的目标程序用于调试,则获取调试代码设置规则,所述调试代码设置规则中包含目标代码以及调试代码;
代码设置模块,用于根据所述调试代码设置规则,对应所述源程序中包含的所述目标代码设置所述调试代码;
编译模块,用于对设置有所述调试代码的所述源程序进行编译,获得目标程序。
8.根据权利要求7所述的装置,其特征在于,所述代码设置模块,包括:
匹配单元,用于在所述源程序中匹配所述目标代码;
设置单元,用于若成功匹配到所述目标代码,则将所述目标代码替换为所述调试代码,或者,对应在所述目标代码的指定位置插入所述调试代码。
9.根据权利要求7所述的装置,其特征在于,所述规则获取模块,包括:
程序名获取单元,用于获取所述源程序的程序名;
查询单元,用于从预先设置的配置文件中查询与所述程序名相对应的所述调试代码设置规则。
10.根据权利要求7至9任一所述的装置,其特征在于,所述装置还包括:
提示模块,用于在接收到对所述目标程序进行打包或发布的指令时,展示提示消息,所述提示消息用于提示所述目标程序中包含调试代码。
11.根据权利要求10所述的装置,其特征在于,所述装置还包括:
标记模块,用于在所述编译模块对设置有所述调试代码的源程序进行编译之前,对应所述调试代码设置调试标记;
所述编译模块,用于对设置有所述调试标记的所述源程序进行编译;
所述提示模块,用于接收到对所述目标程序进行打包或发布的指令时,检测所述目标程序中是否包含所述调试标记,若检测结果为所述目标程序中包含所述调试标记,则展示所述提示消息。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
位置确定模块,用于确定所述调试标记在所述目标程序中的位置信息;
所述提示模块,用于展示包括所述位置信息的所述提示消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710031295.2A CN108614704B (zh) | 2017-01-17 | 2017-01-17 | 代码编译方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710031295.2A CN108614704B (zh) | 2017-01-17 | 2017-01-17 | 代码编译方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108614704A true CN108614704A (zh) | 2018-10-02 |
CN108614704B CN108614704B (zh) | 2021-04-02 |
Family
ID=63658201
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710031295.2A Active CN108614704B (zh) | 2017-01-17 | 2017-01-17 | 代码编译方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108614704B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110888756A (zh) * | 2019-11-19 | 2020-03-17 | 支付宝(杭州)信息技术有限公司 | 一种诊断日志生成方法及装置 |
CN111124378A (zh) * | 2018-10-31 | 2020-05-08 | 北京国双科技有限公司 | 代码生成方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101067798A (zh) * | 2007-06-14 | 2007-11-07 | 华南理工大学 | 一种动态探针方法及其在嵌入式系统中的应用 |
CN101719093A (zh) * | 2009-12-09 | 2010-06-02 | 上海普元信息技术有限责任公司 | 企业Web应用系统中实现跨浏览器Javascript调试的系统及其方法 |
CN101739333A (zh) * | 2008-11-25 | 2010-06-16 | 国际商业机器公司 | 应用程序的调试方法、调试工具及调试装置 |
CN102279789A (zh) * | 2010-06-13 | 2011-12-14 | 三星电子(中国)研发中心 | 生产阶段嵌入式系统的调试系统及其调试方法 |
US20140181786A1 (en) * | 2012-12-20 | 2014-06-26 | International Business Machines Corporation | Generating debugging extension source code utilizing debugging information |
-
2017
- 2017-01-17 CN CN201710031295.2A patent/CN108614704B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101067798A (zh) * | 2007-06-14 | 2007-11-07 | 华南理工大学 | 一种动态探针方法及其在嵌入式系统中的应用 |
CN101739333A (zh) * | 2008-11-25 | 2010-06-16 | 国际商业机器公司 | 应用程序的调试方法、调试工具及调试装置 |
CN101719093A (zh) * | 2009-12-09 | 2010-06-02 | 上海普元信息技术有限责任公司 | 企业Web应用系统中实现跨浏览器Javascript调试的系统及其方法 |
CN102279789A (zh) * | 2010-06-13 | 2011-12-14 | 三星电子(中国)研发中心 | 生产阶段嵌入式系统的调试系统及其调试方法 |
US20140181786A1 (en) * | 2012-12-20 | 2014-06-26 | International Business Machines Corporation | Generating debugging extension source code utilizing debugging information |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111124378A (zh) * | 2018-10-31 | 2020-05-08 | 北京国双科技有限公司 | 代码生成方法和装置 |
CN111124378B (zh) * | 2018-10-31 | 2024-02-13 | 北京国双科技有限公司 | 代码生成方法和装置 |
CN110888756A (zh) * | 2019-11-19 | 2020-03-17 | 支付宝(杭州)信息技术有限公司 | 一种诊断日志生成方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108614704B (zh) | 2021-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220222170A1 (en) | Software development framework for a cloud computing platform | |
CN101802792B (zh) | 用于测试航空器上的系统的操作软件的有效性的自动脚本生成方法及用于实现该方法的设备 | |
US8601436B2 (en) | Simulation-based interface testing automation system and method for robot software components | |
CN1838089B (zh) | 在应用主机环境中执行单元测试的方法和装置 | |
US9632754B2 (en) | Auto generation and linkage of source code to test cases | |
US20170192880A1 (en) | Defect prediction | |
CN108319575B (zh) | 一种页面组件的校验方法、装置、服务器和存储介质 | |
Costa et al. | Pattern based GUI testing for mobile applications | |
US9645911B2 (en) | System and method for debugging firmware/software by generating trace data | |
US20180074944A1 (en) | Test case generator built into data-integration workflow editor | |
US8868976B2 (en) | System-level testcase generation | |
JP2009087354A (ja) | ウェブアプリケーションの自動テスト生成システム及び方法 | |
CN113742215B (zh) | 一种自动配置和调用测试工具进行测试分析的方法及系统 | |
US20190129832A1 (en) | System and method for test data generation for use in model based testing using source code test annotations and constraint solving | |
US20140298290A1 (en) | Identification of code changes using language syntax and changeset data | |
CN104468655A (zh) | 对反向代理软件进行测试的方法及系统 | |
CN107844410A (zh) | 一种分布式集群系统的调试方法和装置 | |
US20100312541A1 (en) | Program test device and program | |
US20080127118A1 (en) | Method and system for dynamic patching of software | |
KR20180061589A (ko) | 소프트웨어 빌드 시스템 및 이를 이용한 소프트웨어 빌드 방법 | |
CN108614704A (zh) | 代码编译方法及装置 | |
US8930765B2 (en) | Systems and methods for feedback driven regression testing | |
Rocha et al. | Hunting Memory Bugs in C Programs with Map2Check: (Competition Contribution) | |
Couch et al. | On observed reproducibility in network configuration management | |
US20140359258A1 (en) | Declarative Configuration Elements |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |