CN102422261B - 对所引起的异常的通知 - Google Patents

对所引起的异常的通知 Download PDF

Info

Publication number
CN102422261B
CN102422261B CN201080020348.7A CN201080020348A CN102422261B CN 102422261 B CN102422261 B CN 102422261B CN 201080020348 A CN201080020348 A CN 201080020348A CN 102422261 B CN102422261 B CN 102422261B
Authority
CN
China
Prior art keywords
unusual
unusually
exception
handling procedure
notice
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
Application number
CN201080020348.7A
Other languages
English (en)
Other versions
CN102422261A (zh
Inventor
A·J·帕多
G·康纳
M·M·马格鲁德
Y·林
J·C·施瓦茨
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 Corp
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 Corp filed Critical Microsoft Corp
Publication of CN102422261A publication Critical patent/CN102422261A/zh
Application granted granted Critical
Publication of CN102422261B publication Critical patent/CN102422261B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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)
  • Debugging And Monitoring (AREA)

Abstract

在此描述提供在异常处理代码已经运行之前软件异常已经发生的提前通知的异常通知系统。异常通知系统从程序代码接收注册处理程序以便在异常发生时接收提前通知的注册请求。在异常发生时,该系统引起调用每一已注册的处理程序的事件。在处理程序返回之后,该系统执行正常的异常处理,以使得提前通知不改变现有的异常处理行为。异常通知系统允许程序在程序状态已经由异常处理修改之前检查和记录异常。程序代码可以捕捉关于异常的原因的详尽信息以便允许进一步的离线分析。因而,异常通知系统允许开发者通过接收关于程序代码中的不期望条件的更多信息来改善他们的程序。

Description

对所引起的异常的通知
背景
计算机程序通常包含两种类型的代码:实现程序的目标的指令,和包含用于从发生的不期望的条件或不寻常的条件恢复或响应于发生的不期望的条件或不寻常的条件的指令的出错处理代码。出错处理可以包括解决从因为文件不在所请求的位置而引起的文件打开失败到访问不属于该程序的存储器(例如,程序未分配的存储器或已经释放的存储器)的任何问题。软件异常是一种类型的出错通知范例。异常是在检测到在程序线程的正常执行中不期望的条件时引起的信号。许多代理可以检测不正确的条件并引起异常。对于在托管环境中运行的应用,可以由程序代码(或程序使用的库代码)、运行时引擎和应用调用的非托管代码引起异常。异常允许开发者快速且直接地写出用于正常情况的软件代码,且在预定义的区域中包含用于处理出错(例如,异常)的代码。使用异常,程序通常用“try”块包围一个指令块,且在异常条件发生时,程序离开try块并执行一个或多个有条件地执行的块。
在执行的线程上引起的异常跟随该线程通过本机代码和托管代码且跨越各应用域(例如,微软.NET AppDomain)。如果程序不处理异常,则异常通常被呈现给操作系统并被看作是未经处理的异常。如果程序理解导致异常发生的条件,则程序可以处理异常。异常表示在程序的执行期间广泛的不期望的条件。在程序被看作是逻辑堆栈层时,异常可以在各种级别发生。例如,操作系统可以提供异常(例如,结构化异常处理(SEH)),底层运行时可以提供异常(例如,C语言运行时或微软.NET公共语言运行时(CLR)),且程序本身可以提供由用来创建该程序的语言定义的异常(例如,C语言异常、微软.NET异常等等)。对于高级语言,环境可以将这些异常中的每一种包装成程序的语言所识别的一种或多种类型。例如,微软.NET将任何本机异常表示为从微软.NET异常类继承的特定托管异常。
软件已经变得如此复杂,以至于组件重用是常见的,且许多软件程序调用外部组件或在内部包括不是由程序作者写成或验证的组件(例如,通过静态链接)。例如,数据挖掘应用可以调用数据库用于建立到数据库的连接并响应于查询接收来自该数据库的数据。另外,程序可以包括与程序的主范例不同的全平台范例。例如,本机C++应用程序可以调用托管微软.NET软件类以执行某些动作。这样的复杂系统的任何部分可以包括系统的其他部分不预期或不处理的出错和异常。例如,如果本机应用调用托管代码,且托管代码碰到异常或其他故障,则可能损坏本机应用状态,或者本机应用可以终止,这是因为本机应用程序不知道或不被设计为处理该故障。相反,托管应用可以调用损坏该应用状态或经历某种其他故障的本机代码。
用于离线分析的关于异常的最相关的信息往往知道发生过异常。不幸的是,对于应用尤其是包括一个或多个第三方组件或插件的应用,难以检测每一异常并将关于异常的信息记入日志。例如,软件代码可以捕捉异常并(正确地或错误地)处理该异常,使得其他应用代码不可能检测到发生过异常。如果应用是在调试器中运行,则调试器通常在程序被允许处理异常之前给开发者提供所引起的异常的通知。然而,在正规消费者场景中,在调试器中运行应用是不实用的。
现今存在用于在正常的应用流之外处理异常的各种机制。作为一个示例,应用可以提供未经处理的异常过滤器,该未经处理的异常过滤器接收不另外被应用捕捉的任何异常。作为另一示例,微软Windows提供被称为VectoredException Handling(矢量化异常处理)的机制,在引起本机异常时,该机制允许程序员将过滤器添加到由OS执行的一系列过滤器。从托管代码勾取过滤器可以允许相似的功能。然而,这并不被推荐,且应用异常处理可以导致程序状态中的改变,这使得未经处理的异常过滤器难以记录关于异常的原因的足够的相关细节。将异常传递给程序的异常处理区域(通常是catch(捕捉)块或filter(过滤器)块)涉及执行大量工作的异常系统。程序代码不能在不接受异常供处理的情况下就检查该异常,这是在处理程序接收异常之前可以修改异常状态和程序状态的动作。
概述
在此描述在应用异常处理代码已经运行之前提供软件异常已经发生的提前通知的异常通知系统。该系统允许开发者有机会在运行时的异常系统开始对处理程序的搜索之前检查导致异常的程序状态。异常通知系统从程序代码接收到注册处理程序以便在异常发生时接收提前通知的注册请求。在异常发生时,系统引起调用每一已注册的处理程序的事件。在处理程序返回之后,系统执行正常的异常处理,以使得提前通知不改变现有的异常处理行为。异常通知系统允许程序检查和记录异常,如同在程序正在调试器下运行时发生异常的情况下开发者可以进行的那样。通过允许开发者以编程方式检查异常和程序状态,程序代码可以捕捉关于异常的原因的详尽信息以便允许进一步的离线分析。另外,可以接收用于与程序相关联的所有线程的通知,以使得程序可以检测和存储与在开发者自己的代码之外引起的异常有关的信息。因而,异常通知系统允许开发者通过接收关于程序代码中的不期望的条件的更多信息来改善他们的程序。
提供本概述以便以简化形式介绍下面在详细描述中进一步描述的概念的选集。本概述不旨在标识所要求保护的本主题的关键特征或必要特征,也不预期被用来限制所要求保护的本主题的范围。
附图简述
图1是示出在一种实施方式中异常通知系统的各组件的框图。
图2是示出在一种实施方式中系统接收向其提供异常的提前通知的处理程序的处理的流程图。
图3是示出在一种实施方式中在异常被引起时系统的处理的流程图。
详细描述
在此描述在异常处理代码已经运行之前提供异常已经发生的提前通知的异常通知系统。该系统允许开发者有机会在运行时的异常系统开始对处理程序的搜索之前检查导致异常的程序状态。异常通知系统从程序代码接收注册处理程序以便在异常发生时接收提前通知的注册请求。例如,程序代码可以提供在不影响正常的异常处理代码的情况下记录状态以供离线诊断的处理程序。在程序终止时,程序正常地执行定制记录。然而,异常通知系统允许在程序处于引起异常的状态的同时程序执行记录。在异常发生时,系统引起调用每一已注册的处理程序的事件。在处理程序返回之后,系统执行正常的异常处理,以使得提前通知不改变现有的异常处理行为。先前,开发者需要使用影响程序异常处理语义的catch块或filter块。
异常通知系统允许程序检查和记录异常,如同在程序正在调试器下运行时发生异常的情况下开发者可以进行的那样。然而,系统不使用调试器,也不招致与在调试器中运行进程相关联的开销。通过使得开发者能够以编程方式检查异常和程序状态,程序代码可以捕捉与异常的原因有关的详尽信息以便允许进一步的离线分析。另外,可以接收用于与应用(例如,在微软.NET AppDomain内的应用)相关联的所有线程的通知,以使得应用可以检测和存储与在开发者自己的代码之外引起的异常有关的信息(例如,对于OS、运行时或第三方库代码中的异常)。因而,异常通知系统允许开发者通过接收关于程序代码中的不期望的条件的更多信息来改善他们的程序。
图1是示出在一种实施方式中异常通知系统的各组件的框图。系统100包括处理程序注册组件110、异常检测组件120、对象发现组件130、异常通知组件140和异常处理组件150。在此进一步详细描述这些组件中的每一个。
处理程序注册组件110从应用接收对处理程序进行注册以便得到在异常发生时由系统100所提供的提前通知的请求。组件110可以允许应用对在异常发生时系统100将调用的多个处理程序进行注册。处理程序通常满足由处理程序注册组件110提供的规范,包括接受某些参数并且作为特定的类的一部分。例如,使用微软.NET,组件110可以期望已注册的处理程序是在接受类型异常的参数AppDomain类中定义的类型的委托。另外,处理程序注册组件110可以确定请求者的安全级别。例如,组件110可以不接受来自不被标记为SecurityCritical(安全关键)(或等效等级)的请求者的注册。在一些实施方式中,系统100可以对处理程序本身施加类似的限制,或者可以允许处理程序处于较低的安全级别(例如,Transparent(透明)或等效等级)。以下是用于在此描述的处理程序的事件处理程序的示例定义。
Figure BPA00001462430500041
在程序正在执行的同时,异常检测组件120检测到异常发生过。软件代码可以在帧中引起异常或者可以在帧中接收异常。帧是指执行的上下文。当在线程上执行的软件代码引起异常时,异常处理逻辑在帧中引起异常。在某些其他情况中,诸如在阻塞的操作系统调用失败时或者在线程跨越组件对象模型(COM)互操作(Interop)边界调用软件代码时,异常处理逻辑在帧中接收异常,即使可能最初已经在其他地方引起该异常。异常可以以对操作系统异常引起函数(例如,对于微软Windows是RaiseException)的调用来开始。操作系统走查线程堆栈以便为异常标识各处理程序并调用适当的处理程序。异常通知系统100具有在操作系统调用的堆栈上的处理程序,这允许异常检测组件120检测异常。
对象发现组件130响应于所检测的异常来查找异常状态,并标识与当前线程相关联的应用对象。例如,如果应用是微软.NET应用,那么,CLR检测异常并标识托管对象以及与异常状态相关联的AppDomain。运行时也在异常类的分层结构中确定异常的类型。例如,运行时可以将操作系统结构化异常表示为应用可以检测和处理的托管异常类(例如,System.AccessViolationException类)。
异常通知组件140调用已注册的应用处理程序以便向处理程序通知所检测的异常。例如,组件140可以循环经过每一处理程序并串行地调用每一个。异常通知组件140可以将异常对象或其他参数提供给已注册的处理程序,处理程序可以通过异常对象或其他参数来检索关于异常的原因的附加信息。例如,在系统100和微软.NET一起使用时,CLR将托管异常对象作为异常类的正常实例提供给处理程序,且在应用在catch块中接收异常时通常可用的所有可用方法和性质。如先前所描述,异常处理可以标识与异常状态相关联的AppDomain对象并将通知提供该AppDomain的委托。
在已注册的应用处理程序已经被通知之后,异常处理组件150执行传统的异常处理。本领域中的普通技术人员将认识到组件150可以执行的各种传统异常处理。例如,组件150可以执行标准的两遍异常进程。在第一遍期间,组件150走查堆栈(例如,使用在即时(JIT)编译期间存储的信息)以便在堆栈上靠近异常发生的地方的应用程序代码中寻找将接受所引起的类型的异常的异常处理块。在第二遍期间,组件150调用处理程序以便清除自堆栈的底部(异常在那里发生)到接受处理程序的帧的应用状态。这可以例如导致为越界的对象、最终块、故障块等等调用C++析构函数。第二遍以组件150调用在第一遍期间所标识的接受处理程序以便允许处理程序处理异常而结束。然而,在异常通知之后,系统100不限于任何特定形式的异常处理。例如,系统可以执行单遍或其他模型而不是上面作为示例描述的两遍模型。
可以在其上实现该系统的计算设备可以包括中央处理单元、存储器、输入设备(例如,键盘和定点设备)、输出设备(例如,显示设备)和存储设备(例如,盘驱动器或其他非易失性存储介质)。存储器和存储设备是可以用实现或启用该系统的计算机可执行指令(例如,软件)编码的计算机可读存储介质。另外,可以存储或经由诸如通信链路上的信号等的数据传送介质传送数据结构和消息结构。可以使用诸如因特网、局域网、广域网、点对点拨号连接、蜂窝式电话网络等等的各种通信链路。
可以在各种操作环境中实现系统的各实施方式,这些操作环境包括个人计算机、服务器计算机、手持式设备或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费电子设备、数码相机、网络PC、小型计算机、大型计算机、包括以上系统或设备中的任一个在内的分布式计算环境等等。计算机系统可以是蜂窝电话、个人数字助理、智能电话、个人计算机、可编程消费电子设备、数码相机等等。
可以在由一个或多个计算机或其他设备执行的诸如程序模块等的计算机执行指令的一般上下文中描述该系统。一般地,程序模块包括执行特定的任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,在各种实施方式中,程序模块的功能可以按需组合或分布。
图2是示出在一种实施方式中异常通知系统接收向其提供提前异常通知的通知处理程序的处理的流程图。在框210开始,系统接收通知处理程序对象。应用模块可以提供一类,该类的通知处理程序是特定类中的类型的委托。例如,使用微软.NET,通知处理程序可以是与应用相关联的AppDomain类中的类型的委托。在框220继续,系统接收一个或多个通知属性。例如,通知处理程序可以具有该通知处理程序可以处理的一种或多种类型或类别的异常(例如,损坏状态异常)的属性。类型可以是指异常的类分层结构中的类,而类别可以是指系统不考虑类型而区分的异常。例如,不考虑类型,损坏状态异常可以是异常的一个类别。
在框230继续,系统调用处理程序注册函数,处理程序注册函数将所接收的处理程序对象添加到已注册的处理程序的列表以便响应于异常发生而调用。在一些实施方式中,系统可以借助处理程序在特定类型的类上的存在而自动地注册处理程序(例如,通过在系统提供默认的空方法且如果存在则调用应用的覆盖那里的继承)。在这些步骤之后,设置处理程序对象以便在异常发生时调用。下列步骤示出附加处理,应用可以执行这些附加处理以便避免例如在应用启动期间接收到异常通知,在应用启动期间接收异常通知可以产生许多不感兴趣的异常。
在判定框240中继续,如果系统检测到包含处理程序对象的应用的启动完成,那么,系统在框250继续,否则系统循环到框240以便等待启动完成。系统可以通过由操作系统或运行时提供的另一通知来检测到启动完成。在框250中继续,系统激活已注册的处理程序对象的调用。系统可以提供一个方法,在应用的执行期间,应用可以调用该方法来将提前异常通知切换为开或关。例如,在执行某些类型的操作之前,或者(正如在这里所示出的)在应用启动完成之后,应用可以开启提前异常通知。在框250之后,这些步骤结束。
图3是示出在一种实施方式中在异常被引起时异常通知系统的处理的流程图。在框310开始,异常通知系统接收异常已经被引起的通知。例如,在应用或运行时已经接收异常以供处理之前,在操作系统内可发生对所引起的异常的通知。例如,软件代码可以调用诸如由微软Windows提供的RaiseException等的操作系统函数。在判定框320中继续,如果系统检测到存在调试器,那么,系统在框330继续,否则系统跳到框340。这一步骤可以是操作系统对异常的初始处理的一部分,在此期间,如果存在附加调试器则操作系统将第一机会通知提供给附加调试器。在框330中继续,系统通知附加调试器给予调试器处理异常的第一选项。调试器可以允许用户继续执行过去的异常或将执行重定向到应用程序代码中的另一位置。可以存在其中系统通知调试器的多种情况。第一,操作系统可以给予要向调试器通知发生的异常的机会。第二,在调用运行时的异常处理程序之后,在此处描述的第一机会通知回调之前,系统给予附加调试器机会。
在判定框340中继续,如果异常通知系统检测到与异常在其中发生的帧相关联的运行时异常处理程序,那么,异常通知系统在框350继续,否则异常通知系统完成并允许以传统的方式处理该异常。可以在诸如微软.NET CLR或SunJava虚拟机(VM)等的运行时内运行在此描述的系统。在使用运行时的场合,运行时通常对在发生异常时操作系统通知的异常处理程序进行注册。在框350中继续,系统检测到一种类型的异常。例如,系统可以将操作系统SEH代码映射到包装较低级操作系统提供的异常的运行时提供的类型。系统也可以检测到可能发生的指示诸如由于空对象引用引起的异常等的特定异常类型的各种运行时条件。
在框360中继续,系统标识与异常相关联的运行时线程对象。运行时可以提供存储与由运行时托管的每一线程有关的数据的对象,且运行时可以从异常在其中发生的线程的堆栈帧中标识适当的线程对象。例如,运行时可以检查线程本地存储(TLS)以便定位运行时对象。在框370中继续,系统标识与所标识线程对象相关联的应用对象。系统可以通过应用对象来提供跨越许多线程的提前异常通知。例如,微软.NET定义表示应用的隔离边界的AppDomain对象。主存插件的应用可以包括多个AppDomain,例如,主机有一个AppDomain,每一插件有一个AppDomain。
在框380中继续,系统调用与所标识的应用对象相关联的异常通知处理程序。例如,AppDomain类可以包括用于接收异常通知的处理程序委托。注意,在任何正常的异常处理发生之前,系统将异常对象提供给异常通知处理程序,以使得处理程序可以在异常时间检查应用状态。在框390中继续,系统执行正常的执行处理以便处理异常。例如,系统可以执行在执行的帧中标识异常处理程序并展开堆栈直到所标识处理程序清除已分配的对象的两遍异常处理。因而,系统提供传统的异常处理之前被插入的通知,该通知允许各应用接收原本难以接收和捕捉可能对稍后分析有用的诊断信息的异常的通知。在框390之后,这些步骤结束。
在一些实施方式中,在程序是在调试器下运行时,异常通知系统如在此所描述地操作。然而,各调试器通常在任何程序代码运行之前将第一机会异常通知提供给调试器。对于异常通知系统来说也是这样。调试器直接地从操作系统接收第一机会异常通知。如果调试器操作员选择继续程序执行,那么,程序代码运行,且在此描述的系统检测到异常、将通知提供给已注册的程序处理程序并执行正常的异常处理。如果调试器操作员选择重定向执行(例如,在一些调试器中是“Set Next Statement(设定下一语句)”)或截取异常,那么,系统可以不接收异常,且提前通知和正常的异常处理都不发生。
在一些实施方式中,异常通知系统检测被应用到已注册的处理程序的属性,该属性影响处理程序接收哪些异常。例如,微软.NET准备属性可以指示处理程序被设计为在存储器不足条件下正确操作以使得运行时将存储器不足异常提供给处理程序。在存储器不足条件期间调用任何程序代码是危险的,且一些程序代码采取特定步骤以便能够正确地运行。.NET框架也提供受限执行区域(CER),受限执行区域发信号通知运行时为代码块预先分配资源并提前执行任何JIT编译以使得即使稍后资源稀缺该代码块也可以安全运行。因为难以处理存储器不足条件,异常通知系统可以不将存储器不足异常提供给不指示(例如,通过设置属性)处理程序被设计为处理这样的条件的该处理程序。系统也可以检测其他属性,诸如指示处理程序对于指示损坏或潜在损坏的程序状态(另一难以处理的异常的类别)的异常作好准备的属性。
在一些实施方式中,异常通知系统避免异常循环。在通知处理程序引起异常时发生异常循环。在本情况中,在已注册的通知函数中引起的任何异常可以导致系统再次调用向其通知第二异常的函数。如果处理程序再次引起异常,那么,这一过程无限重复,直到堆栈溢出或某种其他条件停止执行。系统可以以两种方式中的一种运转。第一,系统可以忽略循环以便鼓励开发者修复他们的代码。开发者将往往快速地发现这样的循环并修复导致循环的问题。第二,系统可以避免循环。例如,系统可以忽略在已注册的处理程序内引起的异常,或者可以终止引起异常的处理程序的执行并继续进行正常的异常处理。
在一些实施方式中,响应于异常,异常通知系统允许已注册的处理程序函数执行除了记录程序状态和将信息记入日志之外的动作。例如,系统可以允许处理程序返回停止执行的值或调用影响随后的执行的函数。例如,处理程序可以卸载在其中发生异常的AppDomain,使得该AppDomai被标记为中止并在异常被处理之后被中止。作为另一示例,调用插件中的第三方代码的主机可以通过重定向异常处理或标记引起异常类型的插件以使得宿主将来不加载这样的插件来防止插件处理应用想要处理的特定类型的异常。
在一些实施方式中,如果异常通知系统没有找到在其上发生异常的AppDomain上的已注册的处理程序,那么,系统查找另一AppDomain。例如,系统可以将异常编组到堆栈上的下一区域,以便找到向其通知异常的AppDomain。如果异常到达另一AppDomain,则异常通知系统通知AppDomain的通知回调(如果有的话)。这在其中在插件的AppDomain内发生异常但主存应用想要接收异常的通知的主存情况中可能是有用的。系统也可以提供对线程编组改变的通知以使得主存应用可以检测到其处理程序接收的异常是在不同的AppDomain中导致的。
以下是使用异常通知系统的示例。微软SQL服务器(SQL)管理员管理在单个服务器进程中运行的不同的数据库。不稳定性的原因之一是不期望的异常。SQL允许管理员在本机异常被引起时执行回调(通过-y开关)。这允许管理员为本机异常创建定制日志和上下文转储。然而,现今,对于托管异常,不能这样做。在此描述的这一通知允许SQL借助于与SQL为本机异常提供的相同的第一机会回调功能为托管异常提供回调。
在一些实施方式中,异常通知系统允许程序代码注册具体的类型的异常,以使得已注册的处理程序不接收不重要的或不感兴趣的异常类型。例如,程序可以对次要异常(例如,打开文件的故障)不感兴趣但是可以对更严重的出错(例如,访问冲突或存储器不足条件)感兴趣。
在一些实施方式中,异常通知系统允许程序开启和关闭处理程序的调用。许多应用在某些时刻产生许多异常。程序可以不想要记录所有这些异常,因此可以等待程序启动完成,然后,开启处理程序的调用。同样地,程序可以对程序关闭期间发生的异常不感兴趣,且可以在开始一关闭进程之前关闭对处理程序的调用。
从前述可见,应明白,在此已经出于示出的目的描述了异常通知系统的具体实施方式,但可以在不偏离本发明的精神和范围的前提下做出各种修改。因此,除了受所附权利要求限制之外,本发明不受其他限制。

Claims (13)

1.一种用于提供对异常的通知的计算机实现的方法,所述方法包括:
在应用的执行期间接收对异常已经被引起的通知;
检测与在其中发生过所述异常的帧相关联的运行时异常处理程序;
标识与所述异常相关联的运行时线程对象;
标识与所标识的线程对象相关联的应用对象;
调用与所标识的应用对象相关联的异常通知处理程序;以及
执行正常的异常处理以便处理所述异常并清除所分配的对象,
其中前述各步骤是由至少一个处理器来执行的。
2.如权利要求1所述的方法,其特征在于,接收对异常已经被引起的通知包括接收由于调用操作系统提供的函数而引起软件异常的通知。
3.如权利要求1所述的方法,其特征在于,接收对异常已经被引起的通知包括接收存储器不足异常的通知。
4.如权利要求1所述的方法,其特征在于,进一步包括,在接收对异常已经被引起的通知之后,检测调试器是否被附连到所述应用,且响应于确定调试器被附连到所述应用,通知所附连的调试器以便给予所述调试器处理所述异常的第一选项。
5.如权利要求1所述的方法,其特征在于,进一步包括在检测与在其中发生过所述异常的帧相关联的运行时异常处理程序之后检测与所述异常相关联的类型,其中检测类型包括将操作系统提供的代码映射到运行时类型。
6.如权利要求1所述的方法,其特征在于,进一步包括在检测与在其中发生过所述异常的帧相关联的运行时异常处理程序之后检测与所述异常相关联的类型,所述方法还包括将所检测的类型对象提供给所述异常通知处理程序。
7.如权利要求1所述的方法,其特征在于,标识运行时线程对象包括从在其中发生过所述异常的所述线程的所述堆栈帧中标识存储与由所述运行时托管的所述线程有关的数据的适当的线程对象,且其中,标识应用对象包括标识表示应用的隔离边界的应用域对象。
8.如权利要求1所述的方法,其特征在于,所述异常处理包括修改与所述异常相关的应用状态。
9.一种用于在用于处理异常的路径外提供异常引起的通知的计算机系统,所述系统包括:
被配置为从应用接收对处理程序进行注册的请求的处理程序注册组件,所述处理程序响应于异常发生来接收由所述系统提供的提前通知;
被配置为检测在程序正在执行时异常被引起的异常检测组件;
被配置为响应于所检测的异常来查找异常状态并标识与所述异常相关联的应用对象的对象发现组件;
被配置为调用一个或多个已注册的应用处理程序以便在异常处理发生之前向所述处理程序通知所检测的异常的异常通知组件;以及
被配置为在所述已注册的应用处理程序已经被通知之后执行异常处理的异常处理组件。
10.如权利要求9所述的系统,其特征在于,所述处理程序注册组件还被配置为确定处理程序注册函数的调用者的安全级别,并且如果所述调用者低于阈值安全级别则拒绝注册。
11.如权利要求9所述的系统,其特征在于,所述异常检测组件还被配置为对在所述异常被引起时要由操作系统通知的异常处理程序进行注册。
12.如权利要求9所述的系统,其特征在于,所述对象发现组件还被配置为在异常类的分层结构中确定所述异常的类型。
13.如权利要求9所述的系统,其特征在于,所述异常通知组件还被配置为将异常对象作为参数提供给所述已注册的处理程序,所述处理程序可以通过所述参数来检索关于所述异常的原因的附加信息。
CN201080020348.7A 2009-05-06 2010-04-30 对所引起的异常的通知 Active CN102422261B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/436,175 2009-05-06
US12/436,175 US8074116B2 (en) 2009-05-06 2009-05-06 Exception raised notification
PCT/US2010/033247 WO2010129429A2 (en) 2009-05-06 2010-04-30 Exception raised notification

