CN110502438B - 一种Linux应用程序的调试方法 - Google Patents

一种Linux应用程序的调试方法 Download PDF

Info

Publication number
CN110502438B
CN110502438B CN201910703630.8A CN201910703630A CN110502438B CN 110502438 B CN110502438 B CN 110502438B CN 201910703630 A CN201910703630 A CN 201910703630A CN 110502438 B CN110502438 B CN 110502438B
Authority
CN
China
Prior art keywords
variable
caller
interface
application program
monitor
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
Application number
CN201910703630.8A
Other languages
English (en)
Other versions
CN110502438A (zh
Inventor
包国文
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huizhou Desay SV Automotive Co Ltd
Original Assignee
Huizhou Desay SV Automotive Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huizhou Desay SV Automotive Co Ltd filed Critical Huizhou Desay SV Automotive Co Ltd
Priority to CN201910703630.8A priority Critical patent/CN110502438B/zh
Publication of CN110502438A publication Critical patent/CN110502438A/zh
Application granted granted Critical
Publication of CN110502438B publication Critical patent/CN110502438B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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

本发明涉及软件调试方法技术领域,尤其涉及一种Linux应用程序的调试方法,包括以下步骤:在应用程序开发初期,识别并定义待开发应用程序的关键变量;在应用程序开发阶段,将变量监控器导入应用程序,并将关键变量注册到变量监控器上;在应用程序发布后,正常运行程序进行测试工作;发现应用程序出现问题后,使用变量监控器提供的查询接口,查看关键变量的实时状态,从而判断程序的运行状态。本发明的发明目的在于提供一种Linux应用程序的调试方法,采用本发明提供的技术方案解决了现有软件发布测试时不能在线调试,离线调试不能保留现场,导致开发人员无法观察问题现场的关键变量的实时状态的技术问题。

Description

一种Linux应用程序的调试方法
技术领域
本发明涉及软件调试方法技术领域,尤其涉及一种Linux应用程序的调试方法。
背景技术
Linux操作系统已经成为当今科技时代的重要组成部分,不仅可以是通用操作系统,还可以被裁剪成嵌入式系统,目前已经被广泛被应用于航空、国防、交通、物流、汽车、智能家居、消费电子等各个领域。
如图1所示,Linux的应用程序的调试方法整体上分为两类:在线调试与离线调试。
在线调试是指使用调试器启动应用程序,并且观察其运行时的资源状态,如变量值。在线调试通常用于开发阶段,开发人员可以实时的监控进程的状态,但软件一旦发布,就不能使用;
离线调试是指不使用调试器,而是让应用程序正常运行,通过分析应用程序的日志输出来对应用程序的调试方法。离线调试通常用于发布测试阶段,可以在发布测试后通过打印日志进行调试观察进程的运行轨迹,但通常不能观察到出现问题的实时现场。
在一个进程中,通常有一些全局变量是很重要的,称为关键变量,当程序出现问题时,查看这些关键变量往往可以帮助开发人员有效的定位问题。在软件发布测试时,开发人员不能使用在线调试,而离线模式有不能保留现场,导致开发人员在发布测试的软件上,不能观察到问题现场的关键变量的实时状态。
发明内容
本发明的发明目的在于提供一种Linux应用程序的调试方法,采用本发明提供的技术方案解决了现有软件发布测试时不能在线调试,离线调试不能保留现场,导致开发人员无法观察问题现场的关键变量的实时状态的技术问题。
为了达到上述发明目的,本发明提出一种Linux应用程序的调试方法,包括以下步骤:
在应用程序开发初期,识别并定义待开发应用程序的关键变量;
在应用程序开发阶段,将变量监控器导入应用程序,并将关键变量注册到变量监控器上;
在应用程序发布后,正常运行程序进行测试工作;
发现应用程序出现问题后,使用变量监控器提供的查询接口,查看关键变量的实时状态,从而判断程序的运行状态。
优选的,所述变量监控器包括
使能接口,供调用者调用,用于对所述变量监控器进行使能或禁用;
注册变量接口,供调用者调用,用于将需要监控的关键变量的信息传递给所述变量监控器;
查询变量接口,供调用者调用,用于查看关键变量的信息;
使能开关,分别接于所述注册变量接口与查询变量接口,用于控制所述注册变量接口与查询变量接口是否使能;
结构体,用于管理关键变量;以及
内存表,用于存放已注册的关键变量的信息。
优选的,所述结构体包括关键变量的变量名、变量地址与变量类型信息。
优选的,调用者调用注册变量接口,将需要监控的关键变量的信息传递给所述变量监控器;包括以下步骤:
A100、调用者调用注册变量接口,并将关键变量的信息传递给变量监控器;所述关键变量的信息包括变量名、变量地址及变量类型;
A200、分别判断变量名是否未被注册、变量地址是否未注册、读取时是否没有发生异常;
A300、是则将变量名、变量地址及变量类型打包成一个结构体,并存放到内存表,向调用者返回注册成功的提示;
否则分别向调用者返回错误提示。
优选的,在步骤A300中,包括以下步骤:
A301、判断变量名是否未注册,是则执行A302,否则执行A303;
A302、判断变量地址是否未注册,是则执行A304,否则执行A305;
A303、向调用者返回变量名已注册的错误提示;
A304、根据变量地址以及变量类型,尝试读取变量值;
A305、向调用者返回变量地址已注册的错误提示;
A306、判断读取变量值时是否没有发生异常,如果是则执行A307,否则执行A308;
A307、将变量名、变量地址及变量类型打包成一个结构体;
A308、向调用者返回读取异常的错误提示;
A309、将打包好的结构体存放到内存表;
A310、向调用者返回注册成功的提示。
优选的,调用者调用查询变量接口,查看关键变量的信息;包括以下步骤:
B100、调用者调用查询变量接口,并将需要查询的变量名传递给监控器;
B200、在内存表中查找与所述变量名对应的结构体;
B300、分别判断是否已经查找到与所述变量名对应的结构体、是否读取没有发生异常;
B400、是则将与所述结构体对应的变量值返回给调用者;
否则分别向调用者返回错误提示。
优选的,在步骤B400中,包括以下步骤:
B401、若查找到与所述变量名对应的结构体,则执行B402;否则执行B403;
B402、根据变量名在内存表中提取对应的结构体;
B403、向调用者返回变量名字未注册的错误提示;
B404、提取结构体后,根据变量地址与变量类型,读取相应地址的变量值,记为Value;
B405、判断是否读取没有发生异常,是则执行B406,否则执行B407;
B406、将Value返回给调用者;
B407、向调用者返回读取异常的错误提示;
B408、将内存表中对应变量名的结构体信息清除。
优选的,调用者调用使能接口,对所述变量监控器进行使能或禁用;包括以下步骤:
C100、对于用于生产的软件,将变量监控器设置为禁用;
C200、开发者判断本次代码是否用于最终生产,是则执行C300,否则执行C400;
C300、调用使能接口,依次关闭注册变量接口和查询变量接口;
C400、调用使能接口,依次打开注册变量接口和查询变量接口。
由上可知,应用本发明提供的技术方案可以得到以下有益效果:在软件发布后,测试人员发现软件存在问题时,开发人员可以到问题现场查看与跟踪关键变量的状态,从而帮助开发人员更加快速的定位问题,提高解决问题的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明传统调试方法示意图;
图2为本发明实施例调试方法流程图;
图3为本发明实施例变量监控器结构框图;
图4为本发明实施例调式方法中变量注册流程图;
图5为本发明实施例调试方法中变量查询流程图;
图6为本发明实施例调试方法中使能结构使用流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在软件发布测试时,开发人员不能使用在线调试,而离线模式有不能保留现场,导致开发人员在发布测试的软件上,不能观察到问题现场的关键变量的实时状态。
为了解决上述问题,本实施例提出一种Linux应用程序的调试方法,提出了变量监控器概念。使用本实施例提供的调试方法后,如图2所示,调试程序的步骤如下:
S101、开始;
S102、在应用程序开发初期,开发者识别并定义待开发应用程序的关键变量;
S103、在应用程序开发阶段,开发者将变量监控器导入应用程序;
S104、开发阶段,开发者将关键变量注册到变量监控器上;
S105、在应用程序发布后,测试人员正常运行程序进行测试工作;
S106、测试人员发现应用程序出现问题后,通知开发者;
S107、开发者在问题现场,使用变量监控器提供的查询接口,查看关键变量的实时状态,从而判断程序的运行状态;
S108、结束。
变量监控器在程序运行的过程中,以一个独立的库存在,结构框图如图3所示,变量监控器包括使能接口、注册变量接口、查询变量接口、使能开关、结构体和内存表。
其中使能接口对外提供,供应用程序调用,用于对变量监控器进行使能或禁用;
注册变量接口对外提供,供应用程序调用,用于将需要监控的关键变量的信息传递给变量监控器;
查询变量接口对外提供,供应用程序调用,用于查看关键变量的信息;
使能开关,分别接于所述注册变量接口与查询变量接口,用于控制所述注册变量接口与查询变量接口是否使能;
结构体,用于管理关键变量,包含变量名、变量地址与变量类型信息;
内存表,用于存放已注册的关键变量的信息。
变量监控器在程序运行的过程中,包括注册变量过程和查询变量过程。
一、调用者调用注册变量接口,将需要监控的关键变量的信息传递给变量监控器。如图4所示,包括以下步骤:
S201、开始;
S202、调用者(即应用程序)调用注册变量接口,并将关键变量的信息传递给变量监控器;关键变量的信息包括变量名、变量地址及变量类型;
S203、变量监控器判断变量名是否未被注册,是则执行S204,否则执行S205;
S204、变量监控器判断变量地址是否未注册,是则执行S206,否则执行S207;
S205、变量监控器向调用者返回变量名已注册的错误提示;
S206、变量监控器根据变量地址以及变量类型,尝试读取变量的值;
S207、变量监控器向调用者返回变量地址已注册的错误提示;
S208、变量监控器判断读取时是否没有发生异常,如果是则执行S209,否则执行S210;
S209、变量监控器将变量名、变量地址及变量类型打包成一个结构体;
S210、变量监控器向调用者返回读取异常的错误提示;
S211、变量监控器将打包好的结构体存放到内存表;
S212、变量监控器向调用者返回注册成功的提示;
S213、结束。
二、调用者调用查询变量接口,查看关键变量的信息。如图5所示,包括以下步骤:
S301、开始;
S302、调用者通过查询变量接口,将需要查询的变量名传递给变量监控器,其中调用者即应用程序,开发者可通过调用应用程序对其开放的接口间接查询;
S303、变量监控器根据变量名,在内存表中查找对应变量名的结构体;
S304、变量监控器判断是否已经查找到对应变量名的结构体,是则执行S305,否则执行S306;
S305、变量监控器根据变量名在内存表中提取对应的结构体;
S306、变量监控器向调用者返回变量名字未注册的错误提示;
S307、变量监控器提取结构体后,根据变量地址与变量类型,读取相应地址的变量值,记为Value;
S308、变量监控器判断是否读取没有发生异常,是则执行S309,否则执行S310;
S309、变量监控器将Value返回给调用者;
S310、变量监控器向调用者返回读取异常的错误提示;
S311、变量监控器将内存表中对应变量名的结构体信息清除;
S312、结束。
在注册变量和查询变量过程中,需要对变量监控器进行使能或禁用,在本实施例中,调用者调用使能接口,对变量监控器进行使能或禁用。如图6所示,包括以下步骤:
S401、开始;
S402、开发者判断本次代码是否用于最终生产,如果是则执行S403,否则执行S405;在该步骤中,为了安全起见,用于生产的软件需要将监控器设置用禁用;
S403、开发者在程序中调用使能接口,关闭变量注册接口通道;
S404、开发者在程序中调用使能接口,关闭变量查询接口通道;
S405、开发者在程序中调用使能接口,打开变量注册接口通道;
S406、开发者在程序中调用使能接口,打开变量查询接口通道;
S407、结束。
综上,通过本实施例提供的调试方法,在软件发布后,测试人员发现软件存在问题时,开发人员可以到问题现场查看与跟踪关键变量的状态,从而帮助开发人员更加快速的定位问题,提高解决问题的效率。
以上所述的实施方式,并不构成对该技术方案保护范围的限定。任何在上述实施方式的精神和原则之内所作的修改、等同替换和改进等,均应包含在该技术方案的保护范围之内。

Claims (7)

1.一种Linux应用程序的调试方法,其特征在于:包括以下步骤:
在应用程序开发初期,识别并定义待开发应用程序的关键变量;
在应用程序开发阶段,将变量监控器导入应用程序,并将关键变量注册到变量监控器上;
在应用程序发布后,正常运行程序进行测试工作;
发现应用程序出现问题后,使用变量监控器提供的查询接口,查看关键变量的实时状态,从而判断程序的运行状态;
变量监控器在程序运行的过程中,以一个独立的库存在;
所述变量监控器包括:
使能接口,供调用者调用,用于对所述变量监控器进行使能或禁用;
注册变量接口,供调用者调用,用于将需要监控的关键变量的信息传递给所述变量监控器;
查询变量接口,供调用者调用,用于查看关键变量的信息;
使能开关,分别接于所述注册变量接口与查询变量接口,用于控制所述注册变量接口与查询变量接口是否使能;
结构体,用于管理关键变量;以及
内存表,用于存放已注册的关键变量的信息。
2.根据权利要求1所述的调试方法,其特征在于:所述结构体包括关键变量的变量名、变量地址与变量类型信息。
3.根据权利要求1所述的调试方法,其特征在于:调用者调用注册变量接口,将需要监控的关键变量的信息传递给所述变量监控器;包括以下步骤:
A100、调用者调用注册变量接口,并将关键变量的信息传递给变量监控器;所述关键变量的信息包括变量名、变量地址及变量类型;
A200、分别判断变量名是否未被注册、变量地址是否未注册、读取时是否没有发生异常;
A300、是则将变量名、变量地址及变量类型打包成一个结构体,并存放到内存表,向调用者返回注册成功的提示;
否则分别向调用者返回错误提示。
4.根据权利要求3所述的调试方法,其特征在于:在步骤A300中,包括以下步骤:
A301、判断变量名是否未注册,是则执行A302,否则执行A303;
A302、判断变量地址是否未注册,是则执行A304,否则执行A305;
A303、向调用者返回变量名已注册的错误提示;
A304、根据变量地址以及变量类型,尝试读取变量值;
A305、向调用者返回变量地址已注册的错误提示;
A306、判断读取变量值时是否没有发生异常,如果是则执行A307,否则执行A308;
A307、将变量名、变量地址及变量类型打包成一个结构体;
A308、向调用者返回读取异常的错误提示;
A309、将打包好的结构体存放到内存表;
A310、向调用者返回注册成功的提示。
5.根据权利要求1所述的调试方法,其特征在于:调用者调用查询变量接口,查看关键变量的信息;包括以下步骤:
B100、调用者调用查询变量接口,并将需要查询的变量名传递给监控器;
B200、在内存表中查找与所述变量名对应的结构体;
B300、分别判断是否已经查找到与所述变量名对应的结构体、是否读取没有发生异常;
B400、是则将与所述结构体对应的变量值返回给调用者;
否则分别向调用者返回错误提示。
6.根据权利要求5所述的调试方法,其特征在于:在步骤B400中,包括以下步骤:
B401、若查找到与所述变量名对应的结构体,则执行B402;否则执行B403;
B402、根据变量名在内存表中提取对应的结构体;
B403、向调用者返回变量名字未注册的错误提示;
B404、提取结构体后,根据变量地址与变量类型,读取相应地址的变量值,记为Value;
B405、判断是否读取没有发生异常,是则执行B406,否则执行B407;
B406、将Value返回给调用者;
B407、向调用者返回读取异常的错误提示;
B408、将内存表中对应变量名的结构体信息清除。
7.根据权利要求1所述的调试方法,其特征在于:调用者调用使能接口,对所述变量监控器进行使能或禁用;包括以下步骤:
C100、对于用于生产的软件,将变量监控器设置为禁用;
C200、开发者判断本次代码是否用于最终生产,是则执行C300,否则执行C400;
C300、调用使能接口,依次关闭注册变量接口和查询变量接口;
C400、调用使能接口,依次打开注册变量接口和查询变量接口。
CN201910703630.8A 2019-07-31 2019-07-31 一种Linux应用程序的调试方法 Active CN110502438B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910703630.8A CN110502438B (zh) 2019-07-31 2019-07-31 一种Linux应用程序的调试方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910703630.8A CN110502438B (zh) 2019-07-31 2019-07-31 一种Linux应用程序的调试方法

Publications (2)

Publication Number Publication Date
CN110502438A CN110502438A (zh) 2019-11-26
CN110502438B true CN110502438B (zh) 2023-07-04

Family

ID=68587864

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910703630.8A Active CN110502438B (zh) 2019-07-31 2019-07-31 一种Linux应用程序的调试方法

Country Status (1)

Country Link
CN (1) CN110502438B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6026235A (en) * 1997-05-20 2000-02-15 Inprise Corporation System and methods for monitoring functions in natively compiled software programs
CN1578202A (zh) * 2003-07-28 2005-02-09 中兴通讯股份有限公司 通信系统程序故障检测方法
JP2008146310A (ja) * 2006-12-08 2008-06-26 Nec Electronics Corp プログラムデバッグ装置、プログラムデバッグ方法、及びプログラム
CN103136107A (zh) * 2011-12-03 2013-06-05 南京南瑞继保电气有限公司 一种嵌入式程序动态分配内存的变量调试方法
CN103729288A (zh) * 2013-11-01 2014-04-16 华中科技大学 一种嵌入式多核环境下应用程序的调试方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104731696B (zh) * 2013-12-19 2017-10-10 腾讯科技(深圳)有限公司 定位程序代码中bug的方法及相关装置
CN105740120B (zh) * 2014-12-11 2018-08-17 中国科学院软件研究所 基于共享内存的软件运行过程实时监测与控制方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6026235A (en) * 1997-05-20 2000-02-15 Inprise Corporation System and methods for monitoring functions in natively compiled software programs
CN1578202A (zh) * 2003-07-28 2005-02-09 中兴通讯股份有限公司 通信系统程序故障检测方法
JP2008146310A (ja) * 2006-12-08 2008-06-26 Nec Electronics Corp プログラムデバッグ装置、プログラムデバッグ方法、及びプログラム
CN103136107A (zh) * 2011-12-03 2013-06-05 南京南瑞继保电气有限公司 一种嵌入式程序动态分配内存的变量调试方法
CN103729288A (zh) * 2013-11-01 2014-04-16 华中科技大学 一种嵌入式多核环境下应用程序的调试方法

Also Published As

Publication number Publication date
CN110502438A (zh) 2019-11-26

Similar Documents

Publication Publication Date Title
CN108694320B (zh) 一种多安全环境下敏感应用动态度量的方法及系统
CN106201892B (zh) 用于嵌入式软件的异常中断源定位检测方法
CN113497809B (zh) 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN109885499B (zh) 一种机器人自动化测试系统及测试方法
CN112380542B (zh) 基于错误场景生成的物联网固件漏洞挖掘方法及系统
CN109255240B (zh) 一种漏洞处理方法和装置
CN107103237A (zh) 一种恶意文件的检测方法及装置
CN110609538B (zh) 故障处理方法、装置、设备及存储介质
Garrett et al. Context in the risk assessment of digital systems
CN110502438B (zh) 一种Linux应用程序的调试方法
US20100125830A1 (en) Method of Assuring Execution for Safety Computer Code
CN114238980A (zh) 一种工控设备漏洞挖掘方法、系统、设备及存储介质
CN116204891B (zh) 漏洞利用分析方法、设备及存储介质
CN114625106B (zh) 车辆诊断的方法、装置、电子设备及存储介质
CN115659354A (zh) 电力系统物联网固件多粒度漏洞相似性检测方法和装置
EP3361335B1 (en) Safety controller using hardware memory protection
CN115756935A (zh) 嵌入式软件系统的异常故障定位方法、装置及设备
CN110647467B (zh) 基于单步异常的目标码覆盖率测试方法、系统及介质
CN110647771B (zh) 一种mysql数据库存储完整性校验保护方法及装置
CN113094221A (zh) 故障注入方法、装置、计算机设备以及可读存储介质
CN113377588A (zh) 硬盘的可持续集成测试方法、装置及计算机设备
CN111143851B (zh) 适用于操作系统内核对象地址泄露的检测方法及系统
Li et al. A Model-based Approach to Interdependency between Safety and Security in ICS
CN118158000B (zh) 一种容器安全检测方法、系统、电子设备、芯片及介质
KR20080043204A (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
GR01 Patent grant
GR01 Patent grant