CN102831054A - 程序断点处理方法及装置 - Google Patents
程序断点处理方法及装置 Download PDFInfo
- Publication number
- CN102831054A CN102831054A CN2012102228348A CN201210222834A CN102831054A CN 102831054 A CN102831054 A CN 102831054A CN 2012102228348 A CN2012102228348 A CN 2012102228348A CN 201210222834 A CN201210222834 A CN 201210222834A CN 102831054 A CN102831054 A CN 102831054A
- Authority
- CN
- China
- Prior art keywords
- breakpoint
- instruction
- abnormality processing
- break
- program
- 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.)
- Granted
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供一种程序断点处理方法及装置,该方法包括在执行程序上设置断点,并将断点处的指令修改为断点指令;触发断点指令进行异常处理,并将异常处理的返回地址修改为目标代码的地址;异常处理结束后,跳转执行目标代码。本发明实施例通过将异常处理的返回地址修改为目标代码,针对同一程序仅做一次异常处理即可完成断点检测,而且还可以根据实际需求将当前执行的程序直接跳转到另一目标程序,处理流程简单,减少处理延时。
Description
技术领域
本发明实施例涉及软件调试技术,尤其涉及一种程序断点处理方法及装置,属于计算机领域。
背景技术
断点功能是程序开发中一个常用调试功能,也是调试器的核心功能。断点功能可以暂停程序,查看程序运行时的上下文。
目前,软件断点主要通过两次异常来实现。具体地,首先将断点处指令改为断点指令,断点命中中断到调试器时,调试器接管异常并暂停程序。当用户结束分析恢复被调试程序继续执行时,需要进行第一次异常处理,即先将断点处的断点指令还原为原来的指令,打开硬件单步,异常返回到断点处,通过硬件单步功能将断点处的原来的指令执行完成,然后再进行第二次异常处理,重新将断点处的指令设置为断点指令,并关闭硬件单步,然后二次异常返回到断点处,继续执行下一指令。
在实现本发明实施例的过程中,发明人发现现有技术中在对程序进行调试过程中,存在两次异常处理和两次指令替换,处理流程复杂,效率低下。
发明内容
本发明实施例提供一种程序断点处理方法及装置,用以简化程序断点处理流程。
本发明实施例一方面提供了一种程序断点处理方法,包括:在执行程序上设置断点,并将所述断点处的指令修改为断点指令;触发所述断点指令进行异常处理,并将所述异常处理的返回地址修改为目标代码的地址;所述目标代码为与所述断点处的指令功能相同的等价代码;异常处理结束后,跳转执行所述目标代码。
本发明实施例另一方面提供了一种程序断点处理装置,包括:指令修改模块,用于在执行程序上设置断点,并将所述断点处的指令修改为断点指令;异常处理模块,用于触发所述断点指令,对所述断点指令进行异常处理,并将所述异常处理的返回地址修改为目标代码的地址;所述目标代码为与所述断点处的指令功能相同的等价代码;跳转执行模块,用于在所述异常处理模块对所述断点指令异常处理结束后,跳转执行所述目标代码。
本发明实施例提供的程序断点处理方法及装置,通过将异常处理的返回地址修改为与断点处原指令功能相同的目标代码,针对同一程序仅做一次异常处理即可完成断点检测,而且还可以根据实际需求将当前执行的程序直接跳转到另一目标程序,处理流程简单,减少处理延时。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的程序断点处理方法流程示意图;
图2为本发明一实施例提供的程序断点处理方法的生成等价代码示意图;
图3为本发明一实施例提供的程序断点处理方法的设置断点指令示意图;
图4为本发明一实施例提供的程序断点处理方法的断点触发示意图;
图5为本发明另一实施例提供的程序断点处理方法流程示意图;
图6为本发明一实施例提供的程序断点处理装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明一实施例提供的程序断点处理方法流程示意图。如图1所示,本发明实施例提供的程序断点处理方法包括:
步骤101:在执行程序上设置断点,并将断点处的指令修改为断点指令;
步骤102:触发断点指令进行异常处理,并将异常处理的返回地址修改为目标代码的地址;所述目标代码为断点处的指令的等价代码,其功能相当于断点处原来的指令;
步骤103:异常处理结束后,跳转执行目标代码。
具体地,在步骤101中,将断点处的指令修改为断点指令,执行该断点指令时将触发一个断点异常;该断点指令可以为导致程序异常中断的指令,例如可以为非法指令,该非法指令可以使程序运行到该指令过程时,出现错误、故障等不正常条件而引发中断,该断点指令还可以为陷阱指令,例如INT3指令。对于断点指令为何种类型在此不作特别限制。
在步骤102中,当执行到断点指令时,即触发断点指令,此时可以由调试器接管并暂停程序进行异常处理。调试器可以为GDB调试工具,也可以为其他类似调试工具,在此不作特别限制。在此同时,将异常处理的返回地址修改为目标代码的地址,此时,目标代码为断点处的指令的等价代码。在步骤103中,当异常处理结束后,跳转执行目标代码,而不是原指令。
本发明实施例提供的技术方案,通过将异常处理的返回地址修改为目标代码,针对同一程序仅做一次异常处理即可完成断点检测,而且还可以根据实际需求将当前执行的程序直接跳转到另一目标程序,处理流程简单,减少处理延时。
可选地,程序断点处理方法还包括:生成所述等价代码并作为所述目标代码存储在预设代码区内;对应地,跳转执行目标代码之后,程序断点处理方法还包括:跳转执行上述执行程序中断点处的下一条指令。
图2为本发明一实施例提供的程序断点处理方法的生成等价代码示意图。如图2所示,执行程序上包括指令1、指令2、指令3以及指令4等,在执行程序上设置断点时,可生成断点处的指令3的等价代码,并将其作为目标代码,存储在预设代码区中。具体地,预设代码区可以是程序执行过程中向系统申请的一段内存。本领域技术人员可以理解,等价代码的存储地址与断点处的指令的存储地址不同。可以为在断点处指令的存储地址加一个偏移量,得到新的存储地址,在此不限定偏移量的具体数值。其中,可通过程序解析的方式生成断点处指令的等价代码,也可通过其它方式,在此不作特别限制。特别地,生成的等价代码可以是一条指令,也可以是多条指令,即等价代码的指令条数与指令3的条数不具有对应关系,但等价代码具有执行完成断点处指令3的功能。
图3为本发明一实施例提供的程序断点处理方法的设置断点指令示意图。如图3所示,执行程序上包括指令1、指令2、指令3以及指令4等,将指令3修改为断点指令,当程序执行到断点指令时,断点触发后,可由调试器接管并暂停程序。
需要特别说明的是,上述的程序断点处理方法中的生成等价代码与设置断点指令之间,并无严格的时序关系,生成等价代码可以在设置断点指令之前,也可以与设置断点指令同时发生,在此不作特别限制。
图4为本发明一实施例提供的程序断点处理方法的断点触发示意图,并请结合图2和图3。该程序断点处理方法从程序开始执行之后具体包括:
步骤401:断点触发,否,则执行405,是,则执行402。
具体地,当程序运行到断点处指令3时,若断点处指令3没有被修改为断点指令,程序运行到指令3时不存在异常,即不存在断点触发,继续执行下一条指令,即指令4;若断点处指令3修改为断点指令,则程序运行到该断点指令时断点触发。
步骤402:异常处理。可选地,断点触发后,可以由调试器接管并暂停程序,进行异常处理。
步骤403:执行等价代码。具体地,当用户继续恢复执行时,可将异常处理的返回地址修改为目标代码的地址,即等价代码的地址,然后执行等价代码。
步骤404:跳转到断点处的下一条指令。具体地,执行完等价代码之后,跳转到下一条指令,即指令4,继续执行指令4。
步骤405:执行下一条指令。当断点未触发或者步骤404结束后,执行下一条指令。
本发明实施例提供的技术方案,通过生成断点处的指令的等价代码作为目标代码以及等价代码与断点处的指令的等价性,执行等价代码即相当于执行断点处的指令,减少了一次异常返回流程,提高了程序调试性能。
可选地,在执行程序上设置断点包括:在执行程序的第一条指令位置上设置有断点;对应地,将异常处理的返回地址修改为目标代码的地址包括:将异常处理的返回地址修改为另一执行程序的第一条指令的地址。
具体地,将异常处理的返回地址可以修改为另一执行程序的第一条指令的地址,从而继续执行另一执行程序,而不是原执行程序,即对执行程序进行了动态替换。本发明实施例将以函数的动态替换进行详细描述,但是本发明实施例并不限于此。
图5为本发明另一实施例提供的程序断点处理方法流程示意图。如图5所示,程序断点处理方法流程包括以下步骤:
步骤501:将函数A的指令1修改为断点指令。
步骤502:函数A执行到断点指令时,触发异常,并将异常处理的返回地址修改为函数B的指令1的地址,恢复执行时,异常返回到函数B的指令1的地址。
本发明实施例提供的技术方案,通过将异常处理的返回地址修改为另一执行程序的第一条指令的地址,从而继续执行另一执行程序,可以将两个执行程序进行动态替换,从而实现了两个不同执行程序之间的跳转。
图6为本发明一实施例提供的程序断点处理装置的结构示意图。如图3所示,本发明实施例的程序断点处理装置600可以包括指令修改模块601,异常处理模块602以及跳转执行模块603。其中,指令修改模块601用于在执行程序上设置断点,并将断点处的指令修改为断点指令;异常处理模块602用于触发上述断点指令,对断点指令进行异常处理,并将异常处理的返回地址修改为目标代码的地址,所述目标代码为与所述断点处的指令功能相同的等价代码;跳转执行模块603用于在异常处理模块对断点指令异常处理结束后,跳转执行目标代码。
本发明实施例提供的技术方案,通过将异常处理的返回地址修改为目标代码,针对同一程序仅做一次异常处理即可完成断点检测,而且还可以根据实际需求将当前执行的程序直接跳转到另一目标程序,处理流程简单,减少处理延时。
可选地,上述指令修改模块601还用于生成目标代码,并存储在预设代码区内;对应地,跳转执行模块603还用于在执行目标代码后,跳转执行上述执行程序中断点处的下一条指令。
本发明实施例提供的技术方案,通过指令修改模块生成断点处的指令的等价代码作为目标代码以及等价代码与断点处的指令的等价性,执行等价代码即相当于执行断点处的指令,在跳转执行模块执行完等价代码之后,跳转到下一指令,减少了一次异常流程,提高了程序调试性能。
可选地,上述指令修改模块601具体用于:在执行程序的第一条指令位置上设置断点,并将断点处的指令修改为断点指令;对应地,异常处理模块602具体用于触发指令修改模块修改断点处指令得到的断点指令,对断点指令进行异常处理,并将异常处理的返回地址修改为另一执行程序的第一条指令的地址。
本发明实施例提供的技术方案,通过异常处理模块将异常处理的返回地址修改为另一执行程序的第一条指令的地址,从而继续执行另一执行程序,可以将两个执行程序进行动态替换。
上述实施例中的程序断点处理方法均可以由本实施例提供的程序断点处理装置实现。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (6)
1.一种程序断点处理方法,其特征在于,包括:
在执行程序上设置断点,并将所述断点处的指令修改为断点指令;
触发所述断点指令进行异常处理,并将所述异常处理的返回地址修改为目标代码的地址;所述目标代码为与所述断点处的指令功能相同的等价代码;
异常处理结束后,跳转执行所述目标代码。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
生成所述等价代码并作为所述目标代码存储在预设代码区内;
对应地,所述跳转执行所述目标代码之后,所述方法还包括:
跳转执行所述执行程序中所述断点处的下一条指令。
3.根据权利要求1所述的方法,其特征在于,所述在执行程序上设置断点包括:
在所述执行程序的第一条指令位置上设置断点;
对应地,所述将所述异常处理的返回地址修改为目标代码的地址包括:
将所述异常处理的返回地址修改为另一执行程序的第一条指令的地址。
4.一种程序断点处理装置,其特征在于,包括:
指令修改模块,用于在执行程序上设置断点,并将所述断点处的指令修改为断点指令;
异常处理模块,用于触发所述断点指令,对所述断点指令进行异常处理,并将所述异常处理的返回地址修改为目标代码的地址;所述目标代码为与所述断点处的指令功能相同的等价代码;
跳转执行模块,用于在所述异常处理模块对所述断点指令异常处理结束后,跳转执行所述目标代码。
5.根据权利要求4所述的装置,其特征在于,所述指令修改模块还用于:生成所述目标代码,并存储在预设代码区内;
对应地,所述跳转执行模块还用于,在执行所述目标代码后,跳转执行所述执行程序中所述断点处的下一条指令。
6.根据权利要求4所述的装置,其特征在于,所述指令修改模块具体用于:在所述执行程序的第一条指令位置上设置断点,并将断点处的指令修改为断点指令;
对应地,所述异常处理模块具体用于,触发所述指令修改模块修改所述断点处指令得到的所述断点指令,对所述断点指令进行异常处理,并将所述异常处理的返回地址修改为另一执行程序的第一条指令的地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210222834.8A CN102831054B (zh) | 2012-06-30 | 2012-06-30 | 程序断点处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210222834.8A CN102831054B (zh) | 2012-06-30 | 2012-06-30 | 程序断点处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102831054A true CN102831054A (zh) | 2012-12-19 |
CN102831054B CN102831054B (zh) | 2015-12-02 |
Family
ID=47334203
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210222834.8A Expired - Fee Related CN102831054B (zh) | 2012-06-30 | 2012-06-30 | 程序断点处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102831054B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630479A (zh) * | 2014-11-28 | 2016-06-01 | 中兴通讯股份有限公司 | 程序运行过程中的异常处理方法及装置 |
CN105740139A (zh) * | 2014-12-09 | 2016-07-06 | 北京中船信息科技有限公司 | 一种基于虚拟环境的嵌入式软件调试方法 |
CN105824750A (zh) * | 2016-05-31 | 2016-08-03 | 杭州中天微系统有限公司 | 一种在NorFlash程序空间调试的软断点模拟方法 |
CN106874022A (zh) * | 2015-12-11 | 2017-06-20 | 中兴通讯股份有限公司 | 一种热补丁注入方法及装置 |
CN108255705A (zh) * | 2017-11-24 | 2018-07-06 | 平安科技(深圳)有限公司 | 发票领用异常的构造方法、装置、计算机设备及存储介质 |
CN109542773A (zh) * | 2018-11-02 | 2019-03-29 | 五八同城信息技术有限公司 | 编译器插件调试方法、装置、计算机设备及可读存储介质 |
CN110647467A (zh) * | 2019-09-23 | 2020-01-03 | 上海创景信息科技有限公司 | 基于单步异常的目标码覆盖率测试方法、系统及介质 |
CN112733093A (zh) * | 2021-01-04 | 2021-04-30 | 中国电力科学研究院有限公司 | 基于ring3环对抗的程序行为保护方法、系统及存储介质 |
WO2021249377A1 (zh) * | 2020-06-09 | 2021-12-16 | 华为技术有限公司 | 程序执行方法,程序处理方法以及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101799763A (zh) * | 2009-02-10 | 2010-08-11 | 华为技术有限公司 | 内核在线补丁的方法、装置和系统 |
CN102063367A (zh) * | 2010-10-29 | 2011-05-18 | 凌阳科技股份有限公司 | 针对当机程序的离线分析方法及装置 |
WO2011072565A1 (zh) * | 2009-12-14 | 2011-06-23 | 华为技术有限公司 | 经过性断点设置、调试方法和装置 |
-
2012
- 2012-06-30 CN CN201210222834.8A patent/CN102831054B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101799763A (zh) * | 2009-02-10 | 2010-08-11 | 华为技术有限公司 | 内核在线补丁的方法、装置和系统 |
WO2011072565A1 (zh) * | 2009-12-14 | 2011-06-23 | 华为技术有限公司 | 经过性断点设置、调试方法和装置 |
CN102063367A (zh) * | 2010-10-29 | 2011-05-18 | 凌阳科技股份有限公司 | 针对当机程序的离线分析方法及装置 |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630479A (zh) * | 2014-11-28 | 2016-06-01 | 中兴通讯股份有限公司 | 程序运行过程中的异常处理方法及装置 |
CN105740139A (zh) * | 2014-12-09 | 2016-07-06 | 北京中船信息科技有限公司 | 一种基于虚拟环境的嵌入式软件调试方法 |
CN106874022A (zh) * | 2015-12-11 | 2017-06-20 | 中兴通讯股份有限公司 | 一种热补丁注入方法及装置 |
CN106874022B (zh) * | 2015-12-11 | 2021-06-25 | 中兴通讯股份有限公司 | 一种热补丁注入方法及装置 |
CN105824750A (zh) * | 2016-05-31 | 2016-08-03 | 杭州中天微系统有限公司 | 一种在NorFlash程序空间调试的软断点模拟方法 |
CN105824750B (zh) * | 2016-05-31 | 2018-05-22 | 杭州中天微系统有限公司 | 一种在NorFlash程序空间调试的软断点模拟方法 |
CN108255705A (zh) * | 2017-11-24 | 2018-07-06 | 平安科技(深圳)有限公司 | 发票领用异常的构造方法、装置、计算机设备及存储介质 |
CN109542773A (zh) * | 2018-11-02 | 2019-03-29 | 五八同城信息技术有限公司 | 编译器插件调试方法、装置、计算机设备及可读存储介质 |
CN110647467A (zh) * | 2019-09-23 | 2020-01-03 | 上海创景信息科技有限公司 | 基于单步异常的目标码覆盖率测试方法、系统及介质 |
WO2021249377A1 (zh) * | 2020-06-09 | 2021-12-16 | 华为技术有限公司 | 程序执行方法,程序处理方法以及相关设备 |
CN112733093A (zh) * | 2021-01-04 | 2021-04-30 | 中国电力科学研究院有限公司 | 基于ring3环对抗的程序行为保护方法、系统及存储介质 |
CN112733093B (zh) * | 2021-01-04 | 2024-03-12 | 中国电力科学研究院有限公司 | 基于ring3环对抗的程序行为保护方法、系统及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN102831054B (zh) | 2015-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102831054A (zh) | 程序断点处理方法及装置 | |
CN104204975B (zh) | 定序程序调试辅助装置 | |
US6981248B2 (en) | Conditional breakpoint encountered indication | |
CN100359486C (zh) | 一种调试操作系统内核态程序的方法及装置 | |
CN108319555B (zh) | 一种基于嵌入式实时系统的实时调试方法 | |
US8997059B2 (en) | Reverse debugging | |
CN102346235A (zh) | 一种面向硬件设备功能的自动测试系统及方法 | |
US20130036331A1 (en) | Debugging method and debugging device | |
US7178135B2 (en) | Scope-based breakpoint selection and operation | |
CN101976187A (zh) | 反编译过程中的堆栈跟踪方法、装置及反编译器 | |
US8806447B2 (en) | Step-type operation processing during debugging by machine instruction stepping concurrent with setting breakpoints | |
CN102789419A (zh) | 一种使用多样本差异比对的软件故障分析方法 | |
US6598181B1 (en) | Method and system for debugging multiple function calls | |
CN105279092A (zh) | 一种软件测试的方法及装置 | |
WO2017044291A1 (en) | Method and apparatus for generating, capturing, storing, and loading debug information for failed tests scripts | |
WO2018210007A1 (zh) | 一种虚拟控制器的组态调试器实现方法 | |
CN102708015A (zh) | 基于cpu不可屏蔽中断系统问题诊断的调试方法 | |
CN107436752A (zh) | 异常现场恢复方法、装置及计算机可读存储介质 | |
CN116775442A (zh) | 一种软件调试系统 | |
CN105095079B (zh) | 一种热点模块指令跟踪的方法及设备 | |
CN109857642A (zh) | 一种ui自动化脚本的阻塞式调试方法及调试工具 | |
CN104239201B (zh) | 一种软单步系统中内存读写监控方法 | |
US12072789B2 (en) | Resumable instruction generation | |
CN106355991B (zh) | 一种示教方法及装置 | |
CN107315685A (zh) | 一种非侵入式程序实时调试方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151202 Termination date: 20180630 |
|
CF01 | Termination of patent right due to non-payment of annual fee |