掌桥专利:专业的专利平台
掌桥专利
首页

一种程序调试方法、计算设备及储存介质

文献发布时间:2023-06-19 12:22:51


一种程序调试方法、计算设备及储存介质

本发明是2021年3月23日申请的发明专利2021103049429的分案申请。

技术领域

本发明涉及操作系统技术领域,特别涉及一种应用程序的调试方法、计算设备及储存介质。

背景技术

应用软件(Application),是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的程序的集合。应用软件能够满足不同领域、不同问题的应用需求,因此,应用软件的使用越来越广泛。

然而,只有在应用软件中的程序调试无误后,才会将应用软件应用于实际环境中,因此,对程序进行调试,是应用软件开发过程中的重要环节。目前在Linux操作系统中,通常记录程序崩溃或出现故障的最后一刻的数据,并将事件记录数据在用户界面进行展示,用户通过点击时间线查看应用程序崩溃或出现故障的最后一刻的数据,以找出程序报错的原因。但是,由于程序发生崩溃或出现故障的最后一刻的数据信息较少,无法准确、快速地追溯程序报错的原因。

为此,需要一种程序调试方法来解决上述技术方案中存在的问题。

发明内容

为此,本发明提供一种程序调试方法,以力图解决或者至少缓解上面存在的问题。

根据本发明的一个方面,提供了一种程序调试方法,在操作系统中执行,所述操作系统适于管理存储设备,所述存储设备中存储所述程序执行过程中发生的各事件的相关数据和指示各事件发生的时间信息,所述方法包括:

从所述存储设备获取所述程序中发生的各事件的相关数据和对应时间信息;

基于所获取的相关数据和时间信息绘制时间线和事件列表;

响应于用户点击所述时间线的时间点,查找与所点击的时间点相对应的事件,并获取与所查找到的事件相对应的相关数据;以及

呈现与所述时间点相对应事件的相关数据。

可选地,还包括步骤:

响应于用户点击事件列表的事件,获取与所点击的事件相对应的相关数据;以及

呈现与所点击事件相对应的相关数据。

可选地,还包括步骤:

追踪所述程序的执行,以便当所述程序执行过程中发生预设事件时,暂停所述程序的执行;

获取所述预设事件的相关数据以及对应的时间信息;

将所述预设事件的相关数据和所述预设事件对应的时间信息保存至所述存储设备。

可选地,所述预设事件包括:系统调用、接收信号、总线事件以及X11事件中的一种或多种。

可选地,所述操作系统包括虚拟系统,所述虚拟系统为模拟的、与所述操作系统相同的系统环境,所述暂停所述程序的执行的步骤包括:

判断所述预设事件类型,若所述预设事件是系统调用或接收信号,则直接暂停所述程序的执行;

若所述预设事件是总线事件或X11事件,则通过虚拟系统调用暂停所述程序的执行。

可选地,所述若所述预设事件是总线事件或X11事件,则通过虚拟系统调用暂停所述程序的执行的步骤包括:

预先在程序的地址空间注入了一个动态库,其中,所述动态库拦截了总线事件和X11事件的收发函数;

判断出现是否接收到总线事件或X11事件,若是,调用所述动态库的拦截函数;

根据已调用的拦截函数发起虚拟系统调用,暂停所述程序的执行。

可选地,所述将所述预设事件的相关数据和所述预设事件对应的时间信息保存至所述存储设备的步骤包括:

基于数据流处理对象统一所述预设事件的相关数据和所述预设事件对应的时间信息的格式;

对统一格式的相关数据和时间信息进行压缩,并保存至所述存储设备。

可选地,所述从所述存储设备获取所述程序中发生的各事件的相关数据和对应时间信息的步骤包括:

确定所述程序中发生的各事件的相关数据和对应时间信息的存储地址;

从所述存储地址中读取所述程序执行过程中发生的各事件的相关数据和对应时间信息。

可选地,还包括步骤:

基于所获取的相关数据生成轻量级coredump文件,其中,所述轻量级coredump文件为程序出错而发生异常中断时,存储运行程序当前的内存状况的core文件;

