CN104346267B - 生成程序缺陷定位信息的方法及装置 - Google Patents
生成程序缺陷定位信息的方法及装置 Download PDFInfo
- Publication number
- CN104346267B CN104346267B CN201310343878.0A CN201310343878A CN104346267B CN 104346267 B CN104346267 B CN 104346267B CN 201310343878 A CN201310343878 A CN 201310343878A CN 104346267 B CN104346267 B CN 104346267B
- Authority
- CN
- China
- Prior art keywords
- information
- page
- event
- page jump
- bugs
- 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
- Stored Programmes (AREA)
- Storage Device Security (AREA)
Abstract
一种生成程序缺陷定位信息的方法,包括:跟踪获取页面跳转事件;获取与所述页面跳转事件对应的作为跳转目标的页面控制对象的类型标识信息以及触发所述页面跳转事件的指令信息;根据所述类型标识信息及对应的指令信息按时间顺序生成页面跳转信息序列;获取程序崩溃事件及其对应的内存堆栈信息;根据所述内存堆栈信息和所述页面跳转信息序列生成程序缺陷定位信息。此外,还提供了一种生成程序缺陷定位信息的装置。上述生成程序缺陷定位信息的方法及装置能够提高程序缺陷定位的准确度。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种生成程序缺陷定位信息的方法及装置。
背景技术
传统技术中,定位程序缺陷的方法通常为在程序崩溃时,记录下程序对应的内存堆栈信息。程序的内存堆栈信息,可以反映出程序当前执行到的代码位置,包括类名(或代码文件名)以及在代码文件中对应的行数。通过分析内存堆栈信息即可定位到造成运行时崩溃的程序缺陷的位置,并生成相应的程序缺陷定位信息。
然而,发明人经研究发现传统技术中的定位程序缺陷的方法至少存在以下问题:传统技术中,野指针(指向错误的内存位置的指针,其指向的内存区域的数据为错误数据)引起的程序崩溃并不在崩溃时内存堆栈信息记录的位置处,从而造成定位不准确。
发明内容
基于此,有必要提供一种能提高定位的准确度的生成程序缺陷定位信息的方法。
一种生成程序缺陷定位信息的方法,包括:
跟踪获取页面跳转事件;
获取与所述页面跳转事件对应的作为跳转目标的页面控制对象的类型标识信息以及触发所述页面跳转事件的指令信息;
根据所述类型标识信息及对应的指令信息按时间顺序生成页面跳转信息序列;
获取程序崩溃事件及其对应的内存堆栈信息;
根据所述内存堆栈信息和所述页面跳转信息序列生成程序缺陷定位信息。
此外,还有必要提供一种能提高定位的准确度的生成程序缺陷定位信息的装置。
一种生成程序缺陷定位信息的装置,包括:
页面跳转追踪模块,用于跟踪获取页面跳转事件;
事件信息获取模块,用于获取与所述页面跳转事件对应的作为跳转目标的页面控制对象的类型标识信息以及触发所述页面跳转事件的指令信息;
跳转信息序列生成模块,用于根据所述类型标识信息及对应的指令信息按时间顺序生成页面跳转信息序列;
内存堆栈信息获取模块,用于获取程序崩溃事件及其对应的内存堆栈信息;
程序缺陷定位模块,用于根据所述内存堆栈信息和所述页面跳转信息序列生成程序缺陷定位信息。
上述生成程序缺陷定位信息的方法及装置,不仅获取程序崩溃时的内存堆栈信息,还对内存堆栈信息进行了筛选,得到了与页面跳转相关的页面控制对象即相应的指令信息对应的内存堆栈信息,然后根据该筛选得到的内存堆栈信息生成程序缺陷定位信息。与传统技术相比,获取到的内存堆栈信息包含跳转前后的页面控制对象对应的内存区域,其包含了在页面跳转过程中生成的可能引起程序崩溃的野指针的指向的内存区域范围,从而提高了准确度。
附图说明
图1为一个实施例中生成程序缺陷定位信息的方法的流程图;
图2为一个实施例中页面跳转过程的操作界面图;
图3为一个实施例中页面跳转过程的操作界面图;
图4为一个实施例中页面分享装置的结构示意图。
具体实施方式
在一个实施例中,如图1所示,一种生成程序缺陷定位信息的方法,该方法完全依赖于计算机程序,该计算机程序可运行于基于冯洛伊曼体系的计算机系统上,例如智能手机、平板电脑、智能眼镜等移动设备或Tomcat、JBoss等web服务器上,该方法包括:
步骤S102,跟踪获取页面跳转事件。
在现有技术中,应用程序通常采用MVC(Model-View-Controller,模型-视图-控制器)框架进行分层设计。其中模型层用于存储数据,视图层用于以预设的样式展示数据,控制层则根据业务流程针对用户输入进行页面(视图)的跳转以及控制模型层数据的存取。视图层的页面视图对象与控制层的页面控制对象关联,页面试图对象用于获取用户的输入然后将数据传入页面控制对象,页面控制对象则用于对数据进行计算和处理,然后将其存储到模型层中。页面跳转事件即为应用程序运行时根据用户输入的指令在处于控制层的页面控制对象之间跳转时触发的系统事件。
在本实施例中,跟踪获取页面跳转事件的步骤包括:通过监听页面跳转函数的调用指令跟踪获取页面跳转事件。
在本实施例对应的应用场景中,本方法基于IOS系统。在IOS系统中,页面跳转由pop和push函数控制,其中,pop函数用于弹出前一页面,而push函数用于展开新的页面。可通过重载pop函数和push函数加入监听函数来跟踪获取页面跳转事件。例如,如图2所示,用户在表单页面中填写表单时,若点击“返回”,则触发调用pop函数的调用指令;若用户点击“提交”,则触发调用push函数的调用指令。
在另一个实施例中,跟踪获取页面跳转事件的步骤还包括:通过监听网页访问请求获取页面跳转事件。
在本实施例对应的应用场景中,本方法基于Tomcat应用服务器。用户通过在浏览器地址栏输入网页地址或点击网页上的链接即可向Tomcat服务器发起网页访问请求。网页访问请求中包含url(Uniform Resource Locator,统一资源定位符),不同的url即对应不同的页面,由相应的页面控制对象servlet进行处理。
步骤S104,获取与页面跳转事件对应的作为跳转目标的页面控制对象的类型标识信息以及触发页面跳转事件的指令信息。
在本实施例中,获取与页面跳转事件对应的作为跳转目标的页面控制对象的类型标识信息的步骤还包括:
获取该页面控制对象的类,获取类的类名的哈希值或类的内存偏移量作为类型标识信息。
与页面跳转事件对应的作为跳转目标的页面控制对象即为跳转后处于激活状态的页面控制对象。例如,如图2和图3所示,用户填写完表单,点击“提交”按钮前,填写表单视图的对应的页面控制对象(图2)处于激活状态,点击“提交”按钮后,跳转至新展开的显示提交成功的视图对应的页面控制对象(图3),该页面控制对象即处于激活状态,为页面跳转事件对应的作为跳转目标的页面控制对象。
例如,在基于IOS系统的应用场景中,页面控制对象为继承自Controller类型的子类的对象实例,且页面A对应的页面控制对象为controller1对象实例,其对应的类型为AController(AController为Controller的子类);页面B对应的页面控制对象为controller2对象实例,其对应的类型为BController(BController为Controller的子类)。则由页面A跳转至页面B时,可获取到作为该次页面跳转事件的跳转目标的页面控制对象为controller2,其对应的类型标识即为其类名BController的哈希值;若用户点击返回由页面B跳转回页面A,则获取到作为该次页面跳转事件的跳转目标的页面控制对象为controller1,其对应的类型标识即为其类名AController的哈希值。
在本实施例中,获取触发页面跳转事件的指令信息的步骤还包括:获取所述页面跳转函数的调用指令信息。例如,若用户点击“提交”按钮,调用submit函数进行提交,该submit函数中调用push函数跳转页面,则可获取该submit函数的标识信息作为指令信息。
在另一个实施例中,获取触发页面跳转事件的指令信息的步骤还包括:获取网页访问请求的链接作为指令信息。例如,若用户通过点击网页页面内的链接进行页面跳转,则可获取该链接作为指令信息。
步骤S106,根据类型标识信息及对应的指令信息按时间顺序生成页面跳转信息序列。
在本实施例中中,用户的操作可触发多次页面跳转,从而可捕获多次页面跳转事件,可按照跟踪获取到页面跳转事件的时间的先后顺序生成页面跳转信息序列,该序列的元素即为一次页面跳转事件中获取到的页面控制对象的类型标识信息和相应的指令信息。
例如,若用户的操作先后从controller1跳转至controller2、controller3和controller4,每次跳转相应的指令信息为method1、method2、method3和method4,则生成页面跳转信息序列可采用以下形式表示:
[controller1:method1] [controller2:method2] [controller3:method3][controller4:method4]。
步骤S108,获取程序崩溃事件及其对应的内存堆栈信息。
程序崩溃事件即程序崩溃时操作系统派发的系统事件,接收到程序崩溃事件后通常可通过符号表还原内存堆栈即可获取到内存堆栈信息。例如,获取到的内粗内存堆栈信息可如表1所示:
表1
其中,内存堆栈信息包含了对象类型信息(如CoreFoundation)、函数调用信息(如AutoreleasePoolPage::pop)、代码位置信息(每行记录末尾的数字即为执行到的行数)。
步骤S110,根据内存堆栈信息和页面跳转信息序列生成程序缺陷定位信息。
在本实施例中,可根据页面跳转信息序列获取程序崩溃事件对应的页面控制对象的类型标识信息;在程序崩溃事件对应的内存堆栈信息中筛选出与类型标识信息对应的内存堆栈信息;根据与类型标识信息对应的内存堆栈信息生成程序缺陷定位信息。
在捕获到程序崩溃事件后,可在程序崩溃事件对应的内存堆栈信息中进行查找,找到对象类型信息与页面跳转信息序列中的类型标识信息匹配,且函数调用信息和与类型标识信息为同一序列元素的指令信息匹配的内存堆栈信息,然后根据该筛选后得到的内存堆栈信息中的代码位置信息生成程序缺陷定位信息。
例如,在一个应用场景中,用户在页面A上点击“提交”跳转至页面B后,页面B弹出对话框,需要用户进行确认,若用户先不点击“确认”按钮,在点击“返回”按钮由页面B跳转至页面A后,再点击对话框上的“确认”按钮,则由于页面B跳转至页面A后,与页面B对应的页面控制对象已被注销,使得对与页面B对应的对话框进行的操作会引起程序崩溃。而在上述页面跳转过程中,获取到的页面跳转信息序列为:
[controllerB:method1] [controllerA:method2]
controllerB为页面B对应的页面控制对象的类型标识信息,controllerA为页面A对应的页面控制对象的类型标识信息。
则可在程序崩溃后获取到的内存堆栈信息中筛选出对象类型信息与controllerB对应的且函数调用信息与method1对应以及对象类型信息与controllerA对应的且函数调用信息与method2对应的内存堆栈信息,然后根据其代码位置信息生成程序缺陷定位信息。
在本应用场景中,若仅采用传统技术定位程序缺陷,则由于程序崩溃时处于激活状态的页面为页面A,因此只会获取与页面A对应的页面控制对象的内存堆栈信息(即页面A对应的页面控制对象的内存区域)生成程序缺陷定位信息,而由于对话框中的野指针指向的是页面B对应的页面控制对象对应的内存区域,使得该程序缺陷定位信息准确度不高。而采用本实施例中的方法生成的程序缺陷定位信息,既包含了页面A对应的页面控制对象的内存堆栈信息,也包含了页面B对应的页面控制对象的内存堆栈信息,从而包含了可能引起程序崩溃的野指针指向的内存区域的堆栈信息,从而提高了准确度。
在一个实施例中,如图4所示,一种生成程序缺陷定位信息的装置,包括:
页面跳转追踪模块102,用于跟踪获取页面跳转事件。
事件信息获取模块104,用于获取与页面跳转事件对应的作为跳转目标的页面控制对象的类型标识信息以及触发页面跳转事件的指令信息。
跳转信息序列生成模块106,用于根据类型标识信息及对应的指令信息按时间顺序生成页面跳转信息序列。
内存堆栈信息获取模块108,用于获取程序崩溃事件及其对应的内存堆栈信息。
程序缺陷定位模块110,用于根据内存堆栈信息和页面跳转信息序列生成程序缺陷定位信息。
在本实施例中,页面跳转追踪模块102还用于通过监听页面跳转函数的调用指令跟踪获取页面跳转事件。
在本实施例中,事件信息获取模块104还用于获取页面跳转函数的调用指令信息。
在本实施例中,事件信息获取模块104还用于获取页面控制对象的类,获取类的类名的哈希值或类的内存偏移量作为类型标识信息。
在本实施例中,程序缺陷定位模块110还用于根据页面跳转信息序列获取程序崩溃事件对应的页面控制对象的类型标识信息,在程序崩溃事件对应的内存堆栈信息中筛选出与类型标识信息对应的内存堆栈信息,根据与类型标识信息对应的内存堆栈信息生成程序缺陷定位信息。
上述生成程序缺陷定位信息的方法及装置,不仅获取程序崩溃时的内存堆栈信息,还对内存堆栈信息进行了筛选,得到了与页面跳转相关的页面控制对象即相应的指令信息对应的内存堆栈信息,然后根据该筛选得到的内存堆栈信息生成程序缺陷定位信息。与传统技术相比,获取到的内存堆栈信息包含跳转前后的页面控制对象对应的内存区域,其包含了在页面跳转过程中生成的可能引起程序崩溃的野指针的指向的内存区域范围,从而提高了准确度。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (8)
1.一种生成程序缺陷定位信息的方法,包括:
跟踪获取页面跳转事件;
获取与所述页面跳转事件对应的作为跳转目标的页面控制对象的类型标识信息以及获取触发所述页面跳转事件的指令信息;
根据所述类型标识信息及对应的指令信息按时间顺序生成页面跳转信息序列;
获取程序崩溃事件及其对应的内存堆栈信息;
根据所述页面跳转信息序列获取所述程序崩溃事件对应的页面控制对象的类型标识信息;
在所述程序崩溃事件对应的内存堆栈信息中筛选出与所述类型标识信息对应的内存堆栈信息;
根据所述与所述类型标识信息对应的内存堆栈信息生成程序缺陷定位信息。
2.根据权利要求1所述的生成程序缺陷定位信息的方法,其特征在于,所述跟踪获取页面跳转事件的步骤包括:
通过监听页面跳转函数的调用指令跟踪获取页面跳转事件。
3.根据权利要求2所述的生成程序缺陷定位信息的方法,其特征在于,所述获取触发所述页面跳转事件的指令信息的步骤包括:
获取所述页面跳转函数的调用指令信息。
4.根据权利要求1所述的生成程序缺陷定位信息的方法,其特征在于,所述获取与所述页面跳转事件对应的作为跳转目标的页面控制对象的类型标识信息的步骤包括:
获取所述页面控制对象的类,获取所述类的类名的哈希值或所述类的内存偏移量作为类型标识信息。
5.一种生成程序缺陷定位信息的装置,其特征在于,包括:
页面跳转追踪模块,用于跟踪获取页面跳转事件;
事件信息获取模块,用于获取与所述页面跳转事件对应的作为跳转目标的页面控制对象的类型标识信息以及获取触发所述页面跳转事件的指令信息;
跳转信息序列生成模块,用于根据所述类型标识信息及对应的指令信息按时间顺序生成页面跳转信息序列;
内存堆栈信息获取模块,用于获取程序崩溃事件及其对应的内存堆栈信息;
程序缺陷定位模块,用于根据所述页面跳转信息序列获取所述程序崩溃事件对应的页面控制对象的类型标识信息,在所述程序崩溃事件对应的内存堆栈信息中筛选出与所述类型标识信息对应的内存堆栈信息,根据所述与所述类型标识信息对应的内存堆栈信息生成程序缺陷定位信息。
6.根据权利要求5所述的生成程序缺陷定位信息的装置,其特征在于,所述页面跳转追踪模块还用于通过监听页面跳转函数的调用指令跟踪获取页面跳转事件。
7.根据权利要求6所述的生成程序缺陷定位信息的装置,其特征在于,所述事件信息获取模块还用于获取所述页面跳转函数的调用指令信息。
8.根据权利要求5所述的生成程序缺陷定位信息的装置,其特征在于,所述事件信息获取模块还用于获取所述页面控制对象的类,获取所述类的类名的哈希值或所述类的内存偏移量作为类型标识信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310343878.0A CN104346267B (zh) | 2013-08-08 | 2013-08-08 | 生成程序缺陷定位信息的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310343878.0A CN104346267B (zh) | 2013-08-08 | 2013-08-08 | 生成程序缺陷定位信息的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104346267A CN104346267A (zh) | 2015-02-11 |
CN104346267B true CN104346267B (zh) | 2018-05-22 |
Family
ID=52501933
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310343878.0A Active CN104346267B (zh) | 2013-08-08 | 2013-08-08 | 生成程序缺陷定位信息的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104346267B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106557300B (zh) * | 2015-09-24 | 2020-04-07 | 腾讯科技(深圳)有限公司 | 一种野指针的函数栈信息确定方法、装置及电子设备 |
CN107305522A (zh) * | 2016-04-21 | 2017-10-31 | 富士通株式会社 | 用于对应用程序的重复崩溃进行检测的装置和方法 |
CN106528409A (zh) * | 2016-10-20 | 2017-03-22 | 腾讯音乐娱乐(深圳)有限公司 | 一种程序崩溃问题查找方法和装置 |
CN106502817A (zh) * | 2016-10-26 | 2017-03-15 | 努比亚技术有限公司 | 一种处理数据的方法和终端 |
CN108228432A (zh) * | 2016-12-12 | 2018-06-29 | 阿里巴巴集团控股有限公司 | 一种分布式链路跟踪、分析方法及服务器、全局调度器 |
CN107135235B (zh) * | 2017-07-05 | 2019-11-05 | 湖北鑫英泰系统技术股份有限公司 | 一种多级跳转后的ssh连接源追踪方法及装置 |
CN108268332A (zh) * | 2017-08-10 | 2018-07-10 | 广州神马移动信息科技有限公司 | 网页异常监控方法、设备及系统 |
CN107515948B (zh) * | 2017-09-12 | 2019-12-03 | 武汉斗鱼网络科技有限公司 | 页面跳转方法、装置及可读存储介质 |
CN108132817B (zh) * | 2017-12-26 | 2020-07-10 | 广州酷狗计算机科技有限公司 | 对象管理方法及装置 |
CN108234665B (zh) * | 2018-01-11 | 2021-07-09 | 北京值得买科技股份有限公司 | 跳转处理方法和设备 |
CN110618940B (zh) * | 2019-09-19 | 2024-02-06 | 腾讯科技(深圳)有限公司 | 堆栈信息追踪方法、装置、计算机可读介质及计算装置 |
CN111813663B (zh) * | 2020-06-19 | 2024-03-22 | 北京字节跳动网络技术有限公司 | 一种指针类型识别方法、装置、介质和设备 |
CN111813664B (zh) * | 2020-06-19 | 2024-02-13 | 北京字节跳动网络技术有限公司 | 一种崩溃信息收集方法、装置、介质和设备 |
CN113835912B (zh) * | 2020-06-24 | 2024-02-09 | 北京新氧科技有限公司 | 应用程序的崩溃信息处理方法及设备 |
CN112463582A (zh) * | 2020-10-22 | 2021-03-09 | 贝壳技术有限公司 | 崩溃信息处理方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541891A (zh) * | 2010-12-14 | 2012-07-04 | 深圳市金蝶中间件有限公司 | 一种基于拦截器的浏览器报错的方法和装置 |
CN103106133A (zh) * | 2011-11-09 | 2013-05-15 | 阿里巴巴集团控股有限公司 | 软件缺陷定位方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7490268B2 (en) * | 2004-06-01 | 2009-02-10 | The Trustees Of Columbia University In The City Of New York | Methods and systems for repairing applications |
-
2013
- 2013-08-08 CN CN201310343878.0A patent/CN104346267B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541891A (zh) * | 2010-12-14 | 2012-07-04 | 深圳市金蝶中间件有限公司 | 一种基于拦截器的浏览器报错的方法和装置 |
CN103106133A (zh) * | 2011-11-09 | 2013-05-15 | 阿里巴巴集团控股有限公司 | 软件缺陷定位方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104346267A (zh) | 2015-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104346267B (zh) | 生成程序缺陷定位信息的方法及装置 | |
CN110297759B (zh) | 一种制作测试页面脚本的方法、装置、设备及存储介质 | |
US9612936B2 (en) | Correlation of source code with system dump information | |
US9280608B2 (en) | Group bookmarks | |
CN106294372A (zh) | 应用程序页面快速访问方法及应用其的移动终端 | |
CN106610774B (zh) | 网页表格编辑方法及装置 | |
US10175954B2 (en) | Method of processing big data, including arranging icons in a workflow GUI by a user, checking process availability and syntax, converting the workflow into execution code, monitoring the workflow, and displaying associated information | |
US20150106723A1 (en) | Tools for locating, curating, editing, and using content of an online library | |
CN107679214B (zh) | 链接定位方法、装置、终端与计算机可读存储介质 | |
CN104572067A (zh) | 用于由源代码指定的用户界面的可视化的方法和系统 | |
CN111090797B (zh) | 数据获取方法、装置、计算机设备和存储介质 | |
CN107580013A (zh) | 跨域请求数据的方法及装置 | |
CN107066519A (zh) | 一种任务检测方法及装置 | |
CN107704604A (zh) | 一种消息持久化方法、服务器和计算机可读存储介质 | |
US20170199889A1 (en) | Method and device for identifying junk picture files | |
CN109948074A (zh) | 网站数据对接方法、装置、存储介质、处理器及电子设备 | |
CN104346053A (zh) | 一种表单处理方法和终端 | |
US9558161B2 (en) | Providing a recovery placeholder within an application | |
CN109542553A (zh) | 用户界面ui元素的信息抓取方法及装置、及存储介质 | |
CN106569675B (zh) | 一种提示框显示方法及装置 | |
US20140337709A1 (en) | Method and apparatus for displaying web page | |
CN106919503A (zh) | 应用程序的测试方法及装置 | |
CN111309221B (zh) | 页面处理方法、装置及设备 | |
CN104142885B (zh) | 一种用于对被测程序进行异常测试的方法和装置 | |
CN109710476B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |