一种程序调试方法、装置、设备及可读存储介质与流程

文档序号:16880301发布日期:2019-02-15 22:04阅读:96来源:国知局
本发明涉及计算机应用
技术领域
:,特别是涉及一种程序调试方法、装置、设备及可读存储介质。
背景技术
::为保障存储系统的安全性,实现存储的各种特性,存储系统往往规模庞大,模块多达二三十个,这就造成了系统开发过程中对系统程序进行调试时,问题定位复杂。目前,系统调试手段主要有直接使用inbe工具查看,该方式适合程序运行过程中数据结构定义的变量值的查看,但随着数据结构的增多,运行效率会有降低。调试手段的调试效率低,造成系统开发过程缓慢,问题定位耗时严重,甚至影响存储系统性能。综上所述,如何有效地解决系统程序的调试等问题,是目前本领域技术人员急需解决的技术问题。技术实现要素:本发明的目的是提供一种程序调试方法、装置、设备及可读存储介质,以提高系统程序调试效率。为解决上述技术问题,本发明提供如下技术方案:一种程序调试方法,包括:对添加了trace模块的系统程序进行编译,获取所述系统程序中指定格式的变量结构体;生成所述变量结构体对应的definition文件,以及与所述definition文件对应的symbol文件;运行所述系统程序,利用所述definition文件并结合所述symbol文件将所述trace模块输出的trace信息写入内存中;利用所述symbol文件,从所述内存中读取所述trace信息;利用definition文件对所述trace信息进行解析,获得所述变量结构体对应的系统数据变化信息,并在可视化界面显示所述系统数据变化信息。优选地,运行所述系统程序,利用所述definition文件并结合所述symbol文件将所述trace模块输出的trace信息写入内存中,包括:运行所述系统程序,获得所述trace模块输出的trace信息;将所述trace信息按照symbol文件生成memory文件;将所述memory文件存储至所述symbol文件指定的内存地址中。优选地,运行所述系统程序,利用所述definition文件并结合所述symbol文件将所述trace模块输出的trace信息写入内存中,包括:运行所述系统程序,获得所述trace模块输出的trace信息;将所述trace信息按照symbol文件生成二进制文件和memory文件;将所述二进制文件和所述memory文件存储至所述symbol文件指定的内存地址中。优选地,运行所述系统程序,获得所述trace模块输出的trace信息,包括:运行所述系统程序,获得所述trace模块输出的trace公有信息和trace_entry信息;其中,所述trace信息包括所述trace模块对应的存储模块;将所述trace公有信息和所述trace_entry信息确定为所述trace信息。优选地,所述利用definition文件对所述trace信息进行解析,获得所述变量结构体对应的系统数据变化信息,包括:利用所述definition文件对所述trace信息进行解析,获得变量结构体对应的系统数据变化信息,以及所述变量结构体对应的所述存储模块。优选地,利用所述symbol文件,从所述内存中读取所述trace信息,包括:利用所述symbol文件,从所述内存中实时读取所述memory文件。优选地,在所述对添加了trace模块的系统程序进行编译,获取所述系统程序中指定格式的变量结构体之前,还包括:接收调试信息显示请求,并确定所述调试信息显示请求对应的所述变量结构体;在对所述系统程序进行编码时,将所述变量结构体编码为指定格式。一种程序调试装置,包括:变量结构体获取模块,用于对添加了trace模块的系统程序进行编译,获取所述系统程序中指定格式的变量结构体;文件生成模块,用于生成所述变量结构体对应的definition文件,以及与所述definition文件对应的symbol文件;trcae信息存储模块,用于运行所述系统程序,利用所述definition文件并结合所述symbol文件将所述trace模块输出的trace信息写入内存中;trace信息读取模块,用于利用所述symbol文件,从所述内存中读取所述trace信息;trace信息分析显示模块,用于利用definition文件对所述trace信息进行解析,获得所述变量结构体对应的系统数据变化信息,并在可视化界面显示所述系统数据变化信息。一种程序调试设备,包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现上述程序调试方法的步骤。一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述程序调试方法的步骤。应用本发明实施例所提供的方法,在系统程序中添加trace模块,在对系统程序进行编译时,获取指定格式的变量结构体,并生成与该变量结构体对应的definition文件,以及该definition文件对应的symbol。然后,运行系统程序时,由于添加了trace模块,trace模块便会输出trace信息,此时利用definition文件和symbol文件,将trace信息写入内存中。首先利用symbol文件确定trace信息的内存地址,从该内存地址中读取trace信息时,并利用definition文件对trace信息进行解析,便可获得该变量结构体对应的系统数据变化信息,可在可视化界面显示系统数据变化信息。如此,便可快速获取调试过程中,系统程序中的各个变量结构体的系统数据变化信息。相较于现有的inbe工具根据仅能查看个别数据结构定义的单一时刻的变量而言,本发明实施例所提供的程序调试方法,可快速获得多个变量结构体的数据变化信息。即,本发明实施例所提供的程序调试方法,可记录多个结构变量体的系统数据变化信息,如此便可提升程序调试效率,进一步缩短系统程序的开发时长。相应地,本发明实施例还提供了与上述程序调试方法相对应的程序调试装置、设备和可读存储介质,具有上述技术效果,在此不再赘述。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例中一种程序调试方法的实施流程图;图2为本发明实施例中一种trace模块使用示意图;图3为本发明实施例中一种程序调试装置的结构示意图;图4为本发明实施例中一种程序调试设备的结构示意图;图5为本发明实施例中一种程序调试设备的具体结构示意图。具体实施方式为了使本
技术领域
:的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例一:请参考图1,图1为本发明实施例中一种程序调试方法的流程图,该方法包括以下步骤:s101、对添加了trace模块的系统程序进行编译,获取系统程序中指定格式的变量结构体。在本发明实施例中,对待调试的系统程序可预先添加trace模块。其中,系统程序可为存储系统的系统程序,trace模块,可通过trace模块提供的接口函数在存储系统中的各存储模块内部记录trace信息到内存空间。另外,对需要显示的变量结构体采用指定格式进行编码,例如be格式。优选地,为便于操作,还可根据用户在可视化界面输出的调试信息显示请求,确定需显示的变量结构体。具体的,在对添加了trace模块的系统程序进行编译,获取系统程序中指定格式的变量结构体之前,接收调试信息显示请求,并确定调试信息显示请求对应的变量结构体;在对系统程序进行编码时,将变量结构体编码为指定格式。即通过用户指定的方式,对用户感兴趣的变量结构体使用指定格式进行标注。确定待查看的变量结构体之后,可执行步骤s102的操作。s102、生成变量结构体对应的definition文件,以及与definition文件对应的symbol文件。其中,变量结构体的数目可为一个也可为多个。definition文件即为定义文件,即定义该结构变量体的系统数据改变数值的存储格式和结构。具体的,可采用memory文件记录结构变量体的系统数据改变数值。即,definition文件可用于定义memory文件的格式和结构。当然,考虑到对调试信息的查看不仅仅是调试时,还可能在后续分析中应用,因而definition文件还可定义二进制文件格式。symbol文件即指明二进制文件和memory文件的内存地址。需要说明的是,symbol文件与definition文件具有匹配对应关系。例如,若definition文件仅定义了memory文件的格式和结构时,则symbol文件则仅需指定memory文件的内存地址;若definition文件仅定义了二进制文件和memory文件的格式和结构时,则symbol文件则仅需指定二进制文件和memory文件的内存地址。s103、运行系统程序,利用definition文件并结合symbol文件将trace模块输出的trace信息写入内存中。运行系统程序时,系统程序中的trace模块,便会输出trace信息。此时,可利用definition文件并结合symbol文件将trace信息写入内存中。具体的,若definition文件仅定义了memory文件的格式和结构,则运行系统程序时,记录trace信息的过程包括:步骤一、运行系统程序,获得trace模块输出的trace信息;步骤二、将trace信息按照symbol文件生成memory文件;步骤三、将memory文件存储至symbol文件指定的内存地址中。若definition文件仅定义了memory文件的格式和结构,则运行系统程序时,记录trace信息的过程包括:步骤一、运行系统程序,获得trace模块输出的trace信息;步骤二、将trace信息按照symbol文件生成二进制文件和memory文件;步骤三、将二进制文件和memory文件存储至symbol文件指定的内存地址中。即根据definition文件的定义,以及与definition文件匹配的symbol文件,将trace信息仅生成相应的memory文件,或生成相应的memory文件和二进制文件。需要说明的是,上述的在运行系统程序,获得trace模块输出的trace信息,具体均可为:步骤一、运行系统程序,获得trace模块输出的trace公有信息和trace_entry信息;其中,trace信息包括trace模块对应的存储模块;步骤二、将trace公有信息和trace_entry信息确定为trace信息。其中,trace信息包括trace公有信息和trace_entry信息;且trace公有信息具体可指trace信息的基本信息,如模块、时间、tracepoint等;trace_entry信息则可为开发者自行定制,需在调试时显示的关键信息。s104、利用symbol文件,从内存中读取trace信息。将trace信息写入内存之后,便可利用symbol文件,从内存中读取该trace信息。例如,使用诸如可直接读取内存空间的inbe工具,利用symbol文件所记载的内存地址,从该内存地址中读取trace信息。s105、利用definition文件对trace信息进行解析,获得变量结构体对应的系统数据变化信息,并在可视化界面显示系统数据变化信息。在读取到trace信息之后,可利用definition文件对该trace信息进行解析,获得变量结构体对应的系统数据变化信息。具体的,即可利用symbol文件,从内存中实时读取memory文件。然后使用definition文件对memory文件进行解析,获得系统数据变化信息。然后,在可视化界面显示该系统数据变化信息。例如,可在inbe工具中显示该系统数据变化信息。当然,还可是要其他可视化工具对系统数据变化信息进行显示。应用本发明实施例所提供的方法,在系统程序中添加trace模块,在对系统程序进行编译时,获取指定格式的变量结构体,并生成与该变量结构体对应的definition文件,以及该definition文件对应的symbol。然后,运行系统程序时,由于添加了trace模块,trace模块便会输出trace信息,此时利用definition文件和symbol文件,将trace信息写入内存中。首先利用symbol文件确定trace信息的内存地址,从该内存地址中读取trace信息时,并利用definition文件对trace信息进行解析,便可获得该变量结构体对应的系统数据变化信息,可在可视化界面显示系统数据变化信息。如此,便可快速获取调试过程中,系统程序中的各个变量结构体的系统数据变化信息。相较于现有的inbe工具根据仅能查看个别数据结构定义的单一时刻的变量而言,本发明实施例所提供的程序调试方法,可快速获得多个变量结构体的数据变化信息。即,本发明实施例所提供的程序调试方法,可记录多个结构变量体的系统数据变化信息,如此便可提升程序调试效率,进一步缩短系统程序的开发时长。需要说明的是,基于上述实施例,本发明实施例还提供了相应的改进方案。在优选/改进实施例中涉及与上述实施例中相同步骤或相应步骤之间可相互参考,相应的有益效果也可相互参照,在本文的优选/改进实施例中不再一一赘述。优选地、在对trace信息进行解析时,可利用definition文件对trace信息进行解析,获得变量结构体对应的系统数据变化信息,以及变量结构体对应的存储模块。即,当存在多个变量结构体时,不仅可从trace信息中解析出系统数据变化信息,还可解析出系统数据变化信息对应的存储模块,便于在出现问题时,快速定位到问题模块。可进一步缩短调试时间,缩短开发时间。实施例二:为便于本领域技术人员更好的理解本发明实施例所提供的技术方案,下面以结合inbe工具中,进行查询调试为例对本发明实施例所提供的技术方案进行详细说明。请参考图2,首先,trace模块定义了trace_table,由n个trace_entry构成,entry的结构可以定义,即定义了通用接口,可应对多参数情况trace记录;其次,在使用时需要定义并初始化trace_table,为tracetable分配内存空间,然后可以使用接口函数记trace;最后,通过inbe可以查看定义的trace信息。存储系统程序实现时主要包括:定义trace的selfdefinestruct,需要记录和显示的trace内容,即definition文件里的内容;初始化tracetable,分配内存空间;运行过程中各模块在关键位置使用接口trace来记录;通过inbe实时内存或二进制文件查看trace信息。若将本发明实施例所提供的技术方案划分为:trace模块和inbe工具实现模块。则trace模块的实现初始化过程:初始化tracetable,tracetable包含n个entry和记trace过程:调用trace()接口,按照自定义结构selfdefinestruct,填充entry。inbe工具实现模块,即在调试时使用inbe来查看该tracetable信息。trace模块,通过提供的接口函数在各模块内部记录trace到内存空间,利用inbe工具进行解析查看,可以记录程序运行过程中关键节点的信息。本发明实施例所提供的技术方案,可使开发过程的调试更加灵活高效,节约开发时间,降低研发成本。实施例三:相应于上面的方法实施例,本发明实施例还提供了一种程序调试装置,下文描述的程序调试装置与上文描述的程序调试方法可相互对应参照。参见图3所示,该装置包括以下模块:变量结构体获取模块101,用于对添加了trace模块的系统程序进行编译,获取系统程序中指定格式的变量结构体;文件生成模块102,用于生成变量结构体对应的definition文件,以及与definition文件对应的symbol文件;trcae信息存储模块103,用于运行系统程序,利用definition文件并结合symbol文件将trace模块输出的trace信息写入内存中;trace信息读取模块104,用于利用symbol文件,从内存中读取trace信息;trace信息分析显示模块105,用于利用definition文件对trace信息进行解析,获得变量结构体对应的系统数据变化信息,并在可视化界面显示系统数据变化信息。应用本发明实施例所提供的装置,在系统程序中添加trace模块,在对系统程序进行编译时,获取指定格式的变量结构体,并生成与该变量结构体对应的definition文件,以及该definition文件对应的symbol。然后,运行系统程序时,由于添加了trace模块,trace模块便会输出trace信息,此时利用definition文件和symbol文件,将trace信息写入内存中。首先利用symbol文件确定trace信息的内存地址,从该内存地址中读取trace信息时,并利用definition文件对trace信息进行解析,便可获得该变量结构体对应的系统数据变化信息,可在可视化界面显示系统数据变化信息。如此,便可快速获取调试过程中,系统程序中的各个变量结构体的系统数据变化信息。相较于现有的inbe工具根据仅能查看个别数据结构定义的单一时刻的变量而言,本发明实施例所提供的程序调试装置,可快速获得多个变量结构体的数据变化信息。即,本发明实施例所提供的程序调试装置,可记录多个结构变量体的系统数据变化信息,如此便可提升程序调试效率,进一步缩短系统程序的开发时长。在本发明的一种具体实施方式中,trcae信息存储模块103,具体用于运行系统程序,获得trace模块输出的trace信息;将trace信息按照symbol文件生成memory文件;将memory文件存储至symbol文件指定的内存地址中。在本发明的一种具体实施方式中,trcae信息存储模块103,具体用于运行系统程序,获得trace模块输出的trace信息;将trace信息按照symbol文件生成二进制文件和memory文件;将二进制文件和memory文件存储至symbol文件指定的内存地址中。在本发明的一种具体实施方式中,trcae信息存储模块103,具体用于运行系统程序,获得trace模块输出的trace公有信息和trace_entry信息;其中,trace信息包括trace模块对应的存储模块;将trace公有信息和trace_entry信息确定为trace信息。在本发明的一种具体实施方式中,trace信息分析显示模块105,具体用于利用definition文件对trace信息进行解析,获得变量结构体对应的系统数据变化信息,以及变量结构体对应的存储模块。在本发明的一种具体实施方式中,trace信息读取模块104,具体用于利用symbol文件,从内存中实时读取memory文件。在本发明的一种具体实施方式中,还包括:变量结构体编码模块,用于在对添加了trace模块的系统程序进行编译,获取系统程序中指定格式的变量结构体之前,接收调试信息显示请求,并确定调试信息显示请求对应的变量结构体;在对系统程序进行编码时,将变量结构体编码为指定格式。实施例四:相应于上面的方法实施例,本发明实施例还提供了一种程序调试设备,下文描述的一种程序调试设备与上文描述的一种程序调试方法可相互对应参照。参见图4所示,该程序调试设备包括:存储器d1,用于存储计算机程序;处理器d2,用于执行计算机程序时实现上述方法实施例的程序调试方法的步骤。具体的,请参考图5,为本实施例提供的一种程序调试设备的具体结构示意图,该程序调试设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)322(例如,一个或一个以上处理器)和存储器332,一个或一个以上存储应用程序342或数据344的存储介质330(例如一个或一个以上海量存储设备)。其中,存储器332和存储介质330可以是短暂存储或持久存储。存储在存储介质330的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据处理设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储介质330通信,在程序调试设备301上执行存储介质330中的一系列指令操作。程序调试设备301还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341。例如,windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等。上文所描述的程序调试方法中的步骤可以由程序调试设备的结构实现。实施例五:相应于上面的方法实施例,本发明实施例还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种程序调试方法可相互对应参照。一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的程序调试方法的步骤。该可读存储介质具体可以为u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可存储程序代码的可读存储介质。专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1