通过集成开发环境加载所述轻量级coredump文件,进入所述集成开发环境的调试界面;

通过所述集成开发环境通知调试器加载所述轻量级coredump文件;

其中,所述呈现已获取的所述相关数据的步骤包括:

在所述调试界面呈现所述轻量级coredump文件的内容。

可选地,所述呈现与所点击事件相对应的相关数据的步骤包括:

在所述调试界面呈现与所点击事件相对应的相关数据的所述轻量级coredump文件的内容。

可选地,所述相关数据包括:寄存器数据、线程栈数据、进程地址空间数据、时间戳、执行所述程序的进程的堆数据、全局变量数据中的一种或多种。

可选地,所述操作系统为Linux操作系统。

根据本发明的一个方面,提供了一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如上所述的页面内容的处理方法的指令。

根据本发明的一个方面,提供了一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述方法。

根据本发明的技术方案,提供了一种程序调试方法,该方法中,可以记录从开始运行程序时起至程序报错或者程序执行完成时刻的所有事件的相关数据,通过记录的相关数据在用户界面绘制时间线和事件列表,并响应开发人员触发时间线上的某一时间点或事件列表的某一事件,呈现该时刻或该事件的相关数据,由于程序在执行过程中发生的事件的相关数据能够反映程序的执行过程,因此,本发明的程序调试方法能够回放程序出错之前的执行过程,因此调试人员可以快速定位程序出错的原因,且供调试人员参考的事件相关数据内容比较丰富,使得定位程序出错的原因的准确性得以提高。具体地,从存储设备获取程序中发生的各事件的相关数据和对应时间信息,基于所获取的相关数据和时间信息绘制时间线和事件列表,响应于用户点击时间线的时间点,查找与所点击的时间点相对应的事件,并获取与所查找到的事件相对应的相关数据,以及呈现与时间点相对应事件的相关数据,或者响应于用户点击事件列表的事件,获取与所点击的事件相对应的相关数据,以及呈现与所点击事件相对应的相关数据。

特别是程序发生崩溃或出错的现场是生产环境的,只需收集程序执行过程中发生的所有事件的相关数据,并发送给开发人员,开发人员无需到生产环境就能分析、定位程序出错的原因,从而快速解决问题,节省时间,提高工作效率。

附图说明

为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。

图1示出了根据本发明一个实施例的计算设备100的示意图;

图2示出了根据本发明一个实施例的程序调试方法200的流程图;

图3示出了根据本发明一个实施例的记录预设事件的相关数据的方法300的流程图;

图4示出了根据本发明一个实施例的时间线和事件列表的示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

目前在Linux操作系统中,通常记录程序崩溃或出错的最后一刻的数据,并将事件记录数据在调试界面进行展示,用户通过点击时间线查看应用程序崩溃或出现故障的最后一刻的数据,以找出程序报错的原因。但是,分析程序发生崩溃或出现故障的最后一刻的数据,无法查看程序执行过程中各时间点的信息,仅仅根据程序发生崩溃或出现故障的最后一刻的数据作为调试程序的依据,信息较少,无法准确、快速地追溯程序存在的错误。

为此,本发明提出了一种程序调试方法,该方法中,可以记录从开始运行程序时起至程序报错时刻的所有事件的相关数据,通过记录的相关数据在用户界面绘制时间线和事件列表,并响应开发人员触发时间线上的某一时间点或事件列表的某一事件,呈现该时刻或该事件的相关数据,由于程序在执行过程中发生的事件的相关数据能够反映程序的执行过程,因此,本发明的程序调试方法能够回放程序出错之前的执行过程,因此调试人员可以快速定位程序出错的原因。且供调试人员参考的事件相关数据内容比较丰富,使得定位程序出错的原因的准确性得以提高。

具体地,从存储设备获取程序中发生的各事件的相关数据和对应时间信息,基于所获取的相关数据和时间信息绘制时间线和事件列表,响应于用户点击时间线的时间点,查找与所点击的时间点相对应的事件,并获取与所查找到的事件相对应的相关数据,以及呈现与时间点相对应事件的相关数据,或者响应于用户点击事件列表的事件,获取与所点击的事件相对应的相关数据,以及呈现与所点击事件相对应的相关数据。

特别是程序发生崩溃或出现故障的现场是生产环境的,只需收集程序执行过程中发生的所有事件的相关数据,并发送给开发人员,开发人员无需到生产环境就能分析、定位程序出错的原因,从而快速解决问题,节省时间,提高工作效率。

本发明提供的程序调试方法在操作系统中执行,在一个实施例中,本发明的操作系统可以安装在一种计算设备中,使得本发明的程序调试方法可以在操作系统中执行。图1示出了根据本发明一个实施例的计算设备100的结构图。计算设备100的框图如图1所示,在基本配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。

取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。

取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上利用程序数据124进行操作。程序数据124包括指令,在根据本发明的计算设备100中,程序数据124包含用于执行程序调试方法200的指令。

计算设备100还包括储存设备132,储存设备132包括可移除储存器136和不可移除储存器138,可移除储存器136和不可移除储存器138均与储存接口总线134连接。本发明中,程序执行过程中发生的各事件的相关数据和指示各事件发生的时间信息,可存储于储存设备132中,操作系统120适于管理储存设备132。其中,储存设备132可为磁盘。

计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。

网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。

计算设备100可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器和WEB服务器等,也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。计算设备100还可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。在一些实施例中,计算设备100的操作系统120被配置为执行根据本发明的一种程序调试方法200。

图2示出了根据本发明一个实施例的程序调试方法200的流程图。方法200适于在计算设备100(例如前述计算设备100)的操作系统120中执行。

在一个实施方式中,操作系统可为Linux操作系统,当然,也可以是Unix、Windows等操作系统,本发明对此不做限制。

在以下描述本发明实施方式的过程中,出现的各事件的相关数据包括:寄存器数据、线程栈数据、进程地址空间数据、时间戳、目标进程的堆数据、全局变量数据。可以看出,本发明中记录的各事件的相关数据种类较多、内容丰富,可以更准确地回放程序的执行过程,帮助调试人员更快速地分析程序出错的原因。

同样地,在以下描述本发明实施方式的过程中,出现的预设事件包括:系统调用、接收信号、总线事件以及X11事件。其中,系统调用是操作系统为用户态进程与硬件设备进行交互提供的一组接口,接收信号是程序执行过程中接收到的信号,总线事件为dbus总线事件,X11事件是X11协议事件。系统调用、总线事件以及X11事件也可统称为系统调用。

如图2所示,程序调试方法200始于步骤S210,在执行步骤S210之前,需要先记录程序执行过程中发生的事件的相关数据。如图3所示,图3为程序执行过程中记录事件相关数据的方法流程图,该方法包括步骤S310至步骤S330。在步骤S310中,追踪程序的执行,以便当程序执行过程中发生预设事件时,暂停程序的执行。

在一个实施方式中,调试程序之前,需要先建立程序与调试器之间的追踪关系,并等待程序发生预设事件,当程序执行过程中发生系统调用或者收到信号时,操作系统120会自动暂停程序的执行,并通知调试器发生了系统调用或收到信号。具体地,可利用ptrace系统接口建立程序与调试器之间的追踪关系,并通过调用waitpid函数等待程序发生预设事件,当程序执行过程中发生系统调用或者收到信号时,操作系统通知waitpid函数返回,调试器通过解析waitpid函数的status返回值,可以判断程序是收到了同步信号、异步信号或者发起了系统调用,并暂停程序的执行。其中,调试器可为gdb调试器,当然本发明对此并不限制,已有技术中的调试器均在本发明的保护范围之内。

需要说明的是,操作系统包括虚拟系统,虚拟操作也常被称为影子系统,是一种计算机软件,可以在现有的操作系统上虚拟出一个相同的系统环境,即虚拟系统与真实的操作系统完全一样。安装虚拟系统后,计算设备相当于安装了双操作系统,两个操作系统之间相互隔离,原操作系统的运行不受影响,用户进入虚拟系统后,可随时选择启用或者退出这个虚拟系统,并在该虚拟环境中运行应用程序,所有操作都是虚拟的,不会对原操作系统产生影响,一切操作将在退出虚拟系统后消失。

在另一个实施方式中,同样可利用ptrace系统接口建立程序与调试器之间的追踪关系,并通过调用waitpid函数等待程序发生预设事件,当事件为总线事件和X11事件时,通过虚拟系统调用停止程序的执行。具体地,预先在程序的地址空间注入了一个动态库,该动态库拦截了总线事件和X11事件的收发函数,当程序收到了总线事件和X11事件之后,调用动态库的拦截函数,通过拦截函数发起一个虚拟系统调用,比如在x86 64位的操作系统中,对于X11事件虚拟系统调用的调用号是(__NR_Linux+1000-2),对于总线事件虚拟系统调用的调用号是(__NR_Linux+1000-1),并通知调试器传递总线事件和X11事件的详细信息。虽然是虚拟系统调用,但是操作系统120仍然会暂停程序的执行。

但是,解析waitpid函数的status返回值后只能区分程序发生了系统调用或者收到信号,无法确定系统调用的具体形式,而系统调用、总线事件以及X11事件也可统称为系统调用。因此,为了解决该问题,当判断调试器解析waitpid函数的status返回值是系统调用之后,借助ptrace系统接口的PTRACE_GETREGSET命令进一步获取系统调用的调用号的寄存器值,从而确定系统调用的具体类别,如果系统调用的调用号为(__NR_Linux+1000-2),表示程序执行过程中发生了X11事件,如果系统调用的调用号为(__NR_Linux+1000-1),表示程序执行过程中发生了总线事件,否则为正常的系统调用。

当操作系统120暂停程序的执行后,执行步骤S320,获取预设事件的相关数据以及对应的时间信息,例如,利用ptrace系统接口获取预设事件的相关数据以及对应的时间信息。随后执行步骤S330,将预设事件的相关数据和预设事件对应的时间信息保存至存储设备。

在一个实施方式中,将预设事件的相关数据以及对应的时间信息发送给数据至数据流处理对象,基于数据流处理对象统一预设事件的相关数据和预设事件对应的时间信息的格式,对统一格式后的相关数据和时间信息进行压缩,并保存至储存设备132,以便为后续的程序调试提供足够的数据。其中,可通过高性能压缩对象压缩对统一格式后的相关数据和时间信息进行压缩,当然本发明对此并不限制,已有技术中能够对数据进行压缩的方式均在本发明的保护范围之内。

将当前预设事件的所有相关数据保存至储存设备132之后,利用ptrace系统接口使得程序继续运行,当程序报错时或程序执行完成后执行步骤S210。在步骤S210中,从存储设备获取程序中发生的各事件的相关数据和对应时间信息。

在一个实施方式中,确定程序中发生的各事件的相关数据和对应时间信息在储存设备132的存储地址,调用数据获取接口,通过数据获取接口从存储地址中读取程序执行过程中发生的各事件的相关数据和对应时间信息。

随后,在步骤S220中,基于所获取的相关数据和时间信息绘制时间线和事件列表。具体地,在用户界面窗口展示时间线和事件列表,例如,可在软件集成开发环境QtCreator的调试界面展示时间线和事件列表。如图4所示,图4为集成开发环境QtCreator的调试界面展示时间线和事件列表的示意图,由图4可知,图中顶部横向直线为时间线,横向直线中的多个纵向线为时间点,调试人员可点击时间线的任意时间点。图4中还包括多行数据,多行数据即为事件列表,每一行数据为一个事件,用户可点击事件列表中任意事件。

接下来在步骤S230中,响应于用户点击时间线的时间点,查找与所点击的时间点相对应的事件,并获取与所查找到的事件相对应的相关数据。具体地,当调试人员点击时间线的任意时间点时,查找与所点击的时间点相对应的事件,并从已获取的各事件的相关数据中加载与所查询到的事件相对应的相关数据。

当然,还可响应于用户点击事件列表的事件,获取与所点击的事件相对应的相关数据。例如,响应于用户点击事件列表的事件,直接以用户点击事件的行号来查询对应的事件,并从已获取的各事件的相关数据中加载与所查询到的事件相对应的相关数据。

在获取到与所查找到的事件相对应的相关数据后,基于所获取的相关数据生成轻量级coredump文件,其中,轻量级coredump文件为程序出错而发生异常中断时,存储运行程序当前的内存状况的core文件。最后,在步骤S240中,呈现与时间点相对应事件的相关数据。当然,也可呈现与所点击事件相对应的相关数据。

需要说明的是,若直接将轻量级coredump文件发送至调试器,只能通过调试器的命令行接口调试程序,但是由于命令行接口使用模式不方便,导致通过调试器展示预设事件的相关数据的视图交互不友好。因此,为了解决上述问题,先将轻量级coredump文件发送给集成开发环境QtCreator,由集成开发环境QtCreator加载后发送给调试器,实现了在调试器调试程序的过程中,利用集成开发环境QtCreator的调试模式的视图界面展示预设事件的相关数据,使得视图界面交互更友好。

在一个实施方式中,通过集成开发环境QtCreator加载轻量级coredump文件,进入集成开发环境QtCreator调试模式的视图界面,并通过集成开发环境通知调试器加载轻量级coredump文件。

例如,在获取到与所查找到的事件相对应的相关数据后,将所获取的相关数据生成轻量级coredump文件,利用集成开发环境QtCreator的接口Debugger::createDebuggerRunControl,构造一个加载轻量级coredump文件的请求,通过加载轻量级coredump文件的请求使得集成开发环境QtCreator自动加载已生成的轻量级coredump文件。随后利用集成开发环境QtCreator的gdb mi接口通知调试器加载轻量级coredump文件,在调试器加载轻量级coredump文件的同时,将集成开发环境QtCreator的调试界面窗口内容同步更新为轻量级coredump文件的内容,从而实现了在调试器调试程序的过程中,利用集成开发环境QtCreator调试模式的视图界面展示预设事件的相关数据,使得视图界面交互更友好。

由上述内容可知,本发明的程序调试方法中,可以记录从开始运行程序时起至程序出错或者程序执行完成时刻的所有事件的相关数据,通过记录的相关数据在用户界面绘制时间线和事件列表,并响应开发人员触发时间线上的某一时间点或事件列表的某一事件,呈现该时刻或该事件的相关数据,由于程序在执行过程中发生的事件的相关数据能够反映程序的执行过程,因此,本发明的程序调试方法能够回放程序出错之前的执行过程,因此调试人员可以快速定位程序出错的原因。且供调试人员参考的事件相关数据内容比较丰富,使得定位程序出错的原因的准确性得以提高。

其次,特别是程序发生崩溃或出现故障的现场是生产环境的,只需收集程序执行过程中发生的所有事件的相关数据,并发送给开发人员,开发人员无需到生产环境就能分析、定位程序出错的原因,从而快速解决问题,节省时间,提高工作效率。

另外,本发明中在调试器调试程序的过程中,通过集成开发环境的调试模式的视图界面展示预设事件的相关数据,能够使得视图界面交互更友好。

A9如A2所述的方法,其中,所述呈现与所点击事件相对应的相关数据的步骤包括:

在所述调试界面呈现与所点击事件相对应的相关数据的所述轻量级coredump文件的内容。

A10如A1至A9中任一项所述的方法,其中,所述相关数据包括:寄存器数据、线程栈数据、进程地址空间数据、时间戳、执行所述程序的进程的堆数据、全局变量数据中的一种或多种。

A11如A1至A10中任一项所述的方法,其中,所述操作系统为Linux操作系统。

这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的程序调试方法。

以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。

在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

相关技术
  • 一种程序调试方法、计算设备及储存介质
  • 一种程序调试方法、计算设备及储存介质
技术分类

06120113270339