CN108388510B - 一种通过存储配置控制调试信息输出的方法及计算机设备 - Google Patents
一种通过存储配置控制调试信息输出的方法及计算机设备 Download PDFInfo
- Publication number
- CN108388510B CN108388510B CN201810132359.2A CN201810132359A CN108388510B CN 108388510 B CN108388510 B CN 108388510B CN 201810132359 A CN201810132359 A CN 201810132359A CN 108388510 B CN108388510 B CN 108388510B
- Authority
- CN
- China
- Prior art keywords
- debugging
- storage space
- information
- file
- debugging information
- 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
Images
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)
- Debugging And Monitoring (AREA)
Abstract
本发明提供的一种通过存储配置控制调试信息输出的方法,设定一独立存储空间;在代码中将调试信息定位至所述存储空间;编译生成独立的调试文件;将所述调试文件导入所述存储空间,将调试信息进行输出,本发明还提供一种计算机设备,通过本发明剥离调试信息内容后,就可以灵活配置调试信息的存储空间,可以在系统软件不变的情况下安全切换debug和release两种模式,方便复现并抓取故障调试信息。
Description
技术领域
本发明涉及一种通过存储配置控制调试信息输出的方法及计算机设备。
背景技术
在嵌入式系统中,添加print语句输出调试信息是最常用调试方式。为了快速定位问题,代码中会大量添加print语句。这种方式存在两个明显的缺点:
1)软件系统会因此变得十分庞大,占用大量的代码空间(指用于程序存储及运行的空间,如MCU片内的ROM空间)。
2)软件系统会因此运行效率低下。
而嵌入系统,尤其是小型嵌入式系统,为了降低成本,所采用的MCU往往运行主频不高,代码存储空间有限。
针对以上两个问题,常见的处理方案是:
1)尽量减少print语句的数量,压缩print语句所携带的调试信息长度;
2)为每个版本都保存debug与release两份输出。Debug版本保留print语句,release版本不带print语句。需要调试的时候烧录debug版本,正式生产烧录release版本。
常见处理方案的缺点:
1)对print语句的限制无疑提高了对程序员的编程要求,降低了开发和调试的效率。
2)在debug模式下仍旧大量占用代码存储空间;
3)debug与release模式之间的切换需要更换整个软件系统,这会给售后维护带来很多麻烦。比如,变更软件系统很可能会重置用户数据,而客诉故障有可能依赖于当前用户数据才能复现,变更软件系统就意味着故障现象可能无法重现。比如,有的时候需要在客户现场复现并抓取调试信息发回供研发分析,在客户现场变更软件系统可能会带来安全方面的问题。
发明内容
本发明要解决的技术问题,在于提供一种通过存储配置控制调试信息输出的方法及计算机设备,使用起来更简洁高效。
本发明之一是这样实现的:一种通过存储配置控制调试信息输出的方法,包括:
步骤1、设定一独立存储空间;
步骤2、在代码中将调试信息定位至所述存储空间;
步骤3、编译生成独立的调试文件;
步骤4、将所述调试文件导入所述存储空间,将调试信息进行输出。
进一步地,所述步骤2进一步具体为:在代码中将调试信息定位至所述存储空间;所述定位方法为通过编译器的编译属性进行指定,向编译器声明调试信息的存储空间。
进一步地,所述步骤3进一步具体为:编译器将代码中声明定位至所述存储空间的调试信息进行汇总,生成一个独立的调试文件。
进一步地,还包括步骤5、删除所述调试文件,程序恢复到release状态。
本发明之二是这样实现的:本发明一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
步骤1、设定一独立存储空间;
步骤2、在代码中将调试信息定位至所述存储空间;
步骤3、编译生成独立的调试文件;
步骤4、将所述调试文件导入所述存储空间,将调试信息进行输出。
进一步地,所述步骤2进一步具体为:在代码中将调试信息定位至所述存储空间;所述定位方法为通过编译器的编译属性进行指定,向编译器声明调试信息的存储空间。
进一步地,所述步骤3进一步具体为:编译器将代码中声明定位至所述存储空间的调试信息进行汇总,生成一个独立的调试文件。
进一步地,还包括步骤5、删除所述调试文件,程序恢复到release状态。
本发明具有如下优点:一种通过存储配置控制调试信息输出的方法及计算机设备,剥离调试信息内容,可以存储在任意非易失性存储器中,只要在需要调试时拷贝至程序可直接读取的RAM或FLASH空间即可。即,没有必须存储于代码空间的限制。切换debug与release模式极为方便,不用更换软件系统,安全性高,可以在不破坏客户数据的情况下复现故障并输出调试信息。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明方法执行流程图。
具体实施方式
如图1所示,本发明通过存储配置控制调试信息输出的方法,包括:
步骤1、设定一段独立的存储空间,所述存储空间为RAM或FLASH(但又不仅限于这两种介质),其中独立是指这段空间在程序运行时必须由调试信息独占;
步骤2、在代码中将调试信息定位至所述存储空间;所述定位方法为通过编译器的编译属性进行指定,向编译器声明调试信息的存储空间,所述调试信息为print语句的传入参数;
步骤3、编译器将代码中声明定位至所述存储空间的调试信息进行汇总,生成一个独立的调试文件,在此步骤,完成了调试信息内容的剥离;
步骤4、在需要调试时,将所述的调试文件导入所述的存储空间内,程序识别到所述存储空间存在合法的调试文件,则进入debug状态,输出调试信息;
步骤5、调试结束,删除所述调试文件,所述存储空间没有合法的调试文件,程序恢复到release状态,不再输出调试信息。
本发明一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:
步骤1、设定一段独立的存储空间,所述存储空间为RAM或FLASH,其中独立是指这段空间在程序运行时必须由调试信息独占;
步骤2、在代码中将调试信息定位至所述存储空间;所述定位方法为通过编译器的编译属性进行指定,向编译器声明调试信息的存储空间,所述调试信息为print语句的传入参数;
步骤3、编译器将代码中声明定位至所述存储空间的调试信息进行汇总,生成一个独立的调试文件,在此步骤,完成了调试信息内容的剥离;
步骤4、在需要调试时,将所述的调试文件导入所述的存储空间内,程序识别到所述存储空间存在合法的调试文件,则进入debug状态,输出调试信息;
步骤5、调试结束,删除所述调试文件,所述存储空间没有合法的调试文件,程序恢复到release状态,不再输出调试信息。
本发明一种具体实施方式:
1.设定一独立存储空间
要将调试信息从系统中剥离出来,首先要提供一个独立的空间用于存放。这个独立空间可以通过分散加载文件来配置,例如:
当然,这个独立空间的起始地址根据具体情况而定。在这个示例中,是将其定位到一段地址为0xEFB00000的RAM空间。
编译器会根据所述分散描述文件的配置,输出一个独立的文件,这个文件中存储了所有定位到“LOG_MSG_SEG”段的内容,即调试信息的内容。
2.调试信息内容定位
然后是要如何将print语句中的参数内容定位到这个独立空间,例如:
函数宏“DPrintf”就是本文所述print语句的一种具体实现示例。此段代码中,通过编译选项将“DPrintf”的每个传入参数定位到“LOG_MSG_SEG”宏所指定的存储空间,这样,代码中所有使用"DPrintf"函数宏的地方,其传入参数内容,即调试信息,就都被归集到“LOG_MSG_SEG”段。
3.是否输出调试信息的判断
在这个示例中,ScLogModuleIsEnable()函数用于判断“LOG_MSG_SEG”所指定的存储空间是否有合法的调试信息存在。如果返回TRUE,则说明调试信息存在,为debug状态,调试信息的内容就通过NiLogModulePrintf经由特定接口输出;如果返回FALSE,则说明调试信息不存在,为release状态,“DPrintf”不做任何操作直接返回。
4.调试文件的存储
编译器生成的调试文件可以存储于任意非易失性存储器中,具体根据产品方案来定。专用的debug工具在需要抓取调试信息的时候,会将调试文件下载到产品的非易失性存储器中。产品启动后,检测到所述存储器中有合法的调试文件,会先将调试文件内容拷贝至“LOG_MSG_SEG”所指定的RAM地址。ScLogModuleIsEnable()函数检测到“LOG_MSG_SEG”所指定的RAM空间有合法的调试文件内容,就能判定当前为debug模式,从而向debug工具输出调试信息。
相应的,在抓取完调试信息,专用的debug工具只要将非易失性存储器中的调试文件内容擦除,产品启动后便检测不到合法的调试文件,“LOG_MSG_SEG”所指定的RAM空间也就不会有合法的调试文件内容,ScLogModuleIsEnable()便能判定当前为release模式,不再输出调试信息。
非易失性存储器可以有多种方式存储调试文件。如果产品支持文件系统,可以将调试文件下载到文件系统。如果系统不支持文件系统,调试文件也可以根据产品的硬件配置独立规划一段存储分区放置。
如果存储调试文件的非易失性存储器是程序运行空间,即代码可以直接访问的空间,则调试文件存储空间与“LOG_MSG_SEG”存储空间可以统一。就样,就不必在产品启动阶段多一步将调试文件从指定的非易失性存储器拷贝到“LOG_MSG_SEG”指定的RAM空间的过程,因为“LOG_MSG_SEG”可以直接指定到所述的非易性存储器空间。
这种思路再扩展开去,不仅仅是调试信息,还可以将整个debug模块代码全都从系统中剥离出来。更进一步,一些选配的系统功能也可以通过这种方式,实现灵活配置。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (2)
1.一种通过存储配置控制调试信息输出的方法,其特征在于:包括:
步骤1、设定一段独立的存储空间,所述存储空间为RAM或FLASH,其中独立是指这段空间在程序运行时必须由调试信息独占;
步骤2、在代码中将调试信息定位至所述存储空间;所述定位方法为通过编译器的编译属性进行指定,向编译器声明调试信息的存储空间,所述调试信息为print语句的传入参数;
步骤3、编译器将代码中声明定位至所述存储空间的调试信息进行汇总,生成一个独立的调试文件,在此步骤,完成了调试信息内容的剥离;
步骤4、在需要调试时,将所述调试文件导入所述存储空间内,程序识别到所述存储空间存在合法的调试文件,则进入debug状态,输出调试信息;
步骤5、调试结束,删除所述调试文件,所述存储空间没有合法的调试文件,程序恢复到release状态,不再输出调试信息。
2.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于:所述处理器执行所述程序时实现以下步骤:
步骤1、设定一段独立的存储空间,所述存储空间为RAM或FLASH,其中独立是指这段空间在程序运行时必须由调试信息独占;
步骤2、在代码中将调试信息定位至所述存储空间;所述定位方法为通过编译器的编译属性进行指定,向编译器声明调试信息的存储空间,所述调试信息为print语句的传入参数;
步骤3、编译器将代码中声明定位至所述存储空间的调试信息进行汇总,生成一个独立的调试文件,在此步骤,完成了调试信息内容的剥离;
步骤4、在需要调试时,将所述调试文件导入所述存储空间内,程序识别到所述存储空间存在合法的调试文件,则进入debug状态,输出调试信息;
步骤5、调试结束,删除所述调试文件,所述存储空间没有合法的调试文件,程序恢复到release状态,不再输出调试信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810132359.2A CN108388510B (zh) | 2018-02-09 | 2018-02-09 | 一种通过存储配置控制调试信息输出的方法及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810132359.2A CN108388510B (zh) | 2018-02-09 | 2018-02-09 | 一种通过存储配置控制调试信息输出的方法及计算机设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108388510A CN108388510A (zh) | 2018-08-10 |
CN108388510B true CN108388510B (zh) | 2021-09-24 |
Family
ID=63075501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810132359.2A Active CN108388510B (zh) | 2018-02-09 | 2018-02-09 | 一种通过存储配置控制调试信息输出的方法及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108388510B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6795963B1 (en) * | 1999-11-12 | 2004-09-21 | International Business Machines Corporation | Method and system for optimizing systems with enhanced debugging information |
CN101055542A (zh) * | 2007-05-28 | 2007-10-17 | 中兴通讯股份有限公司 | 一种交叉集成开发环境中的符号调试方法及系统 |
CN102135935A (zh) * | 2010-01-22 | 2011-07-27 | 华为技术有限公司 | 软件优化、调试的方法及装置 |
US9471464B1 (en) * | 2015-04-16 | 2016-10-18 | International Business Machines Corporation | Debug management using dynamic analysis based on state information |
CN107436842A (zh) * | 2016-05-25 | 2017-12-05 | 中兴通讯股份有限公司 | 一种微码调试方法及单板 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1139876C (zh) * | 1999-11-30 | 2004-02-25 | 深圳市中兴通讯股份有限公司 | 嵌入式软件辅助调试方法 |
CN100340996C (zh) * | 2004-03-09 | 2007-10-03 | 华为技术有限公司 | 一种数字信号处理器软件调试信息输出方法 |
CN102073581B (zh) * | 2009-11-23 | 2015-09-23 | 新奥特(北京)视频技术有限公司 | 一种调试信息的输出方法及系统 |
CN102855176A (zh) * | 2011-06-29 | 2013-01-02 | 联想(北京)有限公司 | 计算机、网卡和调试信息处理方法 |
CN104133763A (zh) * | 2013-05-03 | 2014-11-05 | 富泰华工业(深圳)有限公司 | 程序调试系统及方法 |
CN104731696B (zh) * | 2013-12-19 | 2017-10-10 | 腾讯科技(深圳)有限公司 | 定位程序代码中bug的方法及相关装置 |
US9703536B2 (en) * | 2014-08-11 | 2017-07-11 | International Business Machines Corporation | Debugging code using a question and answer system based on documentation and code change records |
-
2018
- 2018-02-09 CN CN201810132359.2A patent/CN108388510B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6795963B1 (en) * | 1999-11-12 | 2004-09-21 | International Business Machines Corporation | Method and system for optimizing systems with enhanced debugging information |
CN101055542A (zh) * | 2007-05-28 | 2007-10-17 | 中兴通讯股份有限公司 | 一种交叉集成开发环境中的符号调试方法及系统 |
CN102135935A (zh) * | 2010-01-22 | 2011-07-27 | 华为技术有限公司 | 软件优化、调试的方法及装置 |
US9471464B1 (en) * | 2015-04-16 | 2016-10-18 | International Business Machines Corporation | Debug management using dynamic analysis based on state information |
CN107436842A (zh) * | 2016-05-25 | 2017-12-05 | 中兴通讯股份有限公司 | 一种微码调试方法及单板 |
Also Published As
Publication number | Publication date |
---|---|
CN108388510A (zh) | 2018-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107632828B (zh) | 多dts文件支持方法、编译装置及嵌入式设备 | |
CN105511911B (zh) | 系统固件升级包的生成方法及装置 | |
US9672133B2 (en) | Systems and methods for debugging applications using dual code generation | |
CN111090433A (zh) | 一种数据处理的方法、装置和存储介质 | |
CN102831022A (zh) | 修改系统配置的方法和装置 | |
CN108234554B (zh) | 一种云文件编辑方法及装置 | |
CN109814948B (zh) | 基于xposed框架对native层函数进行hook的方法、装置及电子装置 | |
CN107870769A (zh) | 操作系统的安装方法及装置 | |
CN110716845B (zh) | 一种Android系统的日志信息读取的方法 | |
CN108829465B (zh) | 一种基于直接读写flash的本地动态加载系统及方法 | |
CN108037932B (zh) | Spi-nand的配置文件获取方法和装置 | |
CN108388510B (zh) | 一种通过存储配置控制调试信息输出的方法及计算机设备 | |
CN104331311A (zh) | 一种升级包生成方法和装置 | |
CN113031944B (zh) | 基于模板的业务开通装置及方法 | |
CN105700900A (zh) | 一种优化无线局域网功能的方法及装置 | |
CN110750310A (zh) | 基于ios系统组件化开发的二进制和源码切换方法 | |
CN108536444A (zh) | 插件编译方法、装置、计算机设备和存储介质 | |
KR101563897B1 (ko) | 디바이스에서 사용자 데이터의 무결성을 보장하는 데이터 획득 장치 및 방법 | |
CN109634685B (zh) | Pch万兆以太网的pxe功能的启停方法及相关装置 | |
CN104750579A (zh) | 制作内存镜像的方法和装置 | |
CN108008981B (zh) | 一种片上系统SoC中进行程序初始化的方法和装置 | |
CN116301908B (zh) | 基于申威架构的Buildroot本地编译方法及系统 | |
KR102130016B1 (ko) | 자동 캐싱을 위한 컴파일링 방법 및 장치, 이를 위한 기록매체 | |
CN112882720B (zh) | 一种编译方法及装置 | |
WO2011048731A1 (ja) | 計算機システム及びそれに用いるリンク方法並びにそのプログラムが格納された非一時的なコンピュータ可読媒体 |
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 |