Publications (2)

Publication Number Publication Date
CN102422261A CN102422261A (zh) 2012-04-18
CN102422261B true CN102422261B (zh) 2013-03-27

Family

ID=43050785

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201080020348.7A Active CN102422261B (zh) 2009-05-06 2010-04-30 对所引起的异常的通知

Country Status (5)

Country Link
US (1) US8074116B2 (zh)
EP (1) EP2427822B1 (zh)
CN (1) CN102422261B (zh)
BR (1) BRPI1014409A2 (zh)
WO (1) WO2010129429A2 (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8762947B2 (en) * 2010-04-01 2014-06-24 Salesforce.Com, Inc. System, method and computer program product for debugging an assertion
US9003378B2 (en) * 2010-12-14 2015-04-07 Bmc Software, Inc. Client-side application script error processing
RU2510074C2 (ru) 2012-02-24 2014-03-20 Закрытое акционерное общество "Лаборатория Касперского" Система и способ проверки исполняемого кода перед его выполнением
US8914776B2 (en) * 2012-05-17 2014-12-16 Microsoft Corporation Assisting development tools through inserted code statements
US9251042B2 (en) 2013-03-14 2016-02-02 International Business Machines Corporation Managed runtime enabling condition percolation
US9710315B2 (en) 2014-09-12 2017-07-18 Qualcomm Incorporated Notification of blocking tasks
JP6555908B2 (ja) * 2015-03-17 2019-08-07 キヤノン株式会社 情報処理装置及びその制御方法、プログラム
CN105354105B (zh) * 2015-10-28 2018-04-06 上海斐讯数据通信技术有限公司 软件异常处理系统及方法
US10043070B2 (en) * 2016-01-29 2018-08-07 Microsoft Technology Licensing, Llc Image-based quality control
US9990273B2 (en) 2016-03-17 2018-06-05 Tata Consultancy Services Limited Methods and systems for anomaly detection
CN106055429B (zh) * 2016-05-24 2019-05-24 努比亚技术有限公司 一种信息处理方法及装置
US10382343B2 (en) * 2017-04-04 2019-08-13 Netapp, Inc. Intelligent thread management across isolated network stacks
CN108255664A (zh) * 2017-05-05 2018-07-06 平安科技(深圳)有限公司 一种应用程序运维方法、装置以及设备
CN110806968B (zh) * 2018-08-06 2024-04-09 阿里巴巴集团控股有限公司 应用程序运行信息获取方法及装置
CN109343853B (zh) * 2018-08-17 2023-08-04 平安壹钱包电子商务有限公司 一种应用程序的异常识别方法及设备
US11216280B2 (en) * 2019-11-26 2022-01-04 Arm Limited Exception interception
US11269708B2 (en) 2019-12-30 2022-03-08 Micron Technology, Inc. Real-time trigger to dump an error log
US11269707B2 (en) * 2019-12-30 2022-03-08 Micron Technology, Inc. Real-time trigger to dump an error log
US11169869B1 (en) 2020-07-08 2021-11-09 International Business Machines Corporation System kernel error identification and reporting
CN113032100B (zh) * 2021-03-29 2023-07-18 北京字节跳动网络技术有限公司 一种异常处理方法、装置、设备及存储介质
CN115672756A (zh) * 2022-11-15 2023-02-03 艾信智慧医疗科技发展(苏州)有限公司 一种医用箱式物流分拣系统异常情况处理方法

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5297263A (en) * 1987-07-17 1994-03-22 Mitsubishi Denki Kabushiki Kaisha Microprocessor with pipeline system having exception processing features
US5761407A (en) * 1993-03-15 1998-06-02 International Business Machines Corporation Message based exception handler
US5537559A (en) * 1994-02-08 1996-07-16 Meridian Semiconductor, Inc. Exception handling circuit and method
US6601188B1 (en) 1999-10-28 2003-07-29 International Business Machines Corporation Method and apparatus for external crash analysis in a multitasking operating system
US6802067B1 (en) 2000-10-27 2004-10-05 Sprint Communications Company, L.P. Computer software framework and method for logging messages
US6920515B2 (en) * 2001-03-29 2005-07-19 Intel Corporation Early exception detection
JP2003058381A (ja) * 2001-08-15 2003-02-28 Fujitsu Ltd プログラムによる例外処理設定を可能にしたプロセッサ
JP4275451B2 (ja) 2003-04-23 2009-06-10 株式会社日立製作所 不正メモリアクセス検知方法及びそのプログラム
US7634778B2 (en) * 2003-06-26 2009-12-15 Microsoft Corporation Operating system managing a linked list of callback dynamic function tables for acquiring exception handling information from a runtime environment
WO2005008496A1 (en) * 2003-07-11 2005-01-27 Alex Zakonov Dynamic discovery algorithm
US20050015579A1 (en) * 2003-07-15 2005-01-20 Rajeev Grover Handling exceptions
US7146544B2 (en) * 2003-10-01 2006-12-05 Hewlett-Packard Development Company, L.P. Method and apparatus for supporting error handling in a web presentation architecture
US7554978B1 (en) * 2004-03-30 2009-06-30 Extreme Networks, Inc. System for accessing content-addressable memory in packet processor
US8490064B2 (en) 2004-05-21 2013-07-16 Oracle International Corporation Hierarchical debug
US7984220B2 (en) * 2004-09-02 2011-07-19 International Business Machines Corporation Exception tracking
US7596780B2 (en) * 2004-10-22 2009-09-29 Microsoft Corporation System and method for virtual catching of an exception
US7574692B2 (en) * 2004-11-19 2009-08-11 Adrian Herscu Method for building component-software for execution in a standards-compliant programming environment
US7447942B2 (en) 2005-07-19 2008-11-04 Microsoft Corporation Fast data breakpoint emulation
US7958497B1 (en) * 2006-06-07 2011-06-07 Replay Solutions, Inc. State synchronization in recording and replaying computer programs
US7716531B2 (en) * 2007-06-29 2010-05-11 International Business Machines Corporation System and method for fault mapping of exceptions across programming models
US7814372B2 (en) * 2007-09-07 2010-10-12 Ebay Inc. Method and system for exception detecting and alerting
US7861120B2 (en) * 2007-12-14 2010-12-28 Sap Ag Method and apparatus for runtime error handling
US20090013208A1 (en) * 2008-03-31 2009-01-08 Dimuzio Thomas M Real time automated exception notification and reporting solution

Also Published As

Publication number Publication date
EP2427822A4 (en) 2012-09-26
CN102422261A (zh) 2012-04-18
EP2427822B1 (en) 2019-03-13
BRPI1014409A2 (pt) 2016-04-05
EP2427822A2 (en) 2012-03-14
WO2010129429A3 (en) 2011-01-20
US20100287414A1 (en) 2010-11-11
US8074116B2 (en) 2011-12-06
WO2010129429A2 (en) 2010-11-11

Similar Documents

Publication Publication Date Title
CN102422261B (zh) 对所引起的异常的通知
US9697108B2 (en) System, method, and apparatus for automatic recording and replaying of application executions
US9740594B2 (en) Automated debug trace specification
CN106133698B (zh) 用于用户模式崩溃报告的框架
Shahriar et al. Testing of memory leak in android applications
Hu et al. Static detection of event-based races in android apps
CN103632101A (zh) 一种拦截系统调用的方法和装置
CN109857520B (zh) 一种虚拟机自省中的语义重构改进方法及系统
CN104077220A (zh) Mips架构操作系统内核的调试方法和装置
CN105164642B (zh) 对合同的操作系统支持
US8751872B2 (en) Separation of error information from error propagation information
CN113127050A (zh) 一种应用资源打包过程监控方法、装置、设备和介质
US10997055B2 (en) Methods, circuits, apparatus, systems and associated software modules for evaluating code behavior
US9846631B2 (en) Methods, circuits, apparatus, systems and associated software modules for evaluating code behavior
US11263115B2 (en) Problem diagnosis technique of memory corruption based on regular expression generated during application compiling
CN113760491A (zh) 一种任务调度系统、方法、设备及存储介质
CN110781081B (zh) 一种移动应用回调强制触发方法、系统及存储介质
CN116599881A (zh) 云平台租户建模测试的方法、装置、设备及存储介质
US20110246967A1 (en) Methods and systems for automation framework extensibility
CN112286802B (zh) 一种测试程序性能方法、装置和电子设备
CN114116509A (zh) 程序分析方法、装置、电子设备和存储介质
KR102462864B1 (ko) 멀티 코어를 이용한 동적 바이너리 인스트루멘테이션 장치 및 방법
KR102556413B1 (ko) 세마포어를 이용한 가상화 머신 관리 방법 및 이를 위한 장치
CN112181761B (zh) 程序执行控制、测试、代码检测方法、装置、设备及介质
Ramgir et al. Java 9 High Performance: Practical techniques and best practices for optimizing Java applications through concurrency, reactive programming, and more

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
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150429

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20150429

Address after: Washington State

Patentee after: Micro soft technique license Co., Ltd

Address before: Washington State

Patentee before: Microsoft Corp.