CN100478914C - 一种交叉集成开发环境中的符号调试方法及*** - Google Patents
一种交叉集成开发环境中的符号调试方法及*** Download PDFInfo
- Publication number
- CN100478914C CN100478914C CNB2007101067013A CN200710106701A CN100478914C CN 100478914 C CN100478914 C CN 100478914C CN B2007101067013 A CNB2007101067013 A CN B2007101067013A CN 200710106701 A CN200710106701 A CN 200710106701A CN 100478914 C CN100478914 C CN 100478914C
- Authority
- CN
- China
- Prior art keywords
- file
- target
- debug
- debugging
- title
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种交叉集成开发环境中的符号调试方法,可满足开发人员对于快速调试的需求,缩短软件开发的周期。所述方法包括以下步骤:(a)主机按照目标机的环境信息对需要在目标机上的运行的源文件进行编译,生成目标可执行文件,所述目标可执行文件包含调试信息和执行体;(b)主机从目标可执行文件中分离出调试信息,并将其拆分为多个调试符号文件及一个包含拆分信息的描述文件,并约定描述文件与所述执行体的对应关系;(c)调试器无负荷启动,根据调试动作对目标机上的执行体进行调试时,查找描述文件,加载需要的符号调试文件进行调试。
Description
技术领域
本发明涉及一种软件集成开发环境中调试方法,特别涉及一种软件交叉集成开发环境中的符号调试方法。
背景技术
交叉集成开发环境是一种在嵌入***软件研制过程中普遍使用的集成工具。随着软件***的日益复杂,软件调试作为重要的纠错手段显得尤为重要,开发人员对于调试的高效性要求也日益突出。
由于软件***的复杂化使得软件的物理大小及所附带的调试信息猛增,传统的开发环境将调试信息一次提供给调试器(debugger),致使调试器因处理过多的信息而效率低下,无法满足开发人员对于快速调试的需求。因此,提供一种快速的调试方法是软件集成开发环境所要解决的技术问题。
发明内容
本发明要解决的技术问题是提供一种交叉集成开发环境中的符号调试方法,可满足开发人员对于快速调试的需求,缩短软件开发的周期。
为了解决上述技术问题,本发明提供了一种交叉集成开发环境中的符号调试方法,包括以下步骤:
(a)主机按照目标机的环境信息对需要在目标机上的运行的源文件进行编译,生成目标可执行文件,所述目标可执行文件包含调试信息和执行体;
(b)主机从目标可执行文件中分离出调试信息,并将其拆分为多个调试符号文件及一个包含拆分信息的描述文件,并约定描述文件与所述执行体的对应关系;
(c)调试器无负荷启动,根据调试动作对目标机上的执行体进行调试时,根据源文件名称或目标调试地址查找描述文件,加载需要的调试符号文件进行调试。
进一步地,所述调试信息是包含变量和函数的信息。
进一步地,在所述步骤(b)中,所述主机按模块将调试信息拆分为多个调试符号文件,每个调试符号文件对应一个或多个源文件。
进一步地,所述描述文件中保存有以下信息及其对应关系:源文件路径和名称,目标可执行文件指令或数据在目标机上的起始位置,目标可执行文件指令或数据在目标机上的结束位置或者长度信息,调试符号文件的路径和名称。
进一步地,当一个调试符号文件中又包含了另一调试符号文件时,所述描述文件中还保存有被包含的调试符号文件的源文件的路径和名称。
进一步地,在所述步骤(c)中,所述调试器根据调试动作对目标机上的执行体进行调试时,根据源文件名称或目标调试地址查找描述文件,得到调试符号文件的路径和名称。
进一步地,调试器可执行的调试动作为以下的一种或几种:设置断点、单步、跟入、跟出、回溯、变量监视。
进一步地,当调试动作为设置断点时,调试器需要根据源文件名称查找描述文件,得到调试符号文件的路径和名称;当调试动作为单步、跟入或跟出时,所述调试器通过局部代码或栈信息找到目标调试地址,根据该地址查找描述文件,得到调试符号文件的路径和名称;当调试动作为变量监视时,通过查找***符号表得到目标调试地址,进而得到调试符号文件的路径和名称;当调试动作为回溯时,所述调试器通过栈信息得到目标调试地址,进而得到调试符号文件的路径和名称。
为了解决上述技术问题,本发明又提供了一种交叉集成开发环境中的符号调试***,包括主机、调试器、目标机,其特征在于,
所述主机,用于按照目标机的环境信息对需要执行于目标机的源文件进行编译生成目标可执行文件,所述目标可执行文件包括调试信息和执行体,并将所述调试信息从所述目标可执行文件中分离出来,拆分为多个调试符号文件及一个包含拆分信息的描述文件,并约定描述文件与所述执行体的对应关系;
所述调试器,用于根据调试动作对目标机上的执行体进行调试,根据源文件名称或目标调试地址,查找描述文件,加载需要的调试符号文件进行调试。
进一步地,所述描述文件中保存有以下信息及其对应关系:源文件路径和名称,目标可执行文件指令或数据在目标机上的起始位置,目标可执行文件指令或数据在目标机上的结束位置或者长度信息,调试符号文件的路径和名称。
与现有技术相比,将本发明的方法应用到实际的交叉集成环境中实施后,使调试器能够运行在高效的状态,实现了高效的软件符号调试,减少了开发人员无谓的等待时间,缩短了软件的开发周期。
附图说明
图1为本发明实施例的符号调试方法流程图;
图2为本发明实施例一种符号调试周期流程图。
具体实施方式
在实际的软件调试中,当前调试总是一种具有局部性特征的活动,以这个特征为前提条件,本发明以化整为零、动态加载的指导思想,实现调试预处理器策略,最终提高软件调试的效率。所谓化整为零是指将软件执行模块中已有的调试符号信息按照某一准则进行拆分;动态加载的目的在于根据调试的需要来有选择性的加载调试信息到调试器的调试环境。
本发明的具体实施方式与开发环境密切相关,下面以tornado ppc版本、ELF(Executable and Linking Format)目标文件格式及stab调试符号存储格式为参考环境,其他环境可以参照实施。
本实施例交叉集成开发环境中的符号调试***,包括主机(Host机)、调试器、目标机(Target机),其中:
所述主机,用于按照目标机的环境信息对需要执行于目标机的源文件进行编译生成目标可执行文件,所述目标可执行文件包括调试信息和执行体,并将所述调试信息从所述目标可执行文件中分离出来,拆分为多个调试符号文件及一个包含拆分信息的描述文件,并约定描述文件与所述执行体的对应关系;
所述调试器,用于根据调试动作对目标机上的执行体进行调试,根据源文件名称或目标调试地址,查找描述文件,加载需要的调试符号文件进行调试。
调试器可以在Host机上,也可以单独在外。
如图1所示,本实施例的交叉集成开发环境中符号调试方法,包括以下步骤:
步骤110,Host机按照Target机的环境信息对需要在Target机上的运行的源文件进行编译,生成目标可执行文件,所述目标可执行文件包括调试信息和执行体;
目标可执行文件的执行体部分同时保存在Target机上。
步骤120,Host机从目标可执行文件中分离出调试信息,并将其拆分成多个独立的调试符号文件,同时生成一个包含拆分信息的描述文件,并约定描述文件与所述执行体的对应关系;
将调试信息从目标可执行文件中拆分出来是一个后连接器处理的过程,即其执行时机处应在工程已经编译连接生成一个包含调试信息的可执行目标文件之后。
Host机根据目标可执行文件的头信息,找到调试信息存储区,调试信息大都模块化存储,一个模块与一个或多个源文件相对应,以这些模块为单位进行拆分,生成多个分散的调试符号文件(或称调试信息文件)。同时,还生成一个描述文件,对所拆分出来的调试符号文件的对应指令或数据范围加以描述,在描述文件中保存以下信息及其对应关系:源文件路径和名称(当一个调试符号文件中又包含了另一调试符号文件时,还保存有所包括的源文件路径和名称)、目标可执行文件指令或数据在目标机上的起始位置指针和结束位置指针(或者起始位置和长度信息)、调试符号文件的路径和名称。
调试信息主要由调试符号的相关信息组成,调试符号文件是调试信息的载体。Tornado ppc原来的调试信息和运行代码数据统统都在一个文件中(ELF),在本实施例中,将该原始核文件拆为两部分,一是运行体(或称执行体)文件,一是调试信息文件(包括所有变量、函数等信息)。调试信息文件仍是很大的一个文件,再将这个文件拆分开来,原来的这个很大的调试信息文件就从原始核文件中删除了,Target机中仅保存运行体文件。
调试符号信息可按照不同.c划分组织在一起,比如x1.c的调试信息放在x2.c的后面,这些调试信息共同组成了整个ELF文件的调试信息段。但是有的c文件包含了另外的c文件,比如y1.c包括了y2.c(#include),这样y1和y2的调试信息就包含在一个调试符号文件中,所以把这个调试符号文件拆分出来后,对应的源文件就是两个。
步骤130,调试器无负荷启动;
由于在步骤120中已经将目标可执行文件中的调试信息拆分出来,因此调试器可以不分析任何调试信息而快速启动。
步骤140,调试器根据当前的调试动作对目标机上的执行体进行调试时,查找描述文件,动态加载需要的调试符号文件进行调试;
在集成环境中,在调试器实施调试动作前,可以获得一些调试环境信息,通过分析这些信息能够正确的将调试信息范围锁定。进一步的,当用户作了某个调试动作,调试器根据当前的待调试文件名称(即源文件名称——由用户指定)或者一个目标调试地址(执行体文件在目标设备上运行的内存地址)查找描述文件,得到调试符号文件的路径名称。由于执行体文件与后连接阶段生成的描述文件存在约定的路径关系,因此可以对描述文件进行查找,进一步确定应加载给调试器哪个调试符号文件。简言之,通过获得调试环境中的某一条件,源文件名称或目标调试地址,在描述文件中找到相应的调试符号文件加载给调试器,调试器就可以完成当前的调试动作。
所述目标调试地址是用户直接或间接告知的,比如用户需要在某个地址上设置断点,这是直接方式,或者用户需要对某个变量跟踪,用户给出的是个符号,通过查找符号对应的目标地址获取该地址,这是间接方式。
调试器可执行的调试动作包括以下的一种或几种:设置断点(setbreakpoint)、单步(step)、跟入(step into)、跟出(step out)、回溯(backtrace)和变量监视(add watch)等。
设置断点,此功能是从集成环境获得当前操作的文件名称,通过描述文件找到相对应的调试符号文件;
跟入,此功能是从当前执行函数进入下一层函数,这种情况下可能下一函数所在的源文件的调试符号文件还没有加载,为了找到下一函数的地址,分析从PC(程序计数器)开始的一段内存,找到函数调用指令,获得下一层函数的地址,根据这个地址,调试器通过描述文件找到相应的调试符号文件;
跟出,此功能是回到上一级函数,可以通过查看当前调用栈的信息,便可以知道回栈到哪个地址,然后通过描述文件找到相应的调试符号文件;
单步,此功能是每次执行一个源文件行,但当执行到最后函数返回时,与“跟出”类似,故可以用与“跟出”同样的方法获得回栈到哪个地址,找到相应的调试符号文件;
回溯,此功能是跟踪栈调用,根据回溯的目标地址,找到相应调试符号文件。
变量监视,此功能是在符号表中查找这个变量符号,获得其地址,根据这个地址,通过描述文件找到相应的调试符号文件,并将其加载。
图2为一种符号调试的周期流程图,包括以下步骤:
步骤201,生成目标可执行文件;
步骤202,将调试信息从目标可执行文件中分离出来,并拆分成多个调试符号文件及一个描述文件;
步骤203,调试器无负荷启动;
步骤204,开始实施调试手段;
步骤205,判断调试动作是否为设置断点,如果是,执行步骤206,否则,执行步骤207;
步骤206,根据源文件名称加载调试符号文件;
步骤207,判断调试动作是否为单步或者跟入或跟出,如果是,执行步骤212,否则,执行步骤208;
步骤208,判断调试动作是否为变量监视,如果是,执行步骤209,否则,执行步骤210;
步骤209,查找***符号表(***内部的符号表)获得目标地址,执行步骤213;
步骤210,栈回溯;
步骤211,分析栈信息获得目标地址,执行步骤213;
步骤212,分析局部代码或栈信息找到目标地址;
根据代码或栈信息得到目标机上运行的目标地址,在描述文件中根据该地址得到调试符号文件的位置。所述栈中包含了函数的调用关系。
步骤213,根据目标地址范围加载调试符号文件;
步骤214,调试符号文件加载完成;
步骤215,进行调试;
步骤216,判断是否继续调试,如果是,返回步骤205,否则,结束。
本发明保证了调试器获得必须的但是最小的调试信息集合,这样大大减轻了调试器的负担,使调试器得以高效运行。另外,即使软件***膨胀,调试速度也不会受到影响。
本方法在我公司综合接入服务器UAS、DSLAM等项目中实施以后,明显的改进了软件调试速度,提高了开发人员的开发效率。
应当指出的是,本发明还可有其它多种实施和扩充方式,在不背离本发明精神和范围的情况下,熟悉本领域的技术人员显然可以对本发明做出各种相应的改变和扩充,或者其它环境中参加本发明所述实施例实施,但这些改变和扩充都应当属于本发明所附权利要求所保护的范围。
例如,对调试器各个动作的处理可以采用其他的执行顺序,而不限于图2中的判断顺序。
Claims (10)
1、一种交叉集成开发环境中的符号调试方法,包括以下步骤:
(a)主机按照目标机的环境信息对需要在目标机上的运行的源文件进行编译,生成目标可执行文件,所述目标可执行文件包含调试信息和执行体;
(b)主机从目标可执行文件中分离出调试信息,并将其拆分为多个调试符号文件及一个包含拆分信息的描述文件,并约定描述文件与所述执行体的对应关系;
(c)调试器无负荷启动,根据调试动作对目标机上的执行体进行调试时,根据源文件名称或目标调试地址查找描述文件,加载需要的调试符号文件进行调试。
2、如权利要求1所述的方法,其特征在于,所述调试信息是包含变量和函数的信息。
3、如权利要求1所述的方法,其特征在于,在所述步骤(b)中,所述主机按模块将调试信息拆分为多个调试符号文件,每个调试符号文件对应一个或多个源文件。
4、如权利要求1所述的方法,其特征在于,所述描述文件中保存有以下信息及其对应关系:源文件路径和名称,目标可执行文件指令或数据在目标机上的起始位置,目标可执行文件指令或数据在目标机上的结束位置或者长度信息,调试符号文件的路径和名称。
5、如权利要求4所述的方法,其特征在于,当一个调试符号文件中又包含了另一调试符号文件时,所述描述文件中还保存有被包含的调试符号文件的源文件路径和名称。
6、如权利要求1所述的方法,其特征在于,在所述步骤(c)中,所述调试器根据调试动作对目标机上的执行体进行调试时,根据源文件名称或目标调试地址查找描述文件,得到调试符号文件的路径和名称。
7、如权利要求1所述的方法,其特征在于,调试器可执行的调试动作为以下的一种或几种:设置断点、单步、跟入、跟出、回溯、变量监视。
8、如权利要求7所述的方法,其特征在于,当调试动作为设置断点时,调试器需要根据源文件名称查找描述文件,得到调试符号文件的路径和名称;当调试动作为单步、跟入或跟出时,所述调试器通过局部代码或栈信息找到目标调试地址,根据该地址查找描述文件,得到调试符号文件的路径和名称;当调试动作为变量监视时,通过查找***符号表得到目标调试地址,进而得到调试符号文件的路径和名称;当调试动作为回溯时,所述调试器通过栈信息得到目标调试地址,进而得到调试符号文件的路径和名称。
9、一种交叉集成开发环境中的符号调试***,包括主机、调试器、目标机,其特征在于,
所述主机,用于按照目标机的环境信息对需要执行于目标机的源文件进行编译生成目标可执行文件,所述目标可执行文件包括调试信息和执行体,并将所述调试信息从所述目标可执行文件中分离出来,拆分为多个调试符号文件及一个包含拆分信息的描述文件,并约定描述文件与所述执行体的对应关系;
所述调试器,用于根据调试动作对目标机上的执行体进行调试,根据源文件名称或目标调试地址,查找描述文件,加载需要的调试符号文件进行调试。
10、如权利要求9所述的***,其特征在于,所述描述文件中保存有以下信息及其对应关系:源文件路径和名称,目标可执行文件指令或数据在目标机上的起始位置,目标可执行文件指令或数据在目标机上的结束位置或者长度信息,调试符号文件的路径和名称。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101067013A CN100478914C (zh) | 2007-05-28 | 2007-05-28 | 一种交叉集成开发环境中的符号调试方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007101067013A CN100478914C (zh) | 2007-05-28 | 2007-05-28 | 一种交叉集成开发环境中的符号调试方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101055542A CN101055542A (zh) | 2007-10-17 |
CN100478914C true CN100478914C (zh) | 2009-04-15 |
Family
ID=38795389
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007101067013A Expired - Fee Related CN100478914C (zh) | 2007-05-28 | 2007-05-28 | 一种交叉集成开发环境中的符号调试方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100478914C (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101968767A (zh) * | 2010-10-15 | 2011-02-09 | 北京数码大方科技有限公司 | 基于宏程序的代码调试及仿真的方法和装置 |
US9026861B2 (en) * | 2012-10-02 | 2015-05-05 | Texas Instruments Incorporated | Debug trace stream timestamping using downstream correlation |
CN103699481A (zh) * | 2013-12-03 | 2014-04-02 | 华为技术有限公司 | 一种代码调试方法及调试*** |
CN108388510B (zh) * | 2018-02-09 | 2021-09-24 | 福建升腾资讯有限公司 | 一种通过存储配置控制调试信息输出的方法及计算机设备 |
CN109683900B (zh) * | 2018-11-14 | 2022-02-18 | 浙江零跑科技股份有限公司 | 针对elf文件调试信息的通用上位机符号查找与解析方法 |
CN111338612A (zh) * | 2020-02-18 | 2020-06-26 | 东风电子科技股份有限公司 | 针对软件开发工具实现c交叉编译器集成构建的***及其方法 |
-
2007
- 2007-05-28 CN CNB2007101067013A patent/CN100478914C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101055542A (zh) | 2007-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100478914C (zh) | 一种交叉集成开发环境中的符号调试方法及*** | |
CN100535870C (zh) | 嵌入式***中进程异常跟踪定位的方法 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
US20050177775A1 (en) | Data race detection using sequential program analysis | |
CN108073400A (zh) | 软件自动化构建方法、服务器及存储介质 | |
CN109766124A (zh) | 业务开发方法、装置、计算机设备和存储介质 | |
US9182953B2 (en) | Hybrid dynamic code compiling device, method, and service system thereof | |
CN109032631B (zh) | 应用程序补丁包获取方法、装置、计算机设备及存储介质 | |
CN101866315B (zh) | 软件开发工具的测试方法及*** | |
US20110126179A1 (en) | Method and System for Dynamic Patching Software Using Source Code | |
CN101110055B (zh) | 在单元测试中实现通用桩函数的装置及其实现方法 | |
CN102375778A (zh) | 实现数字信号处理器自动测试的方法及*** | |
WO2019005228A1 (en) | AUTOMATED ADAPTATION OF A SOURCE CODE IN ORDER TO INJECT FUNCTIONS BETWEEN VERSIONS OF A PLATFORM | |
US20160110281A1 (en) | System and method for debugging firmware/software by generating trace data | |
CN101226502B (zh) | 一种自动化测试方法及*** | |
CN109144799A (zh) | 一体化测试方法、装置、计算机设备和存储介质 | |
CN105468797A (zh) | 一种信息处理方法及装置 | |
CN101980546B (zh) | 智能网平台、业务执行方法和分析业务异常的方法 | |
CN115617687B (zh) | 程序插桩方法、装置、设备和存储介质 | |
US7287246B2 (en) | Debugging optimized flows with breakpoints using stored breakpoint trigger indicators | |
CN102722438A (zh) | 一种内核调试的方法和设备 | |
CN102063367A (zh) | 针对当机程序的离线分析方法及装置 | |
CN111596970B (zh) | 动态库延迟加载方法、装置、设备和存储介质 | |
CN105550575A (zh) | 一种未导出的函数地址和数据结构偏移的获取方法及装置 | |
US9483262B2 (en) | Apparatus and method for identifying correspondence between an installed program and an interface in a source code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20180428 Address after: California, USA Patentee after: Global innovation polymerization LLC Address before: 518057 Department of law, Zhongxing building, South hi tech Industrial Park, Nanshan District hi tech Industrial Park, Guangdong, Shenzhen Patentee before: ZTE Corp. |
|
TR01 | Transfer of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090415 |
|
CF01 | Termination of patent right due to non-payment of annual fee |