一种数据断点监控方法、装置及调试器的制造方法
【专利摘要】本发明公开了一种数据断点监控方法,调试器设置第一触发点,在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器,并根据所述数据断点寄存器监控所述第一触发点;本发明还公开了一种数据断点监控装置、调试器,通过本发明的方案,可以设置第一触发点为被调试程序中任意的全局变量或局部变量,实现对任意变量的监控。
【专利说明】一种数据断点监控方法、装置及调试器
【技术领域】
[0001]本发明涉及数据调试技术,尤其涉及一种数据断点监控方法、装置及调试器。
【背景技术】
[0002]数据断点监控涉及的程序越来越庞大,程序内部的关联越来越多,内存问题也相应越来越多。因此,出现了内存越界读写、空指针读写、非法地址读写等内存问题,这些问题一直困扰着软件开发人员。
[0003]调试器是一种帮助开发人员分析和定位程序故障的工具,不仅能够在被调试程序中设置断点、查看变量和寄存器、显示堆栈和求表达式值,而且能够控制被调试程序单步进入、单步跳过、单步返回、暂挂、继续运行等操作。
[0004]目前常用的调试器仅能对被调试程序中内存地址固定的全局变量进行数据断点监控,而由于被调试程序中局部变量对应的内存地址存在的时间比较短,现有调试器无法实现对内存地址不确定的局部变量进行数据断点监控。
【发明内容】
[0005]本发明主要提供一种数据断点监控方法、装置及调试器,能够对被调试程序中任意变量进行数据断点监控。
[0006]本发明的技术方案是这样实现的:
[0007]本发明提供一种数据断点监控方法,该方法包括:
[0008]调试器设置第一触发点,在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器,并根据所述数据断点寄存器监控所述第一触发点。
[0009]上述方案中,所述调试器设置第一触发点为:所述调试器在被调试程序指定位置设置用于开启自定义数据断点监控功能的数据断点。
[0010]上述方案中,所述根据所述第一触发点的数据断点信息设置数据断点寄存器包括:调试器确定出第一触发点的数据断点信息中有开启自定义数据断点功能标志,根据第一触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性设置数据断点寄存器,所述数据断点寄存器包括数据断点地址寄存器和数据断点控制寄存器。
[0011]上述方案中,所述根据第一触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性设置数据断点寄存器为:
[0012]当第一触发点对应全局变量名时,所述调试器通过查找符号表获得所述全局变量名对应的数据断点监控地址;
[0013]当第一触发点对应内存地址时,所述调试器将所述内存地址进行字符串转换获得数据断点监控地址;
[0014]当第一触发点对应局部变量名时,所述调试器通过分析被调试程序上下文获得数据断点监控地址;
[0015]所述调试器在获得数据断点监控地址后,将所获得的数据断点监控地址及监控属性分别写入数据断点地址寄存器和控制寄存器。
[0016]上述方案中,所述调试器根据所述数据断点寄存器监控所述第一触发点为:所述调试器根据所述数据断点控制寄存器中的监控属性对所述数据断点地址寄存器中数据断点监控地址对应的内存区域进行监控。
[0017]上述方案中,所述调试器设置第二触发点,在所述第二触发点被触发时,根据所述第二触发点的数据断点信息清除对应数据断点寄存器。
[0018]上述方案中,所述调试器设置第二触发点为:所述调试器在被调试程序指定位置设置用于关闭自定义数据断点监控功能的数据断点。
[0019]上述方案中,所述根据所述第二触发点的数据断点信息清除对应数据断点寄存器为:调试器确定出第二触发点的数据断点信息中有关闭自定义数据断点功能标志,根据第二触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性删除对应数据断点寄存器,所述数据断点寄存器包括数据断点地址寄存器和数据断点控制寄存器。
[0020]本发明提供一种数据断点监控装置,该装置包括:第一设置模块、第二设置模块、触发模块和监控模块;
[0021]所述第一设置模块,用于设置第一触发点;
[0022]所述触发模块,用于在所述第一触发点被触发时,通知所述第二设置模块;
[0023]所述第二设置模块,用于在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器;
[0024]所述监控模块,用于根据所述数据断点寄存器监控所述第一触发点。
[0025]上述方案中,所述装置还包括:清除模块,用于在第二触发点被触发时,根据第二触发点的数据断点信息清除对应的数据断点寄存器;
[0026]相应的,所述第一设置模块,还用于设置第二触发点;
[0027]相应的,所述触发模块,还用于在所述第二触发点被触发时,通知所述清除模块。
[0028]本发明还提供一种调试器,该调试器包括:以上所述的数据断点监控装置。
[0029]本发明提供了一种数据断点监控方法、装置及调试器,调试器设置第一触发点,在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器,并根据所述数据断点寄存器监控第一触发点;如此,可以设置第一触发点为被调试程序中任意的全局变量或局部变量,实现对任意变量的监控。
【专利附图】
【附图说明】
[0030]图1为本发明实现的数据断点监控方法的流程示意图;
[0031]图2为本发明实现的数据断点关闭方法的流程示意图;
[0032]图3为本发明实现的数据断点监控装置的结构示意图;
[0033]图4为本发明实现的调试器的结构示意图。
【具体实施方式】
[0034]本发明实施例中,调试器设置第一触发点,在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器,并根据所述数据断点寄存器监控第一触发点。
[0035]下面通过附图及具体实施例对本发明做进一步的详细说明。
[0036]本发明实现一种数据断点监控方法,如图1所示,该方法主要包括以下步骤:
[0037]步骤101:调试器设置第一触发点;
[0038]具体的,调试器采用向计算机内核发送31(^10?信号的方式暂停被调试程序运行,在被调试程序指定位置设置一个用于开启自定义数据断点监控功能的数据断点,所述数据断点即为第一触发点,所述数据断点的属性包括如下数据断点信息:开启自定义数据断点功能标志、数据断点所对应的内存地址或变量名、和监控属性等,所述数据断点所对应的变量名可以是全局变量名或局部变量名。
[0039]这里,所述数据断点的属性还可以包括数据断点监控长度的数据断点信息,所述数据断点监控长度用于控制数据断点监控范围。
[0040]所述指定位置一般为需要监控的全局变量或局部变量在被调试程序中的位置。
[0041]步骤102:在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器;
[0042]具体的,在被调试程序命中第一触发点时,被调试程序通过计算机内核向调试器通知第一触发点异常,调试器判断第一触发点的数据断点信息中是否有开启自定义数据断点功能标志,如果有,则根据第一触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性设置数据断点寄存器,所述数据断点寄存器包括数据断点地址寄存器和数据断点控制寄存器。其中,所述设置数据断点寄存器可以为:如果第一触发点对应的是一个全局变量名,那么所述调试器可以通过查找符号表获得所述全局变量名对应的数据断点监控地址,其中,符号表可以由调试器分析被调试程序的全局变量获得,所述符号表中保存所有全局变量对应的内存地址;如果第一触发点对应的是一个内存地址,那么所述调试器可以将所述内存地址进行字符串转换获得数据断点监控地址;如果第一触发点对应的是一个局部变量名,那么所述调试器可以通过分析被调试程序上下文获得数据断点监控地址;所述调试器在获得数据断点监控地址后,通过计算机内核提供的?廿狀6()系统函数将所获得的数据断点监控地址及监控属性分别写入数据断点地址寄存器和控制寄存器,所述数据断点地址寄存器和控制寄存器为预先设置的两个空寄存器。
[0043]这里,所述调试器还可以将数据断点监控长度的数据断点信息写入控制寄存器。
[0044]步骤103:调试器根据所述数据断点寄存器监控所述第一触发点;
[0045]具体的,调试器根据控制寄存器中的监控属性对数据断点地址寄存器中数据断点监控地址对应的内存区域进行监控,如:监控属性为读操作时,调试器监控数据断点地址寄存器中数据断点监控地址对应的内存区域是否被读取;监控属性为写操作时,调试器监控数据断点地址寄存器中数据断点监控地址对应的内存区域是否被改写。
[0046]本步骤中,所述调试器还根据控制寄存器中的数据断点监控长度,在数据断点监控长度范围内对数据断点地址寄存器中数据断点监控地址对应的内存区域进行监控。
[0047]此外,本发明还给出了关闭自定义数据断点监控功能的方法,如图2所示,该方法主要包括以下步骤:
[0048]步骤201:调试器设置第二触发点;
[0049]具体的,调试器采用向计算机内核发送31(^10?信号的方式暂停被调试程序运行,在被调试程序指定位置设置一个用于关闭自定义数据断点监控功能的数据断点,所述数据断点即为第二触发点,所述数据断点的属性包括如下数据断点信息:关闭自定义数据断点功能标志、数据断点所对应的内存地址或变量名、和监控属性等,所述数据断点所对应的变量名可以是全局变量名或局部变量名。这里,所述数据断点的属性还可以包括数据断点监控长度的数据断点信息,所述数据断点监控长度用于控制数据断点监控范围。
[0050]步骤202:在所述第二触发点被触发时,根据所述第二触发点的数据断点信息清除对应数据断点寄存器;
[0051]具体的,在被调试程序命中第二触发点时,被调试程序通过计算机内核向调试器通知第二触发点异常,调试器判断第二触发点的数据断点信息中是否有关闭自定义数据断点功能标志,如果有,则根据第二触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性删除对应数据断点寄存器,所述数据断点寄存器包括数据断点地址寄存器和数据断点控制寄存器。其中,所述根据第二触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性删除对应可以为:如果第二触发点对应的是一个全局变量名,那么所述调试器可以通过查找符号表获得所述全局变量名对应的数据断点监控地址,其中,符号表可以由调试器分析被调试程序的全局变量获得,所述符号表中保存所有全局变量对应的内存地址;如果第二触发点对应的是一个内存地址,那么所述调试器可以将所述内存地址进行字符串转换获得数据断点监控地址;如果第二触发点对应的是一个局部变量名,那么所述调试器可以通过分析被调试程序上下文获得数据断点监控地址;所述调试器在获得数据断点监控地址后,通过计算机内核将获得的数据断点监控地址与数据断点地址寄存器中的监控地址比较,如果相同,则将所述数据断点地址寄存器中的所述监控地址清除;并将所述监控属性与数据断点控制寄存器中的监控属性比较,如果相同,则将所述数据断点控制寄存器中的所述监控属性清除。
[0052]这里,所述调试器还可以将数据断点监控长度的数据断点信息从所述数据断点控制寄存器中清除。
[0053]为了实现上述方法,本发明还提供一种数据断点监控装置,如图3所示,该数据断点监控装置36包括:第一设置模块31、第二设置模块32、触发模块33、监控模块34,
[0054]第一设置模块31,用于设置第一触发点;
[0055]第二设置模块32,用于在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器;
[0056]触发模块33,用于在所述第一触发点被触发时,通知第二设置模块32 ;
[0057]监控模块34,用于根据所述数据断点寄存器监控所述第一触发点;
[0058]第一设置模块31,具体用于在被调试程序指定位置设置一个用于开启自定义数据断点监控功能的数据断点,所述数据断点即为第一触发点;
[0059]其中,所述数据断点的属性包括如下数据断点信息:开启自定义数据断点功能标志、数据断点所对应的内存地址或变量名、和监控属性等,所述数据断点所对应的变量名可以是全局变量名或局部变量名;
[0060]所述数据断点的属性还可以包括数据断点监控长度的数据断点信息,所述数据断点监控长度用于控制数据断点监控范围。
[0061]触发模块33,具体用于在被调试程序命中第一触发点时,第一触发点被触发,通过计算机内核向第二设置模块32通知第一触发点异常;
[0062]第二设置模块32,具体用于在所述第一触发点被触发时,判断第一触发点的数据断点信息中是否有开启自定义数据断点功能标志,如果有,则根据第一触发点的数据断点信息中的数据断点所对应的内存地址或变量名、和监控属性设置数据断点寄存器;
[0063]其中,所述第二设置模块32,具体还用于如果第一触发点对应的是一个全局变量名,那么可以通过查找符号表获得所述全局变量名对应的数据断点监控地址,其中,符号表可以通过分析被调试程序的全局变量获得,所述符号表中保存所有全局变量对应的内存地址;如果第一触发点对应的是一个内存地址,那么可以将所述内存地址进行字符串转换获得数据断点监控地址;如果第一触发点对应的是一个局部变量名,那么可以通过分析被调试程序上下文获得数据断点监控地址;在获得数据断点监控地址后,通过计算机内核提供的?廿%60系统函数将所获得的数据断点监控地址及监控属性分别写入数据断点地址寄存器和控制寄存器,所述数据断点地址寄存器和控制寄存器为预先设置的两个空寄存器。
[0064]所述第二设置模块32,具体还用于将数据断点监控长度的数据断点信息写入控制寄存器。
[0065]监控模块34,具体用于根据控制寄存器中的监控属性对数据断点地址寄存器中数据断点监控地址对应的内存区域进行监控。例如:监控属性为读操作时,监控数据断点地址寄存器中数据断点监控地址对应的内存区域是否被读取;监控属性为写操作时,监控数据断点地址寄存器中数据断点监控地址对应的内存区域是否被改写。
[0066]监控模块34,具体还用于根据监控寄存器中的数据断点监控长度,在数据断点监控长度范围内对数据断点地址寄存器中数据断点监控地址对应的内存区域进行监控。
[0067]该装置还包括:清除模块35,用于在第二触发点被触发时,根据第二触发点的数据断点信息清除对应的数据断点寄存器;
[0068]相应的,第一设置模块31,还用于设置第二触发点;
[0069]相应的,触发模块33,还用于在所述第二触发点被触发时,通知清除模块35 ;
[0070]第一设置模块31,具体还用于在被调试程序指定位置设置一个用于关闭自定义数据断点监控功能的数据断点,所述数据断点为第二触发点;
[0071]其中,所述数据断点的属性包括如下数据断点信息:关闭自定义数据断点功能标志、数据断点所对应的内存地址或变量名、和监控属性等,所述数据断点所对应的变量名可以是全局变量名或局部变量名;
[0072]所述数据断点的属性还可以包括数据断点监控长度的数据断点信息,所述数据断点监控长度用于控制数据断点监控范围。
[0073]清除模块35,具体用于判断第二触发点的数据断点信息中是否有关闭自定义数据断点功能标志,如果有,则根据第二触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性删除对应的数据断点寄存器,所述数据断点寄存器包括数据断点地址寄存器和数据断点控制寄存器;
[0074]所述清除模块35具体用于:如果第二触发点对应的是一个全局变量名,那么可以通过查找符号表获得所述全局变量名对应的数据断点监控地址,其中,符号表可以通过分析被调试程序的全局变量获得,所述符号表中保存所有全局变量对应的内存地址;如果第二触发点对应的是一个内存地址,那么可以将所述内存地址进行字符串转换获得数据断点监控地址;如果第二触发点对应的是一个局部变量名,那么可以通过分析被调试程序上下文获得数据断点监控地址;在获得数据断点监控地址后,通过计算机内核将获得的数据断点监控地址与数据断点地址寄存器中的监控地址比较,如果相同,则将所述数据断点地址寄存器中的所述监控地址清除;并将所述监控属性与数据断点控制寄存器中的监控属性比较,如果相同,则将所述数据断点控制寄存器中的所述监控属性清除。
[0075]清除模块35,具体还用于将数据断点监控长度的数据断点信息从所述数据断点控制寄存器中清除。
[0076]本发明还提出一种调试器,如图4所示,该调试器41包括图3中的数据断点监控装置36,
[0077]所述数据断点监控装置36,用于设置第一触发点,在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器,并根据所述数据断点寄存器监控所述第一触发点;其中,具体设置方法和监控方法同上述图3,这里不再赘述。
[0078]所述数据断点监控装置36,还用于设置第二触发点,在所述第二触发点被触发时,根据所述第二触发点的数据断点信息清除所述数据断点寄存器;具体清除方法同上述图3,这里不再赘述。
[0079]综上所述,本发明通过调试器设置第一触发点,在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器,并根据所述数据断点寄存器监控第一触发点;如此,可以设置第一触发点为被调试程序中任意的全局变量或局部变量,实现对任意变量的监控。本发明还通过调试器设置第二触发点,在所述第二触发点被触发时,根据所述第二触发点的数据断点信息清除所述数据断点寄存器;如此,可以设置第二触发点为被调试程序中任意的全局变量或局部变量,实现对任意变量的清除。
[0080]以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
【权利要求】
1.一种数据断点监控方法,其特征在于,该方法包括: 调试器设置第一触发点,在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器,并根据所述数据断点寄存器监控所述第一触发点。
2.根据权利要求1所述的方法,其特征在于,所述调试器设置第一触发点为:所述调试器在被调试程序指定位置设置用于开启自定义数据断点监控功能的数据断点。
3.根据权利要求1所述的方法,其特征在于,所述根据所述第一触发点的数据断点信息设置数据断点寄存器包括:调试器确定出第一触发点的数据断点信息中有开启自定义数据断点功能标志,根据第一触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性设置数据断点寄存器,所述数据断点寄存器包括数据断点地址寄存器和数据断点控制寄存器。
4.根据权利要求3所述的方法,其特征在于,所述根据第一触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性设置数据断点寄存器为:当第一触发点对应全局变量名时,所述调试器通过查找符号表获得所述全局变量名对应的数据断点监控地址; 当第一触发点对应内存地址时,所述调试器将所述内存地址进行字符串转换获得数据断点监控地址; 当第一触发点对应局部变量名时,所述调试器通过分析被调试程序上下文获得数据断点监控地址; 所述调试器在获得数据断点监控地址后,将所获得的数据断点监控地址及监控属性分别写入数据断点地址寄存器和控制寄存器。
5.根据权利要求4所述的方法,其特征在于,所述调试器根据所述数据断点寄存器监控所述第一触发点为:所述调试器根据所述数据断点控制寄存器中的监控属性对所述数据断点地址寄存器中数据断点监控地址对应的内存区域进行监控。
6.根据权利要求1所述的方法,其特征在于,所述调试器设置第二触发点,在所述第二触发点被触发时,根据所述第二触发点的数据断点信息清除对应数据断点寄存器。
7.根据权利要求6所述的方法,其特征在于,所述调试器设置第二触发点为:所述调试器在被调试程序指定位置设置用于关闭自定义数据断点监控功能的数据断点。
8.根据权利要求6所述的方法,其特征在于,所述根据所述第二触发点的数据断点信息清除对应数据断点寄存器为:调试器确定出第二触发点的数据断点信息中有关闭自定义数据断点功能标志,根据第二触发点的数据断点信息中数据断点所对应的内存地址或变量名、和监控属性删除对应数据断点寄存器,所述数据断点寄存器包括数据断点地址寄存器和数据断点控制寄存器。
9.一种数据断点监控装置,其特征在于,该装置包括:第一设置模块、第二设置模块、触发模块和监控模块; 所述第一设置模块,用于设置第一触发点; 所述触发模块,用于在所述第一触发点被触发时,通知所述第二设置模块; 所述第二设置模块,用于在所述第一触发点被触发时,根据所述第一触发点的数据断点信息设置数据断点寄存器; 所述监控模块,用于根据所述数据断点寄存器监控所述第一触发点。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:清除模块,用于在第二触发点被触发时,根据第二触发点的数据断点信息清除对应的数据断点寄存器; 相应的,所述第一设置模块,还用于设置第二触发点; 相应的,所述触发模块,还用于在所述第二触发点被触发时,通知所述清除模块。
11.一种调试器,其特征在于,包括如权利要求9或10所述的数据断点监控装置。
【文档编号】G06F11/26GK104461806SQ201310423291
【公开日】2015年3月25日 申请日期:2013年9月16日 优先权日:2013年9月16日
【发明者】吴春江 申请人:中兴通讯股份有限公司