CN104536892B - 一种软件在线调试方法和*** - Google Patents
一种软件在线调试方法和*** Download PDFInfo
- Publication number
- CN104536892B CN104536892B CN201510003876.6A CN201510003876A CN104536892B CN 104536892 B CN104536892 B CN 104536892B CN 201510003876 A CN201510003876 A CN 201510003876A CN 104536892 B CN104536892 B CN 104536892B
- Authority
- CN
- China
- Prior art keywords
- tracked
- software
- instruction
- debugging
- little
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种软件在线调试方法和***,其中,所述方法包括:确定软件中的被追踪点;当执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境;调用已存储的在线调试指令,执行调试任务,输出在线调试信息;恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序。本发明提供的软件在线调试方法和***,以程序调用的形式调用调试指令,方便了调试指令的修改与删除,避免了将调试指令直接以硬编码的形式写入软件程序;同时,也不需要重启软件程序;实现在调试过程中任意更改调试指令。
Description
技术领域
本发明涉及程序调试领域,尤其涉及一种软件在线调试方法和***。
背景技术
目前,在软件开发以及软件开发后的使用过程中,不可避免地会出现各种软件问题。现有的用于定位软件问题的方法包括:运行日志、调试命令、单步追踪。
上述方法中,运行日志和调试命令需要将产生日志和调试信息的调试指令通过硬编码的方式预先写入软件程序的相应位置。通过硬编码写入的调试指令不易更改和删除,也因为通过硬编码写入的调试不易删除,占用了内存,使得在任意软件位置对软件错误进行定位变得不可行。此外,当技术人员通过硬编码的方式将调试指令写入软件程序的相应位置后,还需要对写入调试指令的软件程序重新进行调度、编译、连接和运行,在软件程序重新运行后,原先软件错误的运行环境可能发生丢失/改变,使软件错误不易复现。
上述方法中,单步追踪为每执行完一条语句以后,就会停下来,显示运行情况,这种方法要求技术人员一直在现场以便对每条语句的运行结果进行分析,及时发现错误,并且这种方法更适合单任务的软件程序的调试。而在网络设备的实时软件程序中往往同时有几十个任务在运行、并且任务之间相互关联,单步追踪已不适应。
发明内容
本发明提供了一种软件在线调试方法和***,以解决如何实现在调试过程中任意更改调试指令的问题。
为解决上述技术问题,本发明提供了一种软件在线调试方法,所述方法包括:
确定软件中的被追踪点;
当执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境;
调用已存储的在线调试指令,执行调试任务,输出在线调试信息;
恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序。
可选地,所述确定软件中的被追踪点具体包括:
通过命令行接收用户输入的设置指令,所述设置指令包括所述软件中被追踪点的地址;
将所述被追踪点地址处的二进制机器指令反汇编为汇编程序;
根据所述汇编程序确定所述被追踪点的位置。
可选地,所述当执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境具体包括:
当执行到所述被追踪点时,根据在被追踪点生成的跳转指令,跳转至已存储在所述软件中的保护/恢复环境指令;
执行所述保护/恢复环境指令中的保护环境指令,保存所述被追踪点处的软件当前运行环境。
可选地,所述调用已存储的在线调试指令,执行调试任务,输出在线调试信息具体包括:
执行所述保护/恢复环境指令;
当执行到所述保护/恢复环境指令中的跳转点时,通过所述跳转点,跳转至所述在线调试指令;
执行所述在线调试指令,输出在线调试信息。
可选地,所述恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序具体包括:
当输出在线调试信息后,从所述在线调试指令跳转回所述跳转点;
执行所述保护/恢复环境指令中的恢复环境指令,并跳转回所述被追踪点,从所述被追踪点处继续执行所述软件后续程序。
可选地,所述方法还包括:
在执行调试任务的过程中,通过命令行,接收用户输入的被追踪点状态查看指令;
根据所述查看指令,向所述用户反馈所述软件中被追踪点的状态信息,所述被追踪点的状态信息包括以下一种或多种:
被追踪点的执行时间、当前CPU各寄存器的状态、当前任务堆栈信息。
可选地,所述确定软件中的被追踪点之后还包括:
通过命令行,接收用户输入的被追踪点删除指令,所述被追踪点删除指令包括待删除的所述被追踪点的位置;
将待删除的所述被追踪点的位置还原为设置所述被追踪点之前的二进制机器指令;
当执行到原所述被追踪点的位置时,执行所述二进制机器指令。
为解决上述技术问题,本发明还提供了一种软件在线调试***,所述***包括:
被追踪点确定模块,用于确定软件中的被追踪点;
程序执行模块,用于在执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境;以及在调试结束后,恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序;
调试模块,用于在保存软件当前运行环境后,调用已存储的在线调试指令,执行调试任务,输出在线调试信息。
可选地,所述被追踪点确定模块,用于确定软件中的被追踪点,具体包括:
通过命令行接收用户输入的设置指令,所述设置指令包括所述软件中被追踪点的地址;
将所述被追踪点地址的二进制机器指令反汇编为汇编程序;
根据所述汇编程序确定所述被追踪点的位置。
可选地,所述程序执行模块,用于在执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境,具体包括:
当执行到所述被追踪点时,根据在被追踪点生成的跳转指令,跳转至已存储在所述软件中的保护/恢复环境指令;
执行所述保护/恢复环境指令中的保护环境指令,保存所述被追踪点处的软件当前运行环境。
可选地,所述调试模块,用于调用已存储的在线调试指令,执行调试任务,输出在线调试信息,具体包括:
执行所述保护/恢复环境指令;
当执行到所述保护/恢复环境指令中的跳转点时,通过所述跳转点,跳转至所述在线调试指令;
执行所述在线调试指令,输出在线调试信息。
可选地,所述程序执行模块,用于恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序,具体包括:
当输出在线调试信息后,从所述在线调试指令跳转回所述跳转点;
执行所述保护/恢复环境指令中的恢复环境指令,并跳转回所述被追踪点,从所述被追踪点处继续执行所述软件后续程序。
可选地,所述***还包括:
状态查看模块,用于在调试任务执行过程中,通过命令行,接收用户输入的被追踪点状态查看指令;
根据所述查看指令,向所述用户反馈所述软件中被追踪点的状态信息,所述被追踪点的状态信息包括以下一种或多种:
被追踪点的执行时间、当前CPU各寄存器的状态、当前任务堆栈信息。
可选地,所述***还包括:
被追踪点删除模块,用于通过命令行,接收用户输入的被追踪点删除指令,所述被追踪点删除指令包括待删除的所述被追踪点的位置;
将待删除的所述被追踪点的位置还原为设置所述被追踪点之前的二进制机器指令;
当执行到原所述被追踪点的位置时,执行所述二进制机器指令。
通过应用本发明提供的一种软件在线调试方法和***,在软件程序运行时,动态设置被追踪点,通过设置的被追踪点,保存被追踪点处的软件当前运行环境;调用已存储的在线调试指令,执行调试任务,输出在线调试信息;并恢复软件当前运行环境,从被追踪点处继续执行软件后续程序。以程序调用的形式调用调试指令,方便了调试指令的修改与删除,避免了将调试指令直接以硬编码的形式写入软件程序,实现在调试过程中任意更改调试指令;同时,也不需要重启软件程序;另外,上述技术方案在调用调试指令,执行调试程序之前保存软件当前运行环境,并在调试结束,先恢复保存的软件当前运行环境,再返回从被追踪点,从被追踪点处继续执行软件后续程序,使得软件后续程序能够继续在原先的运行环境下执行,避免了对原软件程序的影响。
附图说明
图1为本发明实施例提供的软件在线调试方法流程图;
图2为本发明实施例提供的软件调试流程与现有的运行日志和调试命令中的软件调试流程对比图;
图3为本发明实施例提供的软件在线调试***组成模块图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
软件开发以及软件开发后的使用过程中,不可避免地会出现各种软件问题。当技术人员想在软件运行之前、甚至软件运行过程中且不终止现有软件运行进程的情况下,对软件进行调试,即可采用下述的实施例记载软件在线调试方法。
下述实施例记载的软件在线调试方法以程序调用的形式调用在线调试指令,不需要重启软件程序;在执行在线调试程序之前保存软件在被追踪点的当前运行环境,使得调试结束后返回被追踪点时,程序能够在原先的运行环境下继续执行。
下面以图1为例详细说明本发明实施例提供的软件在线调试方法,图1为本发明实施例提供的软件在线调试方法流程图。在本发明实施例中实施主体可为通信设备、终端、服务器等设备,所述终端具体为个人电脑(Personal Computer,简称:PC)、台式电脑等等。如图1所示,该实施例具体包括以下步骤:
步骤S101、确定软件中的被追踪点;
具体地,步骤S101包括:通过命令行接收用户输入的设置指令,所述设置指令包括所述软件中被追踪点的地址;将所述被追踪点地址的二进制机器指令反汇编为汇编程序;根据所述汇编程序确定所述被追踪点的位置。
例如,在vxworks操作***中,调试人员可以通过命令行启用shell指令,通过“lkup”命令获取C代码函数名对应的地址;通过向“l”命令提供函数的地址来反汇编该函数的二进制机器指令。调试人员可根据需要,通过命令行将函数中任意点作为被追踪点。
进一步地,还可将函数入口点设置为被追踪点,此时,通过命令行,可直接将函数名作为被追踪点的地址。
通过步骤S101可任意确定软件程序中的被追踪点。
步骤S102、当执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境;
所述软件当前运行环境包括:CPU寄存器的内容;
可以理解的是,通过保存CPU寄存器的内容,可在执行完在线调试指令后,使得原有软件程序的执行得以不受影响而继续执行。
具体地,步骤S102包括:
当执行到所述被追踪点时,根据在被追踪点生成的跳转指令,跳转至已存储在所述软件中的保护/恢复环境指令;执行所述保护/恢复环境指令中的保护环境指令,保存所述被追踪点处的软件当前运行环境。
步骤S103、调用已存储的在线调试指令,执行调试任务,输出在线调试信息;
具体地,步骤S103包括:
执行所述保护/恢复环境指令;当执行到所述保护/恢复环境指令中的跳转点时,通过所述跳转点,跳转至所述在线调试指令;
执行所述在线调试指令,输出在线调试信息。
进一步地,在本步骤中,输出的在线调试信息包括:被追踪点的执行时间、当前CPU各寄存器的状态、当前任务堆栈信息。上述信息包括了执行在线调试指令中关于当前调试任务在被追踪点处执行的所有信息,依据上述信息,以使得调试人员判断在被追踪点的执行是否存在异常,以及当出现异常时,对异常进行定位。
需要说明的是,在本发明实施例中,所述在线调试信息可包括多层级在线调试,例如,包括第一层级在线调试信息、第二层级在线调试信息等等。
可以理解的是,在本发明实施例中,在执行第一层级在线调试信息时,可通过第一层级在线调试信息中的跳转点,跳转至第二层级在线调试信息中继续进行调制,进而实现多层级在线调试。
步骤S104、恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序。
具体地,步骤S104包括:
当输出在线调试信息后,从所述在线调试指令跳转回所述跳转点;执行所述保护/恢复环境指令中的恢复环境指令,并跳转回所述被追踪点,从所述被追踪点处继续执行所述软件后续程序。
进一步地,当涉及多层级在线调试时,当前层级在线调试结束后,跳转回至前一层级的跳转点处,执行前一层级跳转点之后的程序,依次跳转回至原软件程序中。
需要说明的是,在本发明实施例中,还可根据设置的被追踪点的个数,存储相等数量的保护/恢复环境指令,以使得执行到每个被追踪点处时,方便、灵活地进行跳转。
进一步地,在本发明实施例中,还自动存储被追踪点的位置和被追踪点处二进制机器指令,以便在被追点处进行跳转或者回调。例如,通过直接写内存方式,将被追踪点地址处的内存修改为“保护/恢复环境指令”程序段的起始地址处,进而实现跳转;并将被追踪点处二进制机器指令添加到“保护/恢复环境指令”程序段的末尾处,进而实现回调。
通过应用本发明实施例的上述步骤S101-步骤S104,在软件程序运行时,动态设置被追踪点,通过设置的被追踪点,保存被追踪点处的软件当前运行环境;调用已存储的在线调试指令,执行调试任务,输出在线调试信息;并恢复软件当前运行环境,从被追踪点处继续执行软件后续程序。避免了将调试指令直接以硬编码的形式写入软件程序中,而是以程序调用的形式调用调试指令,方便了调试指令的修改与删除,实现在调试过程中任意更改调试指令;同时,也不需要重启软件程序。
可选地,在上述实施例通过步骤S101确定了软件中的被追踪点之后,还包括接收用户输入的被追踪点删除指令,根据该指令删除被追踪点的步骤,通过该步骤可使调试过程更加方便、灵活。具体步骤如下:
通过命令行,接收用户输入的被追踪点删除指令,所述被追踪点删除指令包括待删除的所述被追踪点的位置;
将待删除的所述被追踪点的位置还原为设置所述被追踪点之前的二进制机器指令;
当执行到原所述被追踪点的位置时,执行所述二进制机器指令,这样程序就表现为设置被追踪点之前的行为。
具体地,通过命令行,接收用户输入的被追踪点删除指令,将被追踪点的位置还原为设置被追踪点之前的二进制机器指令;进而当软件执行到原被追踪点所在的位置时,由于此位置已没有被追踪点,则执行设置被追踪点之前的二进制机器指令,使程序恢复为设置被追踪点之前状态。由此可见,本发明实施例相对于现有技术,不仅可以在线设置被追踪点,还可在线删除被追踪点,使调试过程更加灵活。
可选地,上述方法中,在上述步骤S103执行调试任务过程中,还包括接收用户输入的被追踪点状态查看指令,根据该指令向用户反馈被追踪点的状态信息的步骤,通过该步骤可方便调试人员判断在被追踪点的执行动作是否异常,并在出现异常时分析原因。具体步骤如下:
在执行调试任务的过程中,通过命令行,接收用户输入的被追踪点状态查看指令;
根据所述查看指令,向所述用户反馈所述软件中被追踪点的状态信息,所述被追踪点的状态信息包括以下一种或多种:
被追踪点的执行时间、当前CPU各寄存器的状态、当前任务堆栈信息。
具体地,在执行调试任务的过程中,当接收到用户输入的被追踪点状态查看指令时,根据查看指令,向用户反馈软件中被追踪点的状态信息。
进一步地,被追踪点的状态信息还包括:软件程序中全部设置的被追踪点的设置信息,例如,被追踪点的设置位置、执行次数等等。
上述被追踪点的状态信息可方便调试人员判断在被追踪点的执行动作是否异常,并在出现异常时分析原因,同时,调试人员还可根据被追踪点的状态信息对被追踪点进行重设置。
可选地,上述方法中,在步骤S103输出在线调试信息后,还可将该在线调试信息保存进内存,方便调试人员查阅,避免了调试人员一直守候在现场。
通过应用本发明实施例的提供的软件在线调试方法,在软件程序运行时,动态设置被追踪点,通过设置的被追踪点,保存被追踪点处的软件当前运行环境;调用已存储的在线调试指令,执行调试任务,输出在线调试信息;并恢复软件当前运行环境,从被追踪点处继续执行软件后续程序。由于在本发明实施例中,通过设置的被追踪点调用已存储的在线调试指令,并在被追踪点处进行软件当前运行环境的保存/恢复,避免了将调试指令直接以硬编码的形式写入软件程序,而是以程序调用的形式调用调试指令,方便了调试指令的修改与删除,实现在调试过程中任意更改调试指令;同时,也不需要重启软件程序;另外,上述技术方案在调用调试指令,执行调试程序之前保存软件当前运行环境,使得调试结束后返回被追踪点时,程序能够继续在原先的运行环境下执行,避免了对原软件程序的影响。
图2为本发明实施例中的软件调试流程与现有的运行日志和调试命令中的软件调试流程对比图,其中,实线表示现有的运行日志和调试命令中的被调试函数指令的软件调试流程,虚线表示本发明实施例中的软件在线调试流程。
在被调试函数指令的软件调试流程中,当软件在内存中运行之前,确定被追踪点,在线调试指令被直接以硬编码的形式写入软件程序的被追踪点,当软件程序执行到被追踪点后,在被追踪点执行在线调试指令;待完成在线调试任务后,继续执行软件的后续程序。如果软件已经运行,则通过编码、编译、链接步骤将在线调试指令写入软件中的被追踪点,再通过软件重启程序将经过修改的软件加载到内存中运行。
本发明实施例中的软件在线调试流程,根据被追踪点地址反汇编的二进制机器指令确定了软件中的被追踪点,这一步直接在内存中完成;当执行到被追踪点时,跳转至已存储在软件中的保护/恢复环境指令,执行保护/恢复环境指令中的保护环境指令,保存被追踪点处的软件当前运行环境;继续执行保护/恢复环境指令;当执行到保护/恢复环境指令中的跳转点时,通过跳转点,跳转至在线调试指令;执行在线调试指令,输出在线调试信息。整个过程通过程序调用完成调试,不需要通过编码、编译、链接步骤将调试指令写入软件中的被追踪点,由于软件一直在内存中运行,因此也不需要再通过软件重启程序将经过修改的软件加载到内存中运行。
本发明实施例提供的软件调试流程,当输出在线调试信息后,从在线调试指令跳转回跳转点;执行保护/恢复环境指令中的恢复环境指令,并跳转回被追踪点,从被追踪点处继续执行软件后续程序。由于程序能够继续在原先的运行环境下执行,避免了调试对原软件程序的影响。
下面以图3为例详细说明本发明实施例提供的软件在线调试***,图3为本发明实施例提供的软件在线调试***组成模块图。在本发明实施例中所述软件在线调试***可应用或加载在通信设备、终端、服务器等设备,所述终端具体为个人电脑(PersonalComputer,简称:PC)、台式电脑等等。如图3所示
所述***包括:
被追踪点确定模块310,用于确定软件中的被追踪点;
程序执行模块320,用于在执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境;以及在调试结束后,恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序;
调试模块330,用于在保存软件当前运行环境后,调用已存储的在线调试指令,执行调试任务,输出在线调试信息。
所述被追踪点确定模块310,用于确定软件中的被追踪点,具体包括:
通过命令行接收用户输入的设置指令,所述设置指令包括所述软件中被追踪点的地址;
将所述被追踪点地址的二进制机器指令反汇编为汇编程序;
根据所述汇编程序确定所述被追踪点的位置。
所述程序执行模块320,用于在执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境,具体包括:
当执行到所述被追踪点时,根据在被追踪点生成的跳转指令,跳转至已存储在所述软件中的保护/恢复环境指令;
执行所述保护/恢复环境指令中的保护环境指令,保存所述被追踪点处的软件当前运行环境。
所述调试模块330,用于调用已存储的在线调试指令,执行调试任务,输出在线调试信息,具体包括:
执行所述保护/恢复环境指令;
当执行到所述保护/恢复环境指令中的跳转点时,通过所述跳转点,跳转至所述在线调试指令;
执行所述在线调试指令,输出在线调试信息。
所述程序执行模块320,用于恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序,具体包括:
当输出在线调试信息后,从所述在线调试指令跳转回所述跳转点;
执行所述保护/恢复环境指令中的恢复环境指令,并跳转回所述被追踪点,从所述被追踪点处继续执行所述软件后续程序。
所述***还包括:状态查看模块340,用于在调试任务执行过程中,通过命令行,接收用户输入的被追踪点状态查看指令;
根据所述查看指令,向所述用户反馈所述软件中被追踪点的状态信息,所述被追踪点的状态信息包括以下一种或多种:
被追踪点的执行时间、当前CPU各寄存器的状态、当前任务堆栈信息。
所述***还包括:被追踪点删除模块350,用于当软件中的被追踪点确定后,通过命令行,接收用户输入的被追踪点删除指令,所述被追踪点删除指令包括待删除的所述被追踪点的位置;
将待删除的所述被追踪点的位置还原为设置所述被追踪点之前的二进制机器指令;
当执行到原所述被追踪点的位置时,执行所述二进制机器指令。
通过应用本发明实施例的提供的软件在线调试***,在软件程序运行时,动态设置被追踪点,通过设置的被追踪点,保存被追踪点处的软件当前运行环境;调用已存储的在线调试指令,执行调试任务,输出在线调试信息;并恢复软件当前运行环境,从被追踪点处继续执行软件后续程序。由于在本发明实施例中,通过设置的被追踪点调用已存储的在线调试指令,并在被追踪点处进行软件当前运行环境的保存/恢复,避免了将调试指令直接以硬编码的形式写入软件程序,而是以程序调用的形式调用调试指令,方便了调试指令的修改与删除,实现在调试过程中任意更改调试指令;同时,也不需要重启软件程序;另外,上述技术方案在调用调试指令,执行调试程序之前保存软件当前运行环境,使得调试结束后返回被追踪点时,程序能够继续在原先的运行环境下执行,避免了对原软件程序的影响。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
需要说明的是,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (12)
1.一种软件在线调试方法,其特征在于,所述方法包括:
在软件程序运行时,确定软件中的被追踪点,具体包括:通过命令行接收用户输入的设置指令,所述设置指令包括软件中被追踪点的地址;将所述被追踪点地址处的二进制机器指令反汇编为汇编程序;根据所述汇编程序确定所述被追踪点的位置;
当执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境;
调用已存储的在线调试指令,执行调试任务,输出在线调试信息;
恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序。
2.如权利要求1所述的方法,其特征在于,所述当执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境具体包括:
当执行到所述被追踪点时,根据在被追踪点生成的跳转指令,跳转至已存储在所述软件中的保护/恢复环境指令;
执行所述保护/恢复环境指令中的保护环境指令,保存所述被追踪点处的软件当前运行环境。
3.如权利要求2所述的方法,其特征在于,所述调用已存储的在线调试指令,执行调试任务,输出在线调试信息具体包括:
执行所述保护/恢复环境指令;
当执行到所述保护/恢复环境指令中的跳转点时,通过所述跳转点,跳转至所述在线调试指令;
执行所述在线调试指令,输出在线调试信息。
4.如权利要求3所述的方法,其特征在于,所述恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序具体包括:
当输出在线调试信息后,从所述在线调试指令跳转回所述跳转点;
执行所述保护/恢复环境指令中的恢复环境指令,并跳转回所述被追踪点,从所述被追踪点处继续执行所述软件后续程序。
5.如权利要求1所述的方法,其特征在于,所述方法还包括:
在执行调试任务的过程中,通过命令行,接收用户输入的被追踪点状态查看指令;
根据所述查看指令,向所述用户反馈所述软件中被追踪点的状态信息,所述被追踪点的状态信息包括以下一种或多种:
被追踪点的执行时间、当前CPU各寄存器的状态、当前任务堆栈信息。
6.如权利要求1所述的方法,其特征在于,所述确定软件中的被追踪点之后还包括:
通过命令行,接收用户输入的被追踪点删除指令,所述被追踪点删除指令包括待删除的所述被追踪点的位置;
将待删除的所述被追踪点的位置还原为设置所述被追踪点之前的二进制机器指令;
当执行到原所述被追踪点的位置时,执行所述二进制机器指令。
7.一种软件在线调试***,其特征在于,所述***包括:
被追踪点确定模块,用于在软件程序运行时,确定软件中的被追踪点,具体包括:在软件程序运行时,通过命令行接收用户输入的设置指令,所述设置指令包括所述软件中被追踪点的地址;将所述被追踪点地址的二进制机器指令反汇编为汇编程序;根据所述汇编程序确定所述被追踪点的位置;
程序执行模块,用于在执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境;以及在调试结束后,恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序;
调试模块,用于在保存软件当前运行环境后,调用已存储的在线调试指令,执行调试任务,输出在线调试信息。
8.如权利要求7所述的***,其特征在于,所述程序执行模块,用于在执行到所述被追踪点时,保存所述被追踪点处的软件当前运行环境,具体包括:
当执行到所述被追踪点时,根据在被追踪点生成的跳转指令,跳转至已存储在所述软件中的保护/恢复环境指令;
执行所述保护/恢复环境指令中的保护环境指令,保存所述被追踪点处的软件当前运行环境。
9.如权利要求8所述的***,其特征在于,所述调试模块,用于调用已存储的在线调试指令,执行调试任务,输出在线调试信息,具体包括:
执行所述保护/恢复环境指令;
当执行到所述保护/恢复环境指令中的跳转点时,通过所述跳转点,跳转至所述在线调试指令;
执行所述在线调试指令,输出在线调试信息。
10.如权利要求9所述的***,其特征在于,所述程序执行模块,用于恢复所述软件当前运行环境,从所述被追踪点处继续执行所述软件后续程序,具体包括:
当输出在线调试信息后,从所述在线调试指令跳转回所述跳转点;
执行所述保护/恢复环境指令中的恢复环境指令,并跳转回所述被追踪点,从所述被追踪点处继续执行所述软件后续程序。
11.如权利要求7所述的***,其特征在于,所述***还包括:
状态查看模块,用于在调试任务执行过程中,通过命令行,接收用户输入的被追踪点状态查看指令;
根据所述查看指令,向所述用户反馈所述软件中被追踪点的状态信息,所述被追踪点的状态信息包括以下一种或多种:
被追踪点的执行时间、当前CPU各寄存器的状态、当前任务堆栈信息。
12.如权利要求7所述的***,其特征在于,所述***还包括:
被追踪点删除模块,用于通过命令行,接收用户输入的被追踪点删除指令,所述被追踪点删除指令包括待删除的所述被追踪点的位置;
将待删除的所述被追踪点的位置还原为设置所述被追踪点之前的二进制机器指令;
当执行到原所述被追踪点的位置时,执行所述二进制机器指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510003876.6A CN104536892B (zh) | 2015-01-05 | 2015-01-05 | 一种软件在线调试方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510003876.6A CN104536892B (zh) | 2015-01-05 | 2015-01-05 | 一种软件在线调试方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104536892A CN104536892A (zh) | 2015-04-22 |
CN104536892B true CN104536892B (zh) | 2018-03-27 |
Family
ID=52852422
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510003876.6A Active CN104536892B (zh) | 2015-01-05 | 2015-01-05 | 一种软件在线调试方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104536892B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105204990B (zh) * | 2015-08-21 | 2017-11-28 | 上海斐讯数据通信技术有限公司 | 一种异常调试方法及*** |
CN105824751A (zh) * | 2016-03-16 | 2016-08-03 | 上海斐讯数据通信技术有限公司 | 一种网络设备软件的自动调试***和方法 |
CN112433945A (zh) * | 2020-11-26 | 2021-03-02 | 百富计算机技术(深圳)有限公司 | 一种用于程序动态跟踪的方法、装置及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6915509B1 (en) * | 2000-06-28 | 2005-07-05 | Microsoft Corporation | Method and system for debugging a program |
CN1752946A (zh) * | 2005-10-31 | 2006-03-29 | 大唐微电子技术有限公司 | 一种嵌入式***的调试方法及其*** |
CN101295279A (zh) * | 2007-04-29 | 2008-10-29 | 国际商业机器公司 | 多线程环境下的调试程序的方法和*** |
CN101482848A (zh) * | 2009-02-03 | 2009-07-15 | 中兴通讯股份有限公司 | 一种在嵌入式软件运行状态下的动态调试方法及*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101446918B (zh) * | 2008-12-10 | 2011-12-28 | 中兴通讯股份有限公司 | 一种实现用户态调试器调试单个函数的方法及*** |
US8473921B2 (en) * | 2009-12-15 | 2013-06-25 | Microsoft Corporation | Debugging mechanisms in a cache-based memory isolation system |
-
2015
- 2015-01-05 CN CN201510003876.6A patent/CN104536892B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6915509B1 (en) * | 2000-06-28 | 2005-07-05 | Microsoft Corporation | Method and system for debugging a program |
CN1752946A (zh) * | 2005-10-31 | 2006-03-29 | 大唐微电子技术有限公司 | 一种嵌入式***的调试方法及其*** |
CN101295279A (zh) * | 2007-04-29 | 2008-10-29 | 国际商业机器公司 | 多线程环境下的调试程序的方法和*** |
CN101482848A (zh) * | 2009-02-03 | 2009-07-15 | 中兴通讯股份有限公司 | 一种在嵌入式软件运行状态下的动态调试方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN104536892A (zh) | 2015-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110603527B (zh) | 用于服务器侧生产代码的条件调试的方法、***和设备 | |
US8145944B2 (en) | Business process error handling through process instance backup and recovery | |
US20050223360A1 (en) | System and method for providing a generic user interface testing framework | |
CN105808266A (zh) | 代码运行方法及装置 | |
CN101763301B (zh) | 用于测试引导镜像的***和方法 | |
CN104346274A (zh) | 程序调试器及一种程序的调试方法 | |
CN102306122A (zh) | 自动化测试方法及设备 | |
US20050229161A1 (en) | Generic user interface testing framework with load-time libraries | |
CN104536892B (zh) | 一种软件在线调试方法和*** | |
CN112486786A (zh) | 一种调用链路追踪方法及装置 | |
CN104063319A (zh) | 一种嵌入式***的调试方法及其装置 | |
US6598181B1 (en) | Method and system for debugging multiple function calls | |
US20050228644A1 (en) | Generic user interface testing framework with rules-based wizard | |
CN110597552B (zh) | 项目持续集成流水线的配置方法、装置、设备及存储介质 | |
US11249880B1 (en) | Debugging and simulating application runtime execution | |
US8966455B2 (en) | Flow analysis in program execution | |
US9852048B2 (en) | Simulating process variable changes during process runtime | |
CN107679088A (zh) | 用户行为数据的文件式存储方法及装置 | |
CN109840133A (zh) | 应用功能的运行方法及装置 | |
US11016762B2 (en) | Determining caller of a module in real-time | |
CN109857642A (zh) | 一种ui自动化脚本的阻塞式调试方法及调试工具 | |
CN111880803B (zh) | 一种应用于多平台的软件构建方法及装置 | |
CN105653433B (zh) | 一种应用程序的追踪方法及装置 | |
CN114996955A (zh) | 一种云原生混沌工程实验的靶场环境构建方法及装置 | |
US11074069B2 (en) | Replaying interactions with transactional and database environments with re-arrangement |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |