一种程序调试方法和装置的制造方法

文档序号:9417286阅读:230来源:国知局
一种程序调试方法和装置的制造方法
【技术领域】
[0001]本申请涉及计算机技术,特别涉及一种程序调试方法和装置。
【背景技术】
[0002]在程序的编译生成阶段,通过参数设置可以在最终程序代码中保留一些调试所需的符号表等信息,以便于根据这些信息调试程序来寻找程序中的逻辑漏洞,包含这些调试所需的符号表等信息的程序版本可以称为调试版本即Debug版本。而实际发布程序时,出于代码体积和安全的考虑,交付到客户的程序版本一般为发布版本即Release版本。Release版本与Debug版本的功能一致,只是去掉了符号等信息。例如,在一些交付到用户手中的网络设备(如,路由器、交换机)中包括的程序即为Release版本的程序。
[0003]但是可能出现的情况是,由于实验室中环境有限,导致一些问题发生在用户现场的Release版本中,比如产生程序运行故障。目前在定位Release版本程序的故障所在时,可以采用的一种方式是根据Release版本运行中产生的dump镜像文件分析故障,但是dump文件并非每次都能产生(只在发生致命问题时发生),或者,当没有dump文件时由定位人员根据经验和沟通猜解问题所在,这些方式都使得对Release版本程序的问题定位效率较低,从而也对Release版本运行所在的设备(例如,上述路由器、交换机)的故障修复造成困难,影响设备使用。

【发明内容】

[0004]有鉴于此,本申请提供一种程序调试方法和装置,以提高对Release版本的故障定位效率。
[0005]具体地,本申请是通过如下技术方案实现的:
[0006]第一方面,提供一种程序调试方法,包括:
[0007]根据加载的Debug版本程序设置的调试信息中的调试位置,转换成对应的内存地址,所述Debug版本程序与待测试的Release版本程序对应;
[0008]将所述内存地址以及对应的所述调试信息中的调试动作信息发送至所述Release版本程序所在的程序调试装置,以使得所述程序调试装置在所述Release版本程序的所述内存地址处进行所述调试动作信息对应的调试处理;
[0009]接收所述程序调试装置返回的调试处理结果,所述调试处理结果包括所述内存地址、以及结果信息,将所述内存地址转换为Debug版本程序的所述调试位置,得到所述调试位置处的所述结果信息。
[0010]第二方面,提供一种程序调试方法,包括:
[0011]接收Debug版本程序所在的程序调试装置发送的内存地址、以及对应的调试动作信息,所述Debug版本程序与待测试的Release版本程序对应;
[0012]在所述Release版本程序的所述内存地址处,进行所述调试动作信息对应的调试处理;
[0013]将调试处理结果反馈至所述程序调试装置,所述调试处理结果包括所述内存地址、以及结果信息,以使得所述程序调试装置将所述内存地址转换为Debug版本程序的所述调试位置,得到所述调试位置处的所述结果信息。
[0014]第三方面,提供一种程序调试装置,包括:
[0015]地址转换模块,用于根据加载的Debug版本程序设置的调试信息中的调试位置,转换成对应的内存地址,所述Debug版本程序与待测试的Release版本程序对应;
[0016]信息发送模块,用于将所述内存地址以及对应的所述调试信息中的调试动作信息发送至所述Release版本程序所在的程序调试装置,以使得所述程序调试装置在所述Release版本程序的所述内存地址处进行所述调试动作信息对应的调试处理;
[0017]转换结果模块,用于接收所述程序调试装置返回的调试处理结果,所述调试处理结果包括所述内存地址、以及结果信息,将所述内存地址转换为Debug版本程序的所述调试位置,得到所述调试位置处的所述结果信息。
[0018]第四方面,提供一种程序调试装置,包括:
[0019]信息接收模块,用于接收Debug版本程序所在的程序调试装置发送的内存地址、以及对应的调试动作信息,所述Debug版本程序与待测试的Release版本程序对应;
[0020]调试处理模块,用于在所述Release版本程序的内存地址处,进行所述调试动作信息对应的调试处理;
[0021]结果反馈模块,用于将调试处理结果反馈至所述程序调试装置,所述调试处理结果包括所述内存地址、以及结果信息,以使得所述程序调试装置将所述内存地址转换为Debug版本程序的所述调试位置,得到所述调试位置处的所述结果信息。
[0022]本申请提供的程序调试方法和装置,通过将对Debug版本程序的调试位置转换成内存地址发送至Release版本程序所在的程序调试装置,可以使得根据内存地址对Release版本程序进行源码级的调试,从而提高了对Release版本的故障定位效率。
【附图说明】
[0023]图1是本申请一示例性实施例示出的一种程序调试方法的应用场景;
[0024]图2是本申请一示例性实施例示出的一种程序调试方法的流程图;
[0025]图3是本申请一示例性实施例示出的另一种程序调试方法的流程图;
[0026]图4是本申请一示例性实施例示出的又一种程序调试方法的流程图;
[0027]图5是本申请一示例性实施例示出的一种程序调试装置的结构图;
[0028]图6是本申请一示例性实施例示出的另一种程序调试装置的结构图。
【具体实施方式】
[0029]这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
[0030]本申请实施例的程序调试方法,可以应用于对已发布的Release版本的故障定位,例如可以用于对路由器中的Release版本程序的问题检测。
[0031]图1示例了该程序调试方法的应用场景,如图1所示,设备A中装有待测试的Release版本程序,测试人员可以通过设备B对Release版本程序进行调试,以定位程序故障所在。当然,也不排除设备A和设备B是同一台设备。
[0032]为了调试Release版本程序,测试人员还可以准备如下两种工具:
[0033]其中一个工具是,与待测试的Release版本程序对应的Debug版本程序:
[0034]例如,如果Debug版本程序和Release版本程序编译所用的源码相同,且编译过程中,除了是否保留符号表等调试所需信息的参数不同之外,其他参数均保持一致,则可以称这两种版本的程序对应。并且,Release版本与Debug版本的功能一致,只是相比Debug版本缺少了符号表等调试所需信息。该与待测试的Release版本程序对应的Debug版本程序可以设在设备B侧,以供测试人员在调试时使用。
[0035]另一个工具是,程序调试系统:
[0036]例如,如图1所示,该系统可以包括:设置在设备B的程序调试工具客户端、以及设置在设备A的程序调试工具服务端。即程序调试工具客户端可以设置在测试人员这一侧,加载与待测试的Release版本程序对应的Debug版本程序;而程序调试工具服务端可以设置在待测试的Release版本程序侧,用于加载Release版本,也就是本实施例的调试目标。
[0037]本实施例以gdb+gdbserver的调试系统为例,即程序调试工具客户端例如可以为gdb (GNU symbolic debugger,GNU符号调试器),通过gdb加载Debug版本程序,程序调试工具服务端例如可以为gdbserver,用于通过gdbserver加载Release版本程序。具体实施中也可以使用其他功能类似的程序调试工具。
[0038]在准备上述两种工具后,可以通过gdb与gdbserver之间的通信,来实现本实施例的程序调试方法。其中,gdb与gdbserver之间可以通过IP地址以及端口号进行通信,例如,gdbserver在设备A端运行后,监听本地特定端口,设备B的gdb与设备A中的gdbserver所监听的端口建立链接。
[0039]如下将以gdb+gdbserver的调试系统为例,详细描述如何结合Debug版本程序对Release版本程序进行源码级的调试,该源码级的调试即可以将Release版本程序与Debug版本程序的源代码建立关联,从而尽快的查找导致Release版本程序的故障问题的源代码所在。
[0040]图2示例了本申请的程序调试方法的流程,该流程是以设备B的程序调试工具客户端gdb执行为例,如图2所示,可以包括:
[0041]201、根据加载的Debug版本程序设置的调试信息中的调试位置,转换成对应的内存地址,所述Debug版本程序与待测试的Release版本程序对应;
[0042]例如,在实际实施中,可以通过版本号来确定对应的Debug版本程序与待测试的Release版本程序。如果Debug版本程序和Release版本程序编译所用的源码相同,且编译过程中,除了是否保留符号表等调试所需信息的参数不同之外,其他参数均保持一致,则可以称这两种版本的程序对应。对于这种对应的Debug版本程序和Release版本程序,可以使用相同的版本号。
[00
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1