CN106133698A - 用于用户模式崩溃报告的框架 - Google Patents

用于用户模式崩溃报告的框架 Download PDF

Info

Publication number
CN106133698A
CN106133698A CN201580014305.0A CN201580014305A CN106133698A CN 106133698 A CN106133698 A CN 106133698A CN 201580014305 A CN201580014305 A CN 201580014305A CN 106133698 A CN106133698 A CN 106133698A
Authority
CN
China
Prior art keywords
collapse
function
application
responsible
computer
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
Application number
CN201580014305.0A
Other languages
English (en)
Other versions
CN106133698B (zh
Inventor
A·穆图库姆萨拉萨米
H·张
A·古纳万
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN106133698A publication Critical patent/CN106133698A/zh
Application granted granted Critical
Publication of CN106133698B publication Critical patent/CN106133698B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0715Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0778Dumping, i.e. gathering error/state information after a fault for later diagnosis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了用于当应用崩溃时生成崩溃报告的用户模式崩溃报告***。用户模式崩溃报告***安装崩溃处理程序以用于当应用崩溃时在与应用相同的进程中执行。当应用崩溃时,崩溃处理程序识别在崩溃的时刻执行的进程的受害线程。崩溃处理程序然后遍历受害线程的调用栈来识别用于从应用的调用的函数返回的返回地址。崩溃处理程序识别与返回地址相对应的模块内的偏移,并且使用识别出的偏移来创建函数的调用链。崩溃处理程序然后基于识别出的调用链来生成崩溃报告。

Description

用于用户模式崩溃报告的框架
背景技术
虽然商业可用的计算机程序通常是非常可靠的,但是程序能够遇到导致故障的问题,所述故障使程序停止运行(functioning)。这样的故障被称作“崩溃”。可以使程序崩溃的问题包括硬件错误(例如,有缺陷的存储器位置)、程序中的逻辑错误(例如,使用无效的存储器地址)、不兼容的组件(例如,链接到过时的函数)等。当程序崩溃时,由于产生硬件或软件异常,操作***通常取得控制权。硬件异常可能出于各种原因而产生,包括试图用零做除数、使用无效的存储器地址、无效指令的尝试执行等等。程序在其上执行的处理器的指令集架构定义了不同类型的异常,并且其中当产生异常的每一个类型时,控制被转移。程序或操作***通常针对硬件异常的每一个类型安装硬件异常处理程序。相反,软件异常由软件检测到异常情况而产生。例如,当函数经过无效参数时、当C++异常没有被捕捉到等等,软件异常可能产生。程序或操作***通常针对每一个类型的软件异常安装软件异常处理程序。当产生异常时,针对该类型的异常的异常处理程序被调用来处理异常。每一个异常处理程序基于异常的严重程度来判定程序是否继续其执行或者终止其执行,导致崩溃。
当程序崩溃时,操作***通常收集关于崩溃的信息,基于所收集的信息生成崩溃报告,并且使崩溃报告对于崩溃的程序的开发者而言可用。当由操作***安装的崩溃处理程序被调用时,崩溃处理程序通常以处理器的监督权限模式(例如,监督模式或内核模式)来执行。因为崩溃处理程序以监督权限模式来执行,所以崩溃处理程序可以访问操作***的所有数据结构以及崩溃的程序的数据结构。访问这些数据结构允许崩溃处理程序收集它认为适用于崩溃报告的任何信息。一旦生成崩溃报告,则可以使崩溃报告能够对于开发者可用。例如,崩溃报告可以被传送到崩溃报告服务器,在该崩溃报告服务器中使得崩溃报告对于开发者而言是可用的。
虽然由操作***提供的崩溃报告提供了有价值的信息来帮助开发者确定程序的崩溃的原因,但是崩溃报告中的信息通常不针对程序本身或者开发者的需要而被专门定制。此外,崩溃报告服务器可以提供通用工具以由所有类型的程序的开发者使用。结果,程序的开发者可能不具有帮助确定崩溃的原因的可用的程序特定的工具。同样,操作***可以控制发送什么崩溃报告以及发送的时机。开发者可能想要这样的控制来满足开发者的需要。
发明内容
提供了用于当应用崩溃时生成崩溃报告的用户模式崩溃报告***。用户模式崩溃报告***安装了崩溃处理程序用于当应用崩溃时在与应用相同的进程中执行。当应用崩溃时,崩溃处理程序识别在崩溃时刻执行的进程的受害线程。崩溃处理程序然后遍历(walk)受害线程的调用堆栈以识别用于从应用的调用函数返回的返回地址。崩溃处理程序识别加载的模块内的与返回地址相对应的偏移,并且使用识别的偏移来创建函数的调用链。崩溃处理程序然后基于识别的调用链来生成崩溃报告。
附图说明
图1是示出了在一些实施例中的应用在其中执行的执行环境的框图。
图2是示出了在一些实施例中的用户模式崩溃报告***的模块表的框图。
图3是示出了在一些实施例中的模块的布局的框图。
图4是示出了在一些实施例中的调用栈的布局的框图。
图5是示出了在一些实施例中的用户模式崩溃报告***的组件的框图。
图6是示出了在一些实施例中的崩溃处理程序的处理的流程图。
图7是示出了在一些实施例中的崩溃报告***的调用链组件的添加函数的处理的流程图。
图8是示出了在一些实施例中的崩溃报告***的查找责任(blamed)函数组件的处理的流程图。
图9是示出了在一些实施例中的用户模式崩溃报告***的发送崩溃报告组件的处理的流程图。
图10是示出了在一些实施例中的用户模式崩溃报告***的添加模块调用栈组件的处理的流程图。
具体实施方式
提供了一种用于当应用崩溃时生成用户模式崩溃报告的方法和***。在一些实施例中,用户模式崩溃报告***在与崩溃的应用相同的进程中(即,进程内)执行崩溃处理程序,并且基于进程可访问的信息来生成崩溃报告。用户模式崩溃报告***然后控制崩溃报告到崩溃报告服务器的发送。用户模式崩溃报告***安装崩溃处理程序来以用户权限模式在与崩溃的应用相同的进程中执行。用户模式崩溃报告***安装特定于下面的操作***和编程环境的崩溃处理程序。例如,如果操作***是苹果公司的iOS操作***,那么可以安装崩溃处理程序来处理Mach异常和BSD信号。如果编程环境是基于C++的,那么可以安装崩溃处理程序来处理抛出的而不是捕获的异常。当应用崩溃时,崩溃处理程序可以识别在崩溃的时刻执行的进程的“受害线程”,并且然后生成在崩溃的时刻被调用的(激活的)函数的调用链。为了生成该调用链,崩溃处理程序遍历受害线程的调用栈来识别用于从应用的调用函数返回的返回地址。应用的代码被存储在一个或多个模块中,每一个模块都包含函数。崩溃处理程序然后识别模块内的与返回地址相对应的偏移,并且识别模块内的包括这些偏移的函数。崩溃处理程序可以针对进程中的每一个线程而不是仅受害线程生成调用链。用户模式崩溃报告***然后基于在识别出的调用链中的函数来生成崩溃报告。因为崩溃处理程序在与应用相同的进程中执行,所以崩溃处理程序访问了应用的所有数据。此外,崩溃处理程序存储崩溃报告,所以它们能够被发送到崩溃报告服务器。
在一些实施例中,用户模式崩溃报告***识别对应用的崩溃负责的应用的函数。对崩溃负责的函数是可能在崩溃的时刻在受害线程上执行的函数。用户模式崩溃报告***识别在崩溃的时刻调用的函数的调用链。用户模式崩溃报告***然后访问识别出免于对崩溃负责的函数。当程序将要崩溃时,应用可以在减轻崩溃的影响的尝试中调用各种管理函数,从而手机一些崩溃相关的信息等。这些管理函数可能在调用链中,但是不对崩溃负责。这些管理函数以及不对崩溃负责的其他函数被指定为免于负责。用户模式崩溃报告***处理函数的调用链来识别不免于对崩溃负责的调用的最后一个函数。用户模式崩溃报告***然后将该最后一个函数指定为对于崩溃负责。指定免于负责的函数的信息可以在配置文件中指定,并且该信息指示模块内的函数的偏移的范围。
图1是示出了在一些实施例中的应用在其中执行的执行环境的框图。执行环境100包括操作***组件110、应用环境120、以及应用沙盒130。操作***组件可以包括Mach层111、BSD层112、以及核心服务层113。Mach层提供基于内核的服务,例如,任务和线程管理、虚拟存储器管理、进程间通信、线程调度、异常处理服务(例如,Mach异常)等。BSD层提供更高层次的服务,例如,POSIX API、文件***实现、信令机制(例如,BSD信号)等。核心服务层提供各种服务,例如,时间和日期管理、基于流的I/O等等。应用环境可以提供用于图形用户界面、事件处理、I/O服务等的API。应用环境还可以提供应用在其中执行的沙盒。每一个应用131在其自己的沙盒中执行以防止一个应用的坏的行为不利地影响其他应用或者操作***。沙盒提供了应用在其中访问被严格控制的资源(例如,网络访问、盘空间)的集合的环境。崩溃处理程序在与崩溃的应用相同的沙盒中执行。
图2是示出了在一些实施例中的用户模式崩溃报告***的模块表的框图。模块表210将模块标识符映射到被加载进应用的地址空间的模块220的图像。每一个模块包含应用的函数。模块表包括被加载到应用的进程的每一个模块的条目211。每一个条目包含关于模块的标识信息以及对加载的模块的引用。为了生成模块表,在应用的进程中执行的用户模式崩溃报告***安装添加模块回调组件和删除模块回调组件,使得当模块分别加载到进程(即,进程的地址空间)中以及从进程中卸载时,***可以被通知。当模块被加载时,添加模块回调被调用。向添加模块回调传递关于模块的信息的引用,包括模块所加载的地址范围、模块的名称、模块的唯一生成标识符等,并且将相对应的条目添加到模块表。当模块被卸载时,调用删除模块回调。向删除模块回调传递对模块的引用,并且将相对应的条目从模块表中删除。
图3是示出了在一些实施例中的模块的布局的框图。应用的模块310包括各种函数,并且可以包括主函数,向主函数传递控制以开始应用的执行。模块还可以具有相关联的模块函数映射320,所述模块函数映射包含模块的每一个函数的条目,以及对应用的地址空间中的该模块的开始点的引用。模块函数映射可以与模块一起被提供,或者用户模式崩溃操作***可以基于对其他模块相关的信息的分析来生成模块函数映射。免于负责的函数表330识别出免于对崩溃负责的模块的那些函数。在这个示例中,函数f4、f5、以及f6免于对崩溃负责。
图4是示例了一些实施例中的调用栈的布局的框图。如调用栈400所示出的,模块310(图3)的函数f1、f2、f3、f4、以及f5被调用,正如分别由它们的栈帧401、402、403、404、以及405所表示的。栈指针SP指向调用栈的顶部的栈帧。每一个栈帧可以包含用于在调用函数和被调用函数之间传递参数的参数区域。每一个栈帧还包含指向调用函数的栈帧的引用SP。例如,栈帧405包括指向栈帧404的引用。引用SP由函数使用用于当它返回到调用函数时,删除其栈帧。由此,引用SP形成栈帧的链接的列表。每一个栈帧还包括对调用函数中的返回地址的引用RA。例如,栈帧405包括在函数f5的调用之后在函数f4中的返回地址。引用RA由返回函数使用来在调用之后返回到位置(或其它位置)。
为了生成调用链,用户模式崩溃报告***的崩溃处理程序遍历调用栈来识别已经被调用的每一个函数。可以向崩溃处理程序传递在崩溃的时刻正在执行的受害线程的线程标识符。崩溃处理程序可以与操纵***进行交互以取回线程相关的信息,例如,在崩溃时刻的线程的栈指针以及指令指针。通过使用模块函数映射来识别与该地址相对应的函数,从而崩溃处理程序可以使用指令指针来识别在崩溃时刻(即,当出现相对应的异常时)正在执行的函数。为了遍历调用栈,崩溃处理程序使用该栈指针来取回指向下一较低栈帧的指针以及调用函数的返回地址。通过使用模块函数映射,崩溃处理程序使用该返回地址来识别在崩溃的时刻正在执行的函数。崩溃处理程序继续遍历该栈,直到它遇到栈的底部。栈的底部可以例如通过存储在调用栈的底部帧(例如,引用SP==null)的区别于其他的值(例如,全1)来指定。在一些实施例中,崩溃处理程序可以以与生存更复杂的崩溃报告相似的形式来遍历进程的每一个线程的调用栈。
在一些实施例中,栈的底部可以不被崩溃处理程序容易地确定。例如,栈帧401可以包含引用SP的坏存储地址,即,指向下一较低栈帧的指针正常存储的位置。当崩溃处理程序试图使用该坏地址来访问存储器时,坏地址异常可能发生。为了检测遇到了调用栈的底部,崩溃处理程序可以安装坏存储访问处理程序,当试图对坏存储地址进行引用时,调用所述坏存储访问处理程序。坏存储访问处理程序可以简单地设置全局标志来指示坏存储访问试图,并且在试图的存储访问之后,返回到崩溃处理程序来执行指令。以下的指令可以查看全局标志,并且使用其作为到达栈的底部的指示。
图5是示出了在一些实施例中的用户模式崩溃报告***的组件的框图。用户崩溃报告***500包括模块数据510、数据结构520、以及组件530。对于每一个模块,模块数据包括模块511、符号表512、模块函数映射513、以及免于负责的函数表514。模块数据可以由开发者提供。符号表包含符号相关的信息,符号相关的信息可以用于使对函数和变量的引用符号化。免于负责的函数表可以被提供为存储在应用的配置文件中的配置信息。
由用户模式崩溃报告***使用的数据结构包括调用栈521、调用链522、模块表523、以及崩溃报告存储524。在下文中,用户模式崩溃报告***在对崩溃的受害线程的处理的引用中描述。对崩溃的应用的其他线程的处理将以与提供更复杂的崩溃报告类似的方式执行。调用栈代表受害线程的调用栈。调用链代表由崩溃处理程序确定的函数调用的链。模块表包含被加载到应用的地址空间的模块到其地址范围的映射。崩溃报告库存储由用户模式崩溃报告***生成的崩溃报告。崩溃报告库可以存储每一个崩溃的崩溃报告直到其被更新到崩溃报告服务器并且可以永久地存储关于崩溃的其他识别信息以对后续的崩溃报告的上传进行优化。
用户模式崩溃报告***的组件包括崩溃处理程序531、用于调用链组件的添加函数532、查找负责的函数组件533、存储崩溃报告组件534、添加模块回调535、删除模块回调536、以及调用栈坏地址处理程序537。可以被安装来处理各种类型的崩溃的崩溃处理程序遍历调用栈并且生成崩溃报告。用于调用链组件的添加函数识别与返回地址相关联的函数并且将该函数的标识符添加到调用链。查找负责函数组件识别对崩溃负责的函数。存储崩溃报告组件控制崩溃报告的存储,以用于当应用下一次执行时发送到崩溃报告服务器。添加模块回调和删除模块回调在应用被初始化为跟踪被加载和卸载的模块时被安装。调用栈坏地址处理程序由崩溃处理程序安装来处理由到达调用栈的底部引起的坏地址引用。
在其上可以实现用户模式崩溃报告***的计算设备和***可以包括中央处理单元、输入设备、输出设备(例如,显示设备和扬声器)、存储设备(例如,存储器和硬盘驱动)、网络接口、图形处理单元、加速度计、蜂窝无线链接接口、全球定位***设备等。输入设备可以包括键盘、定位设备、触摸屏、姿势识别设备(例如,对于空中手势)、头部和眼部跟踪设备、用于语音识别的麦克风等。计算设备可以包括桌面计算机、膝上型计算机、平板计算机、电子阅读器、个人数字助理、智能电话、游戏设备、服务器、以及计算机***,例如,大规模并行***。计算***可以访问包括计算机可读存储介质和数据传送介质的计算机可读介质。计算机可读存储介质是不包括暂时性、传播信号的有形存储单元。计算机可读存储介质的示例包括存储器,例如,主存储器、高速缓存存储器、以及辅助存储器(例如,DVD),并且包括其他存储单元。计算机可读存储介质可以记录在实现用户模式崩溃报告***的计算机可执行指令或逻辑上或者可以利用实现用户模式崩溃报告***的计算机可执行指令或逻辑进行编码。数据传送介质用于经由暂时性、传播信号或载波(例如,电磁)经由有线或无线连接来传送数据。
用户模式崩溃报告***可以在由一个或多个计算机、处理器或其它设备执行的计算机可执行指令(例如,程序模块和部件)的通用上下文中描述。通常,程序模块或组件包括执行特定任务或实现特定数据类型的例程、程序、对象、数据结构等。典型地,程序模块的功能如在各种实施例中所需要的可以进行合并或者分布。用户模式崩溃报告***的方面可以使用例如专用集成电路(“ASIC”)在硬件中实现。
图6是示出了在一些实施例中的崩溃处理程序的处理的流程图。向崩溃处理程序600被传递有受害线程的指示、生成调用链、查找负责的函数、以及发送崩溃报告。在框601中,组件取回线程控制块或与受害线程相关的其他信息。在框602,组件确定在崩溃时刻的指令指针。在框603,组件调用调用链组件的添加函数来将与指令指针相关联的函数添加到调用链。在框604,组件取回在崩溃时刻的栈指针。在框605,组件安装调用栈坏地址处理程序以用于检测当遍历调用栈时何时遇到坏地址。在框606-609,组件循环,遍历调用栈。在框606,组件取回由当前的栈指针引用的返回地址。如果栈指针SP指向坏存储地址,则使用栈指针来访问返回地址将导致坏地址异常。在判定框607,如果遇到栈帧的底部(例如,由指示坏地址异常的全局标志所指示的),则组件在610继续,否则组件在框608继续。在框608,组件调用调用链组件的添加函数、传递返回地址。在框609,组件取回对下一栈帧的引用,并且循环到框606来处理下一栈帧。在框610,组件调用查找负责的函数组件来识别对崩溃负责的函数。在框611,部件调用存储崩溃报告组件,并且然后结束。
图7是示出了在一些实施例中的崩溃报告***的调用链组件的添加函数的处理的流程图。向调用链组件的添加函数700传递地址,识别与该地址相对应的模块内的函数,并且将该函数添加到调用链。函数最初可以使用模块表来识别模块。在框701,组件选择模块函数映射中的下一条目。在判定框702,如果所有条目都已经被选择,则与传递的地址相对应的函数没有被找到,并且组件报告错误,否则组件在框703继续。在判定框703,如果地址在所选择的条目的范围内,则组件在框704继续,否则组件循环到框701,来选择下一条目。在框704,组件将与识别出的函数相对应的条目添加到调用链,并且然后返回。
图8是示出了在一些实施例中的崩溃报告***的查找负责的函数组件的处理的流程图。查找负责的函数组件800处理调用链来识别对于崩溃负责的不免于负责的函数。在框801,组件选择调用链中的下一函数。在判定框802,如果已经到达调用链的结尾,则组件返回没有识别到负责的函数的指示,否则组件在框803继续。在判定框803,如果所选择的函数是免于负责的,正如免于负责的函数表所指示的,则组件循环到框801来选择下一函数,否则组件返回所选择的函数负责的指示。
图9是示出了在一些实施例中的用户模式崩溃报告***的发送崩溃报告组件的处理的流程图。存储崩溃报告组件900被调用来发送崩溃报告。组件可以生成崩溃标识符,并且存储崩溃报告以用于当应用下一次启动时,发送到崩溃报告服务器。组件可以使用崩溃标识符来识别类似的崩溃是否已经报告过。在框901,组件生成崩溃标识符,例如,应用名称和其版本、负责的模块名称(即,包含负责的函数的模块)和其版本、以及负责的模块内的崩溃偏移的组合。在框902,组件收集各种崩溃报告信息,其可以包括每一个线程的调用链、负责的函数、变量的符号和函数(例如,负责的函数)名称、应用的地址空间的各个部分的转储等。在框903,组件将会话标识符添加到崩溃报告。会话标识符唯一地识别从开始到结束(例如,崩溃或正常结束)的应用的异常。在某环境中,应用(或应用监视器)可以向服务器(例如,客户体验服务器)报告应用的活动或其它信息,并且由会话标识符识别该活动。崩溃报告中的会话标识符的使用允许活动信息与崩溃报告相关。以这种方式,当分析崩溃的原因时,开发者能够利用具有崩溃报告和活动信息二者。在框904,组件将崩溃报告添加到崩溃报告存储库,并且然后返回。当应用下一次执行时,如果上传标准满足,则应用将崩溃报告上传到崩溃报告服务器。应用可以使用各种上传标准来确定崩溃报告是否应该被上传。例如,上传标准可以基于当前的通信带宽(例如,蜂窝与WiFi),一些数量的相同类型的崩溃报告是否已经被上传等等。
图10是示出了在一些实施例中的用户模式崩溃报告***的添加模块回调组件的处理的流程图。添加模块回调组件1000在用户模式崩溃报告***初始化时被安装,并且记录其图像已经被加载到应用的地址空间的这些模块。应用环境可以调用传递模块标识符的指示的添加模块回调,以通知应用模块已经被加载。在框1001-1003,组件可以取回关于已经加载的模块的各种信息,例如,其存储器中的地址、其名称、其构建标识符等。在框1004,组件将条目添加到模块表,并且然后完成。
虽然以具体到结构特征和/或动作的语言描述了本主题,但是应当理解的是,在随附的权利要求中限定的主题不一定被限制为上述的具体特征或动作。而是,上述的具体的特征和动作被公开作为实现权利要求的示例形式。相应地,本发明只由随附的权利要求来进行限定。

Claims (15)

1.一种存储计算机可执行指令的计算机可读存储介质,所述计算机可执行指令用于控制计算设备当应用崩溃时生成崩溃报告,所述应用被组织为具有函数的模块,所述计算机可执行指令包括以下的指令:
安装崩溃处理程序,以用于当所述应用崩溃时在与所述应用相同的进程中执行;并且
在所述应用崩溃之后,受在所述应用的所述进程中执行的所述崩溃处理程序的控制,
识别在崩溃的时刻正在执行的所述进程的受害线程;
遍历所述受害线程的调用栈来识别出用于从所述应用的调用的函数返回的返回地址;
识别与所述返回地址相对应的所述模块内的偏移;
使用识别的偏移来识别函数的调用链;以及
基于识别的调用链来创建崩溃报告。
2.如权利要求1所述的计算机可读存储介质,其中,所述计算设备在基于iOS的操作***的控制下执行。
3.如权利要求1所述的计算机可读存储介质,其中,所述应用和所述崩溃处理程序在所述进程内以用户权限模式执行。
4.如权利要求1所述的计算机可读存储介质,其中,所述计算设备在具有基于Mach的内核和基于BSD的内核的操作***的控制下执行,并且多个崩溃处理程序被安装来处理当所述应用崩溃时生成的Mach异常和BSD信号。
5.如权利要求1所述的计算机可读存储介质,其中,所述计算机可执行指令还包括如下指令:基于对所述调用链的分析来识别对于所述崩溃负责的函数。
6.如权利要求5所述的计算机可读存储介质,其中,被指定为免于负责的函数被排除于对崩溃负责。
7.一种用于当在沙盒环境中执行的应用崩溃时,生成崩溃报告的计算***,所述应用被组织为具有函数的模块,所述计算***包括:
存储以下的计算机可执行指令的计算机可读存储介质:
所述模块;以及
崩溃处理程序,所述崩溃处理程序用于当应用崩溃时,在与所述应用相同的进程中执行,所述崩溃处理程序包括:
识别所述进程的受害线程的组件,所述受害线程是在崩溃的时刻正在执行的所述进程的线程;
取回指向所述受害线程的调用栈的栈指针并且取回指向所述崩溃的时刻执行的指令的指令指针的组件;
遍历所述受害线程的调用栈来识别调用的函数的返回地址的组件,所述返回地址指示调用函数内的返回位置;
识别所述模块内的与所述返回地址和所述指令指针相对应的偏移的组件;
使用识别出的偏移来识别函数的调用链的组件;
识别对所述崩溃负责的函数的组件,所述对所述崩溃负责的函数是在所述崩溃之前调用的不是由免于负责的函数表所指示的免于对崩溃负责的函数的最后的函数;
创建崩溃报告的组件,所述崩溃报告识别所述对所述崩溃负责的函数以及用于所述应用的执行的应用活动日志的会话标识;以及
当上传标准满足时将所述崩溃报告上传到崩溃报告服务器的组件;以及
执行存储在所述计算机可读存储介质中的所述计算机可执行指令的处理器。
8.如权利要求7所述的计算***,其中,所述崩溃处理程序还包括使用与所述应用相关联的符号表信息来识别负责的所述函数的名称的组件。
9.如权利要求7所述的计算***,其中,所述计算***在具有基于Mach的内核和基于BSD的内核的操作***的控制下执行,并且多个崩溃处理程序被安装来处理当所述应用崩溃时生成的一个或多个Mach异常和BSD信号。
10.一种存储计算机可执行指令的计算机可读存储介质,所述计算机可执行指令用于控制计算设备来识别对应用的崩溃负责的所述应用的函数,所述计算机可执行指令包括以下指令,当所述应用崩溃时:
识别在所述崩溃的时刻调用的函数的调用链;
访问识别出免于对所述崩溃负责的一个或多个函数的信息;
处理所述函数的调用链来识别不免于对所述崩溃负责的被调用的最后的函数;以及
将所述最后的函数指定为对所述崩溃负责。
11.如权利要求10所述的计算机可读存储介质,其中,所述应用的所述函数被存储在模块中,并且免于负责的函数由所述模块内的所述函数的偏移指定。
12.如权利要求11所述的计算机可读存储介质,其中,识别函数的调用链的所述指令遍历所述应用的调用栈,并且将调用的函数的返回地址映射为所述模块内的偏移。
13.如权利要求10所述的计算机可读存储介质,其中,对负责的函数的识别是由在与所述应用相同的进程中执行的崩溃处理程序实施的。
14.如权利要求10所述的计算机可读存储介质,其中,所述计算机可执行指令还包括如下指令:使用与所述应用相关联的符号表信息来识别被指定的负责的函数的名称。
15.如权利要求10所述的计算机可读存储介质,其中,所述计算机可执行指令还包括将崩溃报告上传到崩溃报告服务器的指令,所述崩溃报告识别对所述崩溃负责的函数。
CN201580014305.0A 2014-03-17 2015-03-12 用于用户模式崩溃报告的框架 Active CN106133698B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/217,030 US9836343B2 (en) 2014-03-17 2014-03-17 Framework for user-mode crash reporting
US14/217,030 2014-03-17
PCT/US2015/020053 WO2015142598A1 (en) 2014-03-17 2015-03-12 Framework for user-mode crash reporting

Publications (2)

Publication Number Publication Date
CN106133698A true CN106133698A (zh) 2016-11-16
CN106133698B CN106133698B (zh) 2020-02-07

Family

ID=52774575

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580014305.0A Active CN106133698B (zh) 2014-03-17 2015-03-12 用于用户模式崩溃报告的框架

Country Status (6)

Country Link
US (1) US9836343B2 (zh)
EP (1) EP3120247B1 (zh)
KR (1) KR102219546B1 (zh)
CN (1) CN106133698B (zh)
TW (1) TW201537461A (zh)
WO (1) WO2015142598A1 (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108334515A (zh) * 2017-01-20 2018-07-27 阿里巴巴集团控股有限公司 一种处理崩溃文件中堆栈地址的方法、装置及***
CN109408265A (zh) * 2018-09-28 2019-03-01 广州虎牙信息科技有限公司 一种ios运行异常的保护方法、装置、终端设备及存储介质
CN110109819A (zh) * 2019-03-16 2019-08-09 平安城市建设科技(深圳)有限公司 应用异常调试的处理方法、装置、设备及可读存储介质
CN110489165A (zh) * 2019-08-02 2019-11-22 北京字节跳动网络技术有限公司 获取调用栈栈帧指令偏移的方法、装置、介质和设备
CN110502440A (zh) * 2019-08-09 2019-11-26 北京达佳互联信息技术有限公司 调试定位信息的获取方法、装置、电子设备及存储介质
CN110865898A (zh) * 2019-10-12 2020-03-06 北京字节跳动网络技术有限公司 崩溃调用栈聚合的方法、装置、介质和设备
CN111198812A (zh) * 2018-11-20 2020-05-26 深圳市优必选科技有限公司 一种应用故障检测方法、应用故障检测装置及终端设备

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11294802B2 (en) 2016-11-08 2022-04-05 International Business Machines Corporation Identifying incorrect variable values in software testing and development environments
KR101860674B1 (ko) * 2017-06-20 2018-05-23 넷마블 주식회사 크래시 리포트 그룹핑 방법, 서버 및 컴퓨터 프로그램
WO2019049478A1 (ja) * 2017-09-06 2019-03-14 日本電信電話株式会社 コールスタック取得装置、コールスタック取得方法およびコールスタック取得プログラム
CN107967192B (zh) * 2017-12-20 2022-03-11 北京奇虎科技有限公司 一种智能终端的***崩溃处理方法和装置
US10684035B2 (en) 2018-01-08 2020-06-16 Trane International Inc. HVAC system that collects customer feedback in connection with failure triage
KR102545765B1 (ko) * 2018-05-28 2023-06-21 삼성전자주식회사 메모리 오류를 검출하는 방법 및 시스템
CN109344035A (zh) * 2018-09-30 2019-02-15 北京奇虎科技有限公司 一种应用程序的运行控制方法、装置、设备及存储介质
US11086758B1 (en) * 2019-04-19 2021-08-10 American Megatrends International, Llc Identifying firmware functions executed in a call chain prior to the occurrence of an error condition
CN110413432B (zh) * 2019-07-02 2023-09-01 Oppo广东移动通信有限公司 一种信息处理方法、电子设备及存储介质
CN111782504B (zh) * 2020-05-20 2023-12-01 车智互联(北京)科技有限公司 一种应用程序异常的诊断方法、移动终端及可读存储介质
CN112925667B (zh) * 2021-03-29 2024-03-08 北京奇艺世纪科技有限公司 预防sdk崩溃的方法、装置、设备及可读存储介质
US11586528B2 (en) * 2021-06-18 2023-02-21 Agora Lab, Inc. Software development kit with independent automatic crash detection
US11734156B2 (en) * 2021-09-23 2023-08-22 Microsoft Technology Licensing, Llc Crash localization using crash frame sequence labelling
US12013774B2 (en) * 2022-07-29 2024-06-18 Red Hat, Inc. Verification of core file debugging resources

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060253837A1 (en) * 2005-04-15 2006-11-09 Microsoft Corporation Using a call stack hash to record the state of a process
US20070150871A1 (en) * 2005-12-22 2007-06-28 International Business Machines Corporation Autonomically adjusting the collection of performance data from a call stack
CN101719090A (zh) * 2009-12-25 2010-06-02 珠海市君天电子科技有限公司 对计算机软件***崩溃原因进行自动分析的方法
US20120137182A1 (en) * 2010-11-30 2012-05-31 Microsoft Corporation Error Report Processing
US20140068326A1 (en) * 2012-09-06 2014-03-06 Triumfant, Inc. Systems and Methods for Automated Memory and Thread Execution Anomaly Detection in a Computer Network

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7320125B2 (en) * 2001-05-24 2008-01-15 Techtracker, Inc. Program execution stack signatures
WO2005043360A1 (en) 2003-10-21 2005-05-12 Green Border Technologies Systems and methods for secure client applications
WO2005089400A2 (en) 2004-03-17 2005-09-29 Riverstone Networks, Inc. Managing process state information in an operating system environment
US7321988B2 (en) 2004-06-30 2008-01-22 Microsoft Corporation Identifying a code library from the subset of base pointers that caused a failure generating instruction to be executed
US7373554B2 (en) 2004-09-24 2008-05-13 Oracle International Corporation Techniques for automatic software error diagnostics and correction
US8020149B2 (en) 2006-08-04 2011-09-13 Apple Inc. System and method for mitigating repeated crashes of an application resulting from supplemental code
US7823006B2 (en) * 2007-05-29 2010-10-26 Microsoft Corporation Analyzing problem signatures
US8479051B2 (en) 2009-01-23 2013-07-02 Microsoft Corporation System and method for customized error reporting
US9430353B2 (en) * 2009-10-26 2016-08-30 Microsoft Technology Licensing, Llc Analysis and visualization of concurrent thread execution on processor cores
JP5937577B2 (ja) 2010-05-19 2016-06-22 グーグル インコーポレイテッド バグクリアリングハウス
US8516308B1 (en) 2011-03-09 2013-08-20 Amazon Technologies, Inc. Crash based incompatibility prediction for classes of mobile devices crash data
US8621282B1 (en) 2011-05-19 2013-12-31 Google Inc. Crash data handling
US20130067232A1 (en) * 2011-09-09 2013-03-14 Kai Chung CHEUNG METHOD AND SYSTEM FOR CREDENTIAL MANAGEMENT AND DATA ENCRYPTION FOR iOS BASED DEVICES
US9389936B2 (en) 2011-09-23 2016-07-12 Microsoft Technology Licensing, Llc. Monitoring the responsiveness of a user interface
US9262250B2 (en) 2011-12-12 2016-02-16 Crashlytics, Inc. System and method for data collection and analysis of information relating to mobile applications

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060253837A1 (en) * 2005-04-15 2006-11-09 Microsoft Corporation Using a call stack hash to record the state of a process
US20070150871A1 (en) * 2005-12-22 2007-06-28 International Business Machines Corporation Autonomically adjusting the collection of performance data from a call stack
CN101719090A (zh) * 2009-12-25 2010-06-02 珠海市君天电子科技有限公司 对计算机软件***崩溃原因进行自动分析的方法
US20120137182A1 (en) * 2010-11-30 2012-05-31 Microsoft Corporation Error Report Processing
US20140068326A1 (en) * 2012-09-06 2014-03-06 Triumfant, Inc. Systems and Methods for Automated Memory and Thread Execution Anomaly Detection in a Computer Network

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108334515A (zh) * 2017-01-20 2018-07-27 阿里巴巴集团控股有限公司 一种处理崩溃文件中堆栈地址的方法、装置及***
CN108334515B (zh) * 2017-01-20 2022-07-15 阿里巴巴集团控股有限公司 一种处理崩溃文件中堆栈地址的方法、装置及***
CN109408265A (zh) * 2018-09-28 2019-03-01 广州虎牙信息科技有限公司 一种ios运行异常的保护方法、装置、终端设备及存储介质
CN109408265B (zh) * 2018-09-28 2022-05-10 广州虎牙信息科技有限公司 一种ios运行异常的保护方法、装置、终端设备及存储介质
CN111198812A (zh) * 2018-11-20 2020-05-26 深圳市优必选科技有限公司 一种应用故障检测方法、应用故障检测装置及终端设备
CN111198812B (zh) * 2018-11-20 2024-02-09 深圳市优必选科技有限公司 一种应用故障检测方法、应用故障检测装置及终端设备
CN110109819A (zh) * 2019-03-16 2019-08-09 平安城市建设科技(深圳)有限公司 应用异常调试的处理方法、装置、设备及可读存储介质
CN110489165A (zh) * 2019-08-02 2019-11-22 北京字节跳动网络技术有限公司 获取调用栈栈帧指令偏移的方法、装置、介质和设备
CN110502440A (zh) * 2019-08-09 2019-11-26 北京达佳互联信息技术有限公司 调试定位信息的获取方法、装置、电子设备及存储介质
CN110865898A (zh) * 2019-10-12 2020-03-06 北京字节跳动网络技术有限公司 崩溃调用栈聚合的方法、装置、介质和设备
CN110865898B (zh) * 2019-10-12 2023-09-05 北京字节跳动网络技术有限公司 崩溃调用栈聚合的方法、装置、介质和设备

Also Published As

Publication number Publication date
KR102219546B1 (ko) 2021-02-23
CN106133698B (zh) 2020-02-07
WO2015142598A1 (en) 2015-09-24
US9836343B2 (en) 2017-12-05
EP3120247B1 (en) 2019-12-04
TW201537461A (zh) 2015-10-01
KR20160132856A (ko) 2016-11-21
EP3120247A1 (en) 2017-01-25
US20150261596A1 (en) 2015-09-17

Similar Documents

Publication Publication Date Title
CN106133698A (zh) 用于用户模式崩溃报告的框架
US9483307B2 (en) Asynchronous, interactive task workflows
US9589136B2 (en) Method and device for extracting message format
CN114830156A (zh) 用于分析机器人流程自动化(rpa)的测试自动化工作流程的***和计算机实现的方法
US20150089415A1 (en) Method of processing big data, apparatus performing the same and storage media storing the same
CN111566615B (zh) 使用shell应用特征遥测的特征使用预测
CN114556391A (zh) 用于机器人流程自动化的基于人工智能层的过程提取
US20190087160A1 (en) System and method for creating domain specific language
CN114868109B (zh) 用户界面自动化中的自动锚点确定和目标图形元素标识
US20180275980A1 (en) Optimizing feature deployment based on usage pattern
CN104461741B (zh) 基于图形设备接口的计算设备优化方法及装置
CN116508007A (zh) 用于被测应用的测试自动化的计算机实现的方法和***
US20220019498A1 (en) Dynamically creating a contact address to customer support based on information associated with a computing device
WO2017076244A1 (zh) 一种动态修复应用程序的方法、装置及相关***
US9524204B2 (en) Methods and apparatus for customizing and using a reusable database framework for fault processing applications
CN114564241B (zh) 硬件设备的访问方法、装置、计算机设备和存储介质
CN110908573B (zh) 算法模型训练方法、装置、设备及存储介质
US20110251867A1 (en) Method and system for integrated operations and service support
US11704014B1 (en) Supporting micro swipes for generating custom user interface responses
CN111325278B (zh) 一种图像处理方法、装置及存储介质
US20230086877A1 (en) Method and apparatus for isolated execution of computer code with a native code portion
US20190057017A1 (en) Correlation Of Function Calls To Functions In Asynchronously Executed Threads
JP2016173746A (ja) 情報処理装置及びその制御方法、プログラム
CN116306973A (zh) 数据处理方法、***、设备和存储介质
CN105378675A (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