CN107402885A - 一种程序调试方法及装置 - Google Patents
一种程序调试方法及装置 Download PDFInfo
- Publication number
- CN107402885A CN107402885A CN201710651756.6A CN201710651756A CN107402885A CN 107402885 A CN107402885 A CN 107402885A CN 201710651756 A CN201710651756 A CN 201710651756A CN 107402885 A CN107402885 A CN 107402885A
- Authority
- CN
- China
- Prior art keywords
- file
- business process
- symbol table
- source code
- resource
- 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.)
- Pending
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/3644—Software debugging by instrumenting at runtime
-
- 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)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种程序调试方法,包括将业务进程的数据文件以mmap方式映射到调试进程的内存空间;利用BE二进制编辑器,根据所述业务进程的资源文件和符号表文件,对所述数据文件进行解析和调试;其中,所述资源文件和所述符号表文件预先在所述业务进程的编译过程中生成。本申请利用将业务进程的数据文件映射到调试进程中,可以在不影响业务进程执行效率的情况下,依据资源文件和符号表文件对该数据文件进行解析以完成调试。本申请还公开了一种程序调试装置,同样具有上述有益效果。
Description
技术领域
本申请涉及存储技术领域,特别涉及一种程序调试方法及装置。
背景技术
随着信息技术的飞速发展,存储技术领域中的技术革新也是日新月异,悄然改变着人们的生产生活方式。
目前,单一的磁盘存储设备已经逐渐转变为更加复杂的智能化存储设备系统,基于Linux系统进行软件开发,以满足现代社会的生产要求。随着新功能的开发,相关的软件代码逐渐增多,代码复杂程度也随之增大,因而,对程序进行调试以解决程序bug故障原因的难度也大大提升。
现有技术中采用的传统程序调试方法,是基于GDB调试工具采用ptrace方式进行的断点调试,通过设置断点一步步调试程序,因而在调试过程中会影响程序的执行效率。而对于存储设备来说,调试过程中对应用程序执行效率的影响严格来说是不允许的,这会严重影响到系统所提供的存储服务。
由此可见,如何在不降低业务进程的执行效率的基础上,对业务进程的程序进行在线调试,是本领域技术人员亟待解决的技术问题,在存储设备技术开发中具有重要的意义。
发明内容
本申请的目的在于提供一种程序调试方法及装置,以便在调试的过程中可以有效地保障业务进程的执行效率。
为解决上述技术问题,本申请提供一种程序调试方法,包括:
将业务进程的数据文件以mmap方式映射到调试进程的内存空间;
利用BE二进制编辑器,根据所述业务进程的资源文件和符号表文件,对所述数据文件进行解析和调试;
其中,所述资源文件和所述符号表文件预先在所述业务进程的编译过程中生成。
可选地,还包括:
若所述业务进程的源代码被修改,则再次在所述业务进程的编译过程中生成所述资源文件和所述符号表文件。
可选地,所述在所述业务进程的编译过程中生成所述资源文件和所述符号表文件包括:
将BE代码嵌入所述源代码中,用以注释所述源代码中的数据结构;
利用AWK处理工具,抽取所述源代码中的所述BE代码组成所述资源文件;
利用GCC编译器,将嵌入有BE代码的所述源代码编译成可执行文件;
利用readelf处理命令,读取所述可执行文件中的符号信息生成所述符号表文件。
可选地,所述数据文件包括所述业务进程的以下任意一项或者组合:数据段、BSS段、堆栈。
本申请还提供了一种程序调试装置,包括:
映射模块:用于将业务进程的数据文件以mmap方式映射到调试进程的内存空间;
调试模块:用于利用BE二进制编辑器,根据所述业务进程的资源文件和符号表文件,对所述数据文件进行解析和调试;
生成模块:用于预先在所述业务进程的编译过程中,生成所述资源文件和所述符号表文件。
可选地,所述生成模块还用于:
在所述业务进程的源代码被修改后,再次在所述业务进程的编译过程中生成所述资源文件和所述符号表文件。
可选地,所述生成模块具体用于:
将BE代码嵌入所述源代码中,用以注释所述源代码中的数据结构;
利用AWK处理工具,抽取所述源代码中的所述BE代码组成所述资源文件;
利用GCC编译器,将嵌入有BE代码的所述源代码编译成可执行文件;
利用readelf处理命令,读取所述可执行文件中的符号信息生成所述符号表文件。
可选地,所述数据文件包括所述业务进程的以下任意一项或者组合:数据段、BSS段、堆栈。
本申请所提供的程序调试方法中,将业务进程的数据文件以mmap方式映射到调试进程的内存空间;利用BE二进制编辑器,根据所述业务进程的资源文件和符号表文件,对所述数据文件进行解析和调试;其中,所述资源文件和所述符号表文件预先在所述业务进程的编译过程中生成。
可见,相比于现有技术,本申请所提供的程序调试方法中,利用建立mmap映射,使得调试进程可以共享业务进程的内存空间,由此可以根据业务进程的符号表和资源文件,对业务进程的数据文件进行解析和调试,而不会影响到业务进程的执行。由此可见,本申请所提供的程序调试方法,可以有效实现在进行调试的同时,保障业务进程的执行效率。本申请所提供的程序调试装置可以实现上述程序调试方法,同样具有上述有益效果。
附图说明
为了更清楚地说明现有技术和本申请实施例中的技术方案,下面将对现有技术和本申请实施例描述中需要使用的附图作简要的介绍。当然,下面有关本申请实施例的附图描述的仅仅是本申请中的一部分实施例,对于本领域普通技术人员来说,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图,所获得的其他附图也属于本申请的保护范围。
图1为本申请实施例所提供的一种程序调试方法的流程图;
图2为本申请实施例所提供的一种生成业务进程的资源文件和符号表文件的流程图;
图3为本申请实施例所提供的一种程序调试装置的结构框图。
具体实施方式
为了对本申请实施例中的技术方案进行更加清楚、完整地描述,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行介绍。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图1,图1为本申请实施例所提供的一种程序调试方法的流程图,主要包括以下步骤:
步骤101:将业务进程的数据文件以mmap方式映射到调试进程的内存空间。
Mmap是linux提供的共享内存方式,它可以将文件或者其他类型的对象映射到内存,使得不同的进程之间通过映射同一个普通文件而实现共享内存。当文件被映射到进程的内存空间后,进程可以像访问普通内存一样对该文件进行访问。因此,将业务进程的数据文件以mmap方式映射到调试进程的内存空间之后,调试进程就可以像访问普通内存一样对业务进程的数据文件进行访问了。
业务进程存储在其内存映像中的数据文件,包括该业务进程的数据段,BSS段和堆栈,在进行调试修时,可对以上任意一项或组合进行修改。
步骤102:利用BE二进制编辑器,根据业务进程的资源文件和符号表文件,对数据文件进行解析和调试。
资源文件是描述了业务进程的各个符号的数据结构的文件,其一般为*.berc文件。符号表文件则是描述了业务进程的各个符号在内存映像中的地址信息的文件,其一般为*.sym文件。
这里所说的解析的过程,即为当获取到业务进程的资源文件和符号表文件之后,可按照资源文件中符号的数据结构描述,到符号表中同一符号的存储地址去读取该符号的内容的过程。
例如,对于某个符号名为VarA的符号,若其在资源文件中记录的数据结构为4字节int类型,而其在符号表文件中记录的存储地址为0x11111110时,则就可以按照4字节int类型对内存地址0x11111110进行解析,读取4个字节中的内容。则符号VarA就是内存地址0x11111110~0x11111113中的解析内容。
由此可见,解析是按照资源文件的描述对特定内存地址进行解读的过程,进而可以获取业务进程的数据文件的详细信息,以便利用BE(Binary Editor)二进制编辑器进行修改调试。其中,BE是常用的一种二进制编辑器,可以对二进制数据文件进行查看和编辑。
需要说明的是,业务进程的资源文件和符号表文件,是在通过编译获取业务进程的可执行文件的过程中生成的,当要对业务进程的数据文件进行调试时,只需调用该业务进程的资源文件和符号表文件即可。具体的,有关资源文件和符号表文件的生成过程,可以参考图2中所示内容。
请参考图2,图2为本申请所提供的一种生成业务进程的资源文件和符号表文件的流程图。
步骤201:将BE代码嵌入业务进程的源代码中,用以注释所述源代码中的数据结构。
业务进程在运行前,需要编译获取其可执行文件。而为了获取资源文件,可以在编译源代码之前,将BE代码以注释的形式嵌入到业务进程的源文件中,用所述BE代码来注释源代码中的数据结构,以便生成业务进程的资源文件。
步骤202:利用AWK处理工具,抽取所述源代码中的所述BE代码组成资源文件。
AWK作为一种优良的处理文本的编程语言工具,是Linux及Unix环境中现有的功能最强大的数据处理引擎之一。利用AWK处理工具,将业务进程的源代码中的BE代码抽取出来,进而组成业务进程的资源文件。
步骤203:利用GCC编译器,将嵌入有BE代码的源代码编译成可执行文件。
需要说明的是,这里也可以先编译获取可执行文件,然后再生成资源文件,即,先执行步骤203,再执行步骤202。本领域技术人员可以根据实际情况自行选择并设置,本申请实施例对此并不进行限定。
步骤204:利用readelf处理命令,读取所述可执行文件中的变量信息生成符号表文件。
readelf命令用来显示一个或者多个elf格式的可执行文件的信息,并可以通过它的选项来控制具体显示哪些信息。利用readelf处理命令,可以读取所述可执行文件中的变量的地址信息,进而生成该业务进程的符号表文件。
值得一提的是,在对业务进程进行调试时,只要业务进程的可执行文件不需要重新编译,那么业务进程的资源文件和符号表文件也不需要再次生成,依然可以根据原来的资源文件和符号表文件进行调试。但是,一旦业务进程的源代码被修改,则该业务进程势必要重新编译链接生成可执行文件,则需要在再次编译的过程中再次生成该业务进程的资源文件和符号表文件。
可见,本申请实施例所提供的程序调试方法,采用mmap映射的方式,实现了调试进程对业务进程的内存共享,使得在不影响业务进程的情况下,可以依据业务进程的资源文件和符号表文件,对业务进程的数据文件进行解析和修改。其中,资源文件和符号表文件是在业务进程的可执行文件的编译过程中生成的。由此可见,本申请所提供的调试方法可以有效地保障调试过程中业务进程的执行效率。
下面对本申请实施例所提供的程序调试装置进行介绍。下文描述的程序调试装置与上文描述的程序调试方法可相互对应参照。
请参阅图3,图3为本申请所提供的一种程序调试装置的结构框图;包括映射模块301、调试模块302和生成模块303。
映射模块301主要用于将业务进程的数据文件以mmap方式映射到调试进程的内存空间;使得调试进程可以像访问普通内存一样去访问业务进程内存映像中的数据文件,从而以便于调试模块302对该数据文件进行解析和修改。
调试模块302主要用于利用BE二进制编辑器,根据所述业务进程的资源文件和符号表文件,对所述数据文件进行解析和调试。
由于资源文件描述了业务进程的各个符号的数据结构信息,而符号表文件则描述了各个符号在内存映像中的存储地址信息,因此,获取了资源文件和符号表文件之后,便可以了解业务进程的数据文件的详细信息,进而可以进行解析和修改。
生成模块303主要用于在所述业务进程的可执行文件的编译过程中生成所述业务进程的资源文件和符号表文件。
其中,生成模块303具体用于将BE代码嵌入业务进程的源代码中,用以注释所述源代码中的数据结构;然后利用AWK处理工具,抽取所述BE代码组成业务进程的资源文件;并利用GCC编译器,将嵌入有BE代码的源代码编译成可执行文件;最后利用readelf处理命令,读取所述可执行文件中的变量信息,生成业务进程的符号表文件。
值得注意的是,因为当所述业务进程的源代码被修改后,需要重新编译链接得到业务进程的可执行文件,因此,此时也需要重新生成业务进程的资源文件和符号表文件。
可见,本申请所提供的程序调试装置,利用映射模块将业务进程的数据文件映射到调试进程的内存空间,使得调试模块可以在不影响业务进程运行的情况下,依据生成模块预先生成的业务进程的资源文件和符号表文件,对业务进程的数据文件进行解析和修改。由此可见,本申请所提供的程序调试装置,可以在调试的过程中有效地保障业务进程的执行效率。
本申请中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
以上对本申请所提供的技术方案进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
Claims (8)
1.一种程序调试方法,其特征在于,包括:
将业务进程的数据文件以mmap方式映射到调试进程的内存空间;
利用BE二进制编辑器,根据所述业务进程的资源文件和符号表文件,对所述数据文件进行解析和调试;
其中,所述资源文件和所述符号表文件预先在所述业务进程的编译过程中生成。
2.根据权利要求1所述程序调试方法,其特征在于,还包括:
若所述业务进程的源代码被修改,则再次在所述业务进程的编译过程中生成所述资源文件和所述符号表文件。
3.根据权利要求2所述程序调试方法,其特征在于,所述在所述业务进程的编译过程中生成所述资源文件和所述符号表文件包括:
将BE代码嵌入所述源代码中,用以注释所述源代码中的数据结构;
利用AWK处理工具,抽取所述源代码中的所述BE代码组成所述资源文件;
利用GCC编译器,将嵌入有BE代码的所述源代码编译成可执行文件;
利用readelf处理命令,读取所述可执行文件中的符号信息生成所述符号表文件。
4.根据权利要求1至3任一项所述程序调试方法,其特征在于,所述数据文件包括所述业务进程的以下任意一项或者组合:数据段、BSS段、堆栈。
5.一种程序调试装置,其特征在于,包括:
映射模块:用于将业务进程的数据文件以mmap方式映射到调试进程的内存空间;
调试模块:用于利用BE二进制编辑器,根据所述业务进程的资源文件和符号表文件,对所述数据文件进行解析和调试;
生成模块:用于预先在所述业务进程的编译过程中,生成所述资源文件和所述符号表文件。
6.根据权利要求5所述程序调试装置,其特征在于,所述生成模块还用于:
在所述业务进程的源代码被修改后,再次在所述业务进程的编译过程中生成所述资源文件和所述符号表文件。
7.根据权利要求6所述程序调试装置,其特征在于,所述生成模块具体用于:
将BE代码嵌入所述源代码中,用以注释所述源代码中的数据结构;
利用AWK处理工具,抽取所述源代码中的所述BE代码组成所述资源文件;
利用GCC编译器,将嵌入有BE代码的所述源代码编译成可执行文件;
利用readelf处理命令,读取所述可执行文件中的符号信息生成所述符号表文件。
8.根据权利要求5至7任一项所述程序调试装置,其特征在于,所述数据文件包括所述业务进程的以下任意一项或者组合:数据段、BSS段、堆栈。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710651756.6A CN107402885A (zh) | 2017-08-02 | 2017-08-02 | 一种程序调试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710651756.6A CN107402885A (zh) | 2017-08-02 | 2017-08-02 | 一种程序调试方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107402885A true CN107402885A (zh) | 2017-11-28 |
Family
ID=60401862
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710651756.6A Pending CN107402885A (zh) | 2017-08-02 | 2017-08-02 | 一种程序调试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107402885A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110632499A (zh) * | 2019-09-23 | 2019-12-31 | 珠海格力电器股份有限公司 | 基于测试对象的测试向量生成方法及存储介质 |
CN110837562A (zh) * | 2018-08-17 | 2020-02-25 | 阿里巴巴集团控股有限公司 | 案件的处理方法、装置和系统 |
CN111506491A (zh) * | 2019-01-31 | 2020-08-07 | 阿里巴巴集团控股有限公司 | 信息处理方法及装置、存储介质和处理器 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090150420A1 (en) * | 2007-11-05 | 2009-06-11 | Picochip Designs Limited | Generating debug information |
CN102681940A (zh) * | 2012-05-15 | 2012-09-19 | 兰雨晴 | 一种针对Linux操作系统内存管理子系统进行性能测试的方法 |
CN104536870A (zh) * | 2014-12-31 | 2015-04-22 | 北京奇虎科技有限公司 | 一种进程监控方法和装置 |
CN104679660A (zh) * | 2015-03-26 | 2015-06-03 | 成都彬鸿科技有限公司 | 基于符号表的嵌入式系统调试方法和装置 |
CN105677439A (zh) * | 2016-01-14 | 2016-06-15 | 汉柏科技有限公司 | 一种程序符号表的获取方法及系统 |
-
2017
- 2017-08-02 CN CN201710651756.6A patent/CN107402885A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090150420A1 (en) * | 2007-11-05 | 2009-06-11 | Picochip Designs Limited | Generating debug information |
CN102681940A (zh) * | 2012-05-15 | 2012-09-19 | 兰雨晴 | 一种针对Linux操作系统内存管理子系统进行性能测试的方法 |
CN104536870A (zh) * | 2014-12-31 | 2015-04-22 | 北京奇虎科技有限公司 | 一种进程监控方法和装置 |
CN104679660A (zh) * | 2015-03-26 | 2015-06-03 | 成都彬鸿科技有限公司 | 基于符号表的嵌入式系统调试方法和装置 |
CN105677439A (zh) * | 2016-01-14 | 2016-06-15 | 汉柏科技有限公司 | 一种程序符号表的获取方法及系统 |
Non-Patent Citations (1)
Title |
---|
NIENET: "mmap详解", 《HTTPS://WEB.ARCHIVE.ORG/WEB/20130925034231/HTTPS://NIEYONG.GITHUB.IO/WIKI_CPU/MMAP详解.HTML》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110837562A (zh) * | 2018-08-17 | 2020-02-25 | 阿里巴巴集团控股有限公司 | 案件的处理方法、装置和系统 |
CN110837562B (zh) * | 2018-08-17 | 2023-05-02 | 阿里巴巴集团控股有限公司 | 案件的处理方法、装置和系统 |
CN111506491A (zh) * | 2019-01-31 | 2020-08-07 | 阿里巴巴集团控股有限公司 | 信息处理方法及装置、存储介质和处理器 |
CN111506491B (zh) * | 2019-01-31 | 2023-05-02 | 阿里巴巴集团控股有限公司 | 信息处理方法及装置、存储介质和处理器 |
CN110632499A (zh) * | 2019-09-23 | 2019-12-31 | 珠海格力电器股份有限公司 | 基于测试对象的测试向量生成方法及存储介质 |
CN110632499B (zh) * | 2019-09-23 | 2021-04-23 | 珠海格力电器股份有限公司 | 基于测试对象的测试向量生成方法及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7987087B2 (en) | Method and system for improved software localization | |
CN111090433B (zh) | 一种数据处理的方法、装置和存储介质 | |
US8181170B2 (en) | Unwind information for optimized programs | |
US10592220B2 (en) | Metadata-driven binding of converted source code to original source code | |
US9086899B2 (en) | Loading and debugging method and debugging system thereof | |
US20130125098A1 (en) | Transformation of Computer Programs | |
CN112083930B (zh) | 安卓项目编译过程的优化方法 | |
CN107402885A (zh) | 一种程序调试方法及装置 | |
US20130152061A1 (en) | Full fidelity parse tree for programming language processing | |
CN102207884A (zh) | 一种文件编译方法及装置 | |
JP2010515955A (ja) | メインフレームシステムのアプリケーションプログラムを開放型システムに適したアプリケーションプログラムに変換するマイグレイション装置及びその方法 | |
CN112052007A (zh) | 源码调试方法、装置、服务器及存储介质 | |
CN104881396A (zh) | 图形化程序的编译文件形成方法 | |
Waddington et al. | High-fidelity C/C++ code transformation | |
US12045324B2 (en) | Source modification engine | |
JP2009169864A (ja) | コンパイル方法およびコンパイルプログラム | |
CN111880800A (zh) | 应用下载方法与应用下载系统 | |
CN113641361B (zh) | 一种基于Clang的代码隐藏方法及装置 | |
KR101349631B1 (ko) | 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체 | |
CN116028061A (zh) | 字节码文件生成方法、页面跳转方法、装置及计算机设备 | |
CN114115959A (zh) | App热修复方法及其装置、可读存储介质和计算机设备 | |
CN113760291A (zh) | 日志输出的方法和装置 | |
CN112953721A (zh) | 一种ipa文件的解析方法、装置、设备及存储介质 | |
CN112114809A (zh) | 一种程序代码安全防护方法、装置及存储介质 | |
KR101670726B1 (ko) | 중간 언어 코드의 디버깅 정보를 이용한 코드 변환 방법과 그를 위한 장치 및 컴퓨터로 읽을 수 있는 기록매체 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171128 |
|
RJ01 | Rejection of invention patent application after publication |