CN101398780B - 可基于进程定制调试器的即时调试的方法和系统 - Google Patents

可基于进程定制调试器的即时调试的方法和系统 Download PDF

Info

Publication number
CN101398780B
CN101398780B CN2007101619803A CN200710161980A CN101398780B CN 101398780 B CN101398780 B CN 101398780B CN 2007101619803 A CN2007101619803 A CN 2007101619803A CN 200710161980 A CN200710161980 A CN 200710161980A CN 101398780 B CN101398780 B CN 101398780B
Authority
CN
China
Prior art keywords
operating system
instant
relevant information
instant debugging
debugging message
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.)
Expired - Fee Related
Application number
CN2007101619803A
Other languages
English (en)
Other versions
CN101398780A (zh
Inventor
齐尧
李研
于维英
郑勇
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Priority to CN2007101619803A priority Critical patent/CN101398780B/zh
Priority to US12/210,484 priority patent/US9128837B2/en
Publication of CN101398780A publication Critical patent/CN101398780A/zh
Application granted granted Critical
Publication of CN101398780B publication Critical patent/CN101398780B/zh
Expired - Fee Related 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/0766Error or fault reporting or storing
    • 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/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • 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/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software

Abstract

本发明提出了一种在操作系统内可基于进程定制调试器的即时调试的方法和系统,包括:响应于操作系统内核事件的一陷阱事件的发生,获得进程即时调试相关信息;根据获得的进程即时调试相关信息,调用该进程对应的调试器。该方法能够面向特定进程,为不同的进程提供不同的即时调试支持。

Description

可基于进程定制调试器的即时调试的方法和系统
技术领域
本发明涉及软件的调试技术,特别地,涉及可基于进程定制调试器的即时调试的方法和系统。
背景技术
在软件开发生命周期中,一个bug指编程或逻辑错误引起的程序异常。对于某些特殊领域,如军事、医疗以及金融行业,一个看似微不足道的bug可能会带来难以估量的损失。正是由于这种潜在的巨大风险使得所有商业软件在发布之前都要进行尽可能彻底的测试及调试。
然而,软件复杂性的增加却带来了越来越多的难以重现或偶然出现的bug。开发人员无法预知上述bug什么时候会出现,它们有可能只在某些特定的系统出现,或是在程序启动并运行很久之后才会出现,比如一个小时,有时甚至几天。更有甚者,部分bug可能在程序被调试器监控时就消失了。在本发明中,运行时bug将被用来指代上述程序缺陷。
传统调试器对于运行时bug的调试帮助甚少,因为在一个运行时bug出现之后才启动调试器已经为时过晚,此时出现bug的程序的上下文已经不再可用。即时调试(Just-In-Time Debugging,JIT debugging)的出现正是为了解决上述问题。即时调试是在运行时bug出现时自动启动调试器进行调试的技术。其已经成为现代调试器不可缺少的组成部分。迄今为止,已经有部分方法或系统被用来提供即时调试。在这些方法或系统中,借助异常处理钩子函数提供即时调试以及借助特定操作系统的异常机制提供即时调试是两种广泛使用的方法。
美国专利US5526485提出的借助异常处理钩子函数提供即时调试的方法,主要为了解决Windows3.1操作系统不能针对程序错误加载并运行调试程序的问题。图1显示了借助异常处理钩子函数提供即时调试方法的整个流程。在该方法中,借助一个名为TOOLHELP的应用程序接口库的支持,一个常驻内存的监视程序向操作系统注册相应的异常处理函数。当某个异常出现时,操作系统将调用监视程序先前注册的异常处理函数即回调函数。之后,监视程序将提示用户是否调试目标程序。如果用户选择调试目标程序,那么监视程序的回调函数将启动一个事先配置的调试器供用户进行交互式调试。该方法存在下述几个问题:
(1)该方法引入了辅助即时调试的监视程序。该监视程序必须在目标程序启动之前被加载并且常驻内存。尽管该监视程序可能不会消耗过多的系统资源,但是在许多实际应用中这显然是不可取的,因为监视程序常驻系统内存以及其所消耗的系统资源可能会对目标程序产生影响,从而无法进行有效调试;
(2)该方法不是面向特定进程的。其面向的是所有系统中的进程,这使得用户疲于应付来自他们根本不关心的其余进程的大量提示信息;
(3)该方法缺乏灵活的可定制性。在监视程序被加载进入内存之后,注册了的异常处理函数只能保持不变。如果用户在同一调试会话中的不同调试阶段的需求发生变化时,用户将不得不修改监视程序并重新加载该监视程序。然而,这必将会破坏一个即时调试会话的完整性;
(4)该方法基于TOOLHELP函数库。因此,可能会有大量不同的应用程序注册了同一类型的异常处理函数。当某个此类异常出现时,操作系统将顺序调用已注册的处理函数直到某个处理函数返回特定的值表明该异常已被处理。如此以来,一个原本应该被监视程序捕获的异常中断可能被其它应用程序注册的异常处理函数所捕获,从而使得用户失去对目标程序进行即时调试的机会;
(5)该方法不能提供软件中断所带来的运行时bug的即时调试。
另外一种方法,借助操作系统的异常机制提供即时调试的方法被Microsoft Windows操作系统广泛使用,包括Windows 2000/XP/NT。该方法基于Microsoft Windows操作系统的内嵌异常处理机制。参见http://msdn2.microsoft.com/en-us/library/5hs4b7a6.aspx。该方法需要利用Microsoft Windows操作系统的一种称为“异常处理”的机制。该机制中,当一个诸如段错误的异常出现时,内核将通知产生该异常的当前执行程序,当前执行程序获得自我纠错的机会即第一次异常处理机会。如果应用程序不能处理或纠正该异常,操作系统将试图进行第二次异常处理或最终异常处理。如果异常仍然不能被正确处理,在终止该应用程序之前,系统将采用内嵌机制启动一个辅助应用程序。通常,该辅助应用程序能够“附加”到目标程序并获取处于错误状态的目标程序的状态信息。
借助操作系统的异常机制提供即时调试的方法利用上述机制,开发一个可执行程序(例如Microsoft Visual Studio提供的vsjit.exe)并将注册表中特定的注册表项设置为该可执行程序的安装路径。一旦某个异常在第二次异常处理中没被正确处理,内核将获取特定的注册表项的值并加载相应的可执行程序。之后,通知用户并依据用户选择决定是否加载相应的调试器。
尽管借助操作系统的异常机制提供即时调试的方法在某些方面优于借助异常处理钩子函数提供即时调试的方法,例如,无须注册异常处理函数,不存在需要常驻内存的监视程序也无须在启动目标程序之前启动辅助程序,但是借助操作系统的异常机制提供即时调试的方法仅仅能够捕获致命的异常。然而在调试过程中,用户关注的不仅仅只是这些致命的异常,还需要关注部分常规异常,即部分能被第一次异常处理过程正确处理的异常。如果目标程序收到一个在当前条件下不该收到的异常,那么该方法将不能提供任何帮助。并且,借助操作系统的异常机制提供即时调试的方法同样不能提供软件中断所带来的运行时bug的即时调试。
发明内容
现有的上述技术方案都存在不足。其中,操作系统内核对可定制的面向特定进程的即时调试支持的不足是造成这种现状的主要因素。如果操作系统内核能够为运行于系统之上的应用程序提供强大的即时调试支持,那么即时调试会得到较大的改进。
本发明从操作系统的角度出发,改进操作系统为应用程序提供的即时调试的支持并提供可定制的面向特定进程的即时调试能力。
相对于现有技术,本发明的优点在于:
(1)对目标程序没有任何侵入性。没有任何额外的应用程序需要在加载目标程序之前加载,也无须常驻内存。只有发生了用户关注的事件并在该事件被处理之前,调试器才会被加载。
(2)面向特定进程,使得为不同的进程提供不同的即时调试支持变得非常灵活。
(3)为操作系统提供了一个新的可定制(例如,可以在需要时更改事件的处理函数)的事件处理机制。
根据本发明的一个方面,提供了一种在操作系统内可基于进程定制调试器的即时调试的方法,包括:
响应于操作系统内核事件的一陷阱事件的发生,获得进程即时调试相关信息;
根据获得的进程即时调试相关信息,调用该进程对应的调试器。
根据本发明的另一个方面,提供了一种在操作系统内可基于进程定制调试器的即时调试的系统,包括:
获取器,用于响应于操作系统内核事件的一陷阱事件的发生,获得进程即时调试相关信息;
调用器,用于根据获得的进程即时调试相关信息,调用该进程对应的调试器。
根据本发明的又一方面,提供了一种程序产品,包含程序代码,用于实现说明书中所述的方法以及承载该程序代码的承载介质。
附图说明
通过对附图中本发明示例实施例方式的更详细描述,本发明的上述、以及其它目的、特征和优势将变得更加明显,其中,相同的参考标号通常代表本发明示例实施例方式中的相同部件。
图1示意性示出了借助异常处理钩子函数提供即时调试方法的整个流程;
图2示意性示出了操作系统内核事件的事件分发处理流程和陷阱事件处理流程;
图3示意性示出了在操作系统中可基于进程定制调试器的即时调试的方法流程;
图4示意性示出了一种配置了即时调试信息的可执行文件格式;
图5示意性示出了进程表和进程控制块之间的相互关系;
图6示意性示出了添加了即时调试信息的扩展进程控制块;
图7示意性示出了即时调试信息列表;
图8示意性示出了进程在内存中的空间;
图9示意性示出了修改后的进程在内存中的空间;以及
图10示意性示出了一种在操作系统内可基于进程定制调试器的即时调试的系统。
具体实施方式:
将参照附图更加详细地描述本发明的优选实施方式,在附图中显示了本发明的优选实施例。然而,本发明可以以各种形式实现而不应该理解为被这里阐述的实施例所限制。相反,提供这些实施例是为了使本发明更加透彻和完整,并且,完全将本发明的范围传达给本领域的技术人员。
现有技术中,操作系统提供的中断(Interrupt)和异常(Exceptions)机制是导致程序出现运行时bug的主要因素。因此,当谈及运行时bug时,有必要区分计算机系统内的中断和异常机制。一个中断是一个异步事件,它可能在任何时候出现并且可能与处理器正在执行的程序无关。中断主要由I/O设备、处理器时钟或定时器产生,并且可以被开启或关闭。相对而言,一个异常则是由特定指令序列的执行所引起的同步事件。在同等条件下,程序处理同样的数据可以再现同样的异常。
硬件或软件均可以产生中断和异常。例如,一个硬件问题会导致系统总线错误异常,而除零异常则是软件缺陷导致的结果。同样的,一个I/O设备会产生一个中断,或是内核本身也会产生软件中断(例如Linux上的定时器或是信号机制)。
在所有的中断和异常中,软件中断和硬件或软件异常这两类事件是导致运行时bug的最重要因素
软件中断是对硬件中断的模拟。不同的操作系统都会提供不同的软件中断机制,例如Microsoft Windows中的ADC(Asynchronous ProcedureCall Interrupts,即异步过程调用中断)或DPC(Deferred Procedure CallInterrupts或Dispatched Procedure Call Interrupts即延迟过程调用中断)机制,以及类Unix系统上的信号处理机制。应用程序开发者并不能确切知道此类异步事件何时出现。因此,出现时机的不确定性带来了较多的运行时bug。例如在类Unix系统中,如果程序向磁盘写入一个大小超过系统限制的文件,那么程序将收到一个软件中断(信号SIGXFSZ)。如果程序不处理该中断,程序将被系统终止。这是最简单的一个运行时bug。
硬件或软件异常主要指开发者没有考虑到的或是开发者认为不该出现却出现了的软硬件异常,其同样会带来运行时bug。例如,如果程序将文件写入一个无任何可用空间的磁盘,系统将产生“磁盘无可用空间”的异常。如果开发者没有考虑到该异常的出现而继续执行与该文件相关的操作,那么用户将碰到不确定的运行时bug。
本发明中陷阱事件(Trap Event)将为上面提到的“软件中断”和“硬件异常或软件异常”事件。
本发明是通过修改操作系统对陷阱事件处理的流程来实现操作系统为应用程序提供即时调试的支持,并提供操作系统中可定制的面向特定进程的即时调试能力。为了便于理解,下面首先详细介绍内核事件的事件分发处理流程和陷阱事件处理流程。
内核事件在操作系统中是由事件分发(Event Dispatch)处理流程来处理的。内核事件包括陷阱事件和非陷阱事件,陷阱事件处理流程在操作系统处理中属于事件分发处理流程的一个子流程。该处理流程被用来处理陷阱事件。
图2描述了操作系统内核事件的事件分发处理流程和陷阱事件处理流程。参考图2,在步骤S201,应用程序通过操作系统提供的特定事件机制注册相应的陷阱事件处理函数,该步骤是可选的,如果应用程序没有注册相应的陷阱事件处理函数,则操作系统和应用程序接口提供默认的处理函数,例如提示“发生了很严重的错误”之类的显示语句等。在步骤S202,内核事件发生,并且被操作系统内核捕获,内核优选可以把事件记录到队列或列表中,之后将该事件传递到内核;在步骤S203,判断该内核事件是陷阱事件还是非陷阱事件,对于非陷阱事件,进入步骤S204,非陷阱事件流程,然后进入步骤S205,非陷阱事件将被内核自己处理。对于陷阱事件,在步骤S206,进入陷阱事件流程,然后在步骤S207调用应用程序事先注册的处理函数处理,如果应用程序没有事先注册的处理函数,则调用系统默认的处理函数。
因此,在即时调试中,对于应用程序进程产生的中断和异常,只要修改操作系统原有的处理流程,加入进程相关的即时调试信息标识不同进程的即时调试器,在进程出现陷阱事件时调用相应进程的即时调试器,就可以达到不同的进程提供不同的即时调试支持的目的。
图3示出了根据本发明的一个实施例的在操作系统中可基于进程定制调试器的即时调试的方法流程,该方法包括图2所示的现有技术中对内核事件的事件分发处理流程和非陷阱事件处理流程,还包括修改后的陷阱事件处理流程,该流程注册了特别的陷阱事件处理函数,如图3,在步骤S301,加入进程即时调试相关信息。该步骤在该方法中可以是优选的,因为即时调试相关信息可能在处理内核事件时已经通过其他方式获得,例如其他计算机的操作系统已经将该信息通过网络传送等,后面将会详细介绍如何加入进程即时调试相关信息。在步骤S308,发生陷阱事件,响应于操作系统内核事件的陷阱事件的发生,获得进程即时调试相关信息,然后进入步骤S309,判别用户是否关注陷阱事件,是否要进行即时调试,该步骤只是为了用户方便,对于在操作系统中可基于进程定制调试器的即时调试的方法来说是优选的。如果用户关注陷阱事件,要进行即时调试,则进入然后调用步骤S310,根据获得的进程即时调试相关信息,调用该进程对应的调试器,就可以在操作系统中基于进程定制即时调试器。对于用户不关注陷阱事件,无须进行即时调试的情况,可以采用现有技术的系统默认的处理函数。
在加入进程即时调试相关信息的步骤中,首先要确定即时调试相关信息的内容。进程即时调试相关信息包括进程调试器路径,该属性记录当前文件系统中的不同进程的调试器路径。一旦用户关注的陷阱事件发生并且需要加载调试器时,操作系统可以通过该值获悉应该加载哪个调试器。
优选地,进程即时调试相关信息还包括即时调试标识位,该标志位可以设置为即时调试开启或关闭,以此来描述对于进程是否开启了即时调试支持。
优选地,进程即时调试相关信息还包括即时调试事件信息,在即时调试标志位被设置为开启时,该变量可以被用来提供更广泛的可定制性。用户可以将该属性设置为不同的值以满足不同的即时调试需求。
一个应用程序由于包含多个进程,对于每一个进程,可以指定不同的即时调试器,对于一个特定的进程,可以在不同的时间指定不同即时调试器,但是对于一个特定的进程,不能在同一时间指定多个即时调试器,否则系统将不知道采用哪个即时调试器。
添加进程即时调试相关信息的方法有多种,下面将详细介绍如何添加进程即时调试相关信息。
添加进程即时调试信息包括两个步骤,首先要配置即时调试相关信息,然后将即时调试相关信息告知操作系统;并且,用户可以通过按需更新即时调试标志位和即时调试事件信息,从而为目标程序的不同执行阶段提供不同的即时调试支持。
对即时调试信息进行配置有多种方法,例如:
方法1:编译器提供特定选项支持即时调试相关信息的生成并记录在程序的可执行文件中,这样,在操作系统加载该程序并为其创建进程时,可以进行识别并告知操作系统。大多数常用的可执行文件格式,例如ELF,PE和COFF,都将不同的信息按不同的功能分类组织为不同的段或节。因此,可以很容易地在可执行文件中创建一个新的存储即时调试信息的段或节。图4描述了这样的配置了即时调试信息的可执行文件格式。即时调试信息可以由编译器自动生成,当然编译器同样可以提供相应的编译选项供用户对编译过程进行控制。
方法2:系统提供额外的配置工具(例如AIX上的SMIT)供用户对进程的即时调试信息进行修改。
方法3:类Unix/Linux系统可以在proc文件系统中提供设置即时调试信息的接口,用户可随意对其进行修改
方法4:操作系统系统提供系统调用来实现对进程即时调试信息的修改。
方法5:将即时调试信息记录在可执行文件以外的配置文件中。例如,将其保存在与可执行文件主文件名相同,但扩展名为“.INI”的文件中。如果可执行文件名为NOTEPAD.EXE,则可以通过在同目录下创建文件NOTEPAD.INI来对其即时调试信息进行设置,文件内容示例如下:
[JIT DEBUG]
DEBUGGER_PATH=C:\DEV\WINDBG.EXE
DEBUG_FLAG=1
DEBUG_MASK=0xFF
上述方法都可以实现即时调试信息的配置,之后,需将配置的即时调试相关信息告知操作系统。由于即时调试信息能够从即时调试的角度告知操作系统何时以及如何处理进程中发生的某些事件,因此需要由操作系统管理这些即时调试信息。告知操作系统有多种方法可以实现,下面详细介绍:
方法1:扩展操作系统中的进程控制块。
为了介绍该方法,首先需要介绍进程控制块,为了控制系统中的所有进程,操作系统将维护一个或多个进程表,在进程表中,每个进程占据一个表项,每个这样的表项所描述的数据区域即为对应进程的进程控制块(PCB)。图5说明了进程表和进程控制块(PCB)之间的相互关系。操作系统通过PCB中记录的诸如进程标识PID,进程状态信息等进程信息来控制相应进程。
在一个进程被创建之后,所有进程控制块中的扩展信息并非一成不变。部分信息对用户而言是可修改的,用户可以依据自身的不同需求进行相应的配置。本发明中为了将将即时调试相关信息告知操作系统,扩展了进程控制块,扩展之后的进程控制块如图6所示。图6为添加了即时调试信息的扩展进程控制块。在操作系统加载应用程序并为其创建进程时,可以参照图6将配置好的即时调试信息添加到操作系统中的PCB中。
在图4的方法中,内核可以通过检查该信息来判断即时调试是否开启。如果即时调试标志位设置为关闭,那么无须做任何额外的操作仅仅像大多数时候那样分发陷阱事件即可;如果开启了即时调试,内核将检查用户是否关注当前的陷阱事件(这可以通过检查即时调试信息中的部分属性来实现,例如即时调试事件信息)。如果用户关心当前的陷阱事件,那么内核将加载调试器路径属性指定的调试器,之后,将目标进程的控制权转交给调试器。
上述实现是非常容易的,比如Linux系统上部分可修改的即时调试信息可以导出到/proc文件系统中,用户可以在任何需要修改的时候修改这部分信息。
方法2:该方法不对PCB进行任何扩展,而是内核为所有进程维护一个“即时调试信息”列表。该列表如图7所示。在该方法中,内核并不对PCB进行扩展,而是将一个进程的这部分扩展信息作为一个节点组成一个列表,并按进程号PID进行访问。在操作系统加载应用程序并为其创建进程时,可以参照图7将配置好的即时调试信息添加到“即时调试信息”列表中。在该方法中,当一个进程需要进行即时调试时,内核依据该进程的PID在上述列表中进行查询以获取对应该进程的即时调试信息。
方法3:将即时调试信息记录在对应进程的进程空间的固定位置处JIT_INFO_FIXED_ADDRESS_OFFSET,例如0x01000000H。这个地址信息对所有进程而言都是固定了。在操作系统加载应用程序并为其创建进程时,将配置好的即时调试信息添加到该固定位置处。当内核需要访问一个进程的即时调试信息时,直接访问:(进程空间的起始地址+JIT_INFO_FIXED_ADDRESS_OFFSET)地址开始的信息,图8示出了进程在内存中的空间。图9示出了修改后的进程在内存中的空间。
这样,操作系统就可以获得即时调试相关信息,就可以用来实现操作系统对可定制的面向特定进程的即时调试支持,下面以编译器提供特定选项支持即时调试信息的生成并记录在程序的可执行文件中以及扩展操作系统中的进程数据块的方式为例,介绍操作系统内的运转流程:
1.采用即时调试信息选项编译程序,例如:
cc-fjit=on-fjit_debugger=/usr/bin/dbx-fjit-mask=0x0h-o hello hello.c
在编译过程中,编译器将依据即时调试选项的值在最后生成的可执行程序中创建一个额外的即时调试段,并在该段中携带相应的即时调试信息。
2.操作系统在加载可执行程序的同时识别出步骤1中生成的即时调试信息。
3.使用步骤2中识别出来的即时调试信息填充进程控制块PCB中的扩展属性。
进程控制块PCB中的部分属性值可以进行重配置,并借此提供较大的可定制性。
4.当一个陷阱事件发生时,操作系统内核将检测扩展信息中的即时调试标志位来决定是否支持即时调试。如果不支持就如往常那样分发该陷阱事件即可;如果支持即时调试并且用户关注该陷阱事件,那么启动扩展信息中即时调试器路径指定的调试器并将目标进程的控制权转交给该调试器。
5.开始调试过程。
在同一个发明构思下,本发明还提供了一种在操作系统内可基于进程定制调试器的即时调试的系统1000,如图10所示,该系统包括获取器1001,用于响应于操作系统内核事件的陷阱事件的发生,获得进程即时调试相关信息;调用器1002,用于根据获得的进程即时调试相关信息,调用该进程对应的调试器;通知器1003,用于将即时调试相关信息告知操作系统;配置器1004,用于配置即时调试相关信息和添加器1005。
这里,该系统和本发明的方法是对应的,其中,进程即时调试相关信息包括进程调试器路径。优选地,进程即时调试相关信息还包括即时调试标识位,该标志位可以设置为即时调试开启或关闭,以此来描述对于进程是否开启了即时调试支持。优选地,进程即时调试相关信息还包括即时调试事件信息,在即时调试标志位被设置为开启时,该变量可以被用来提供更广泛的可定制性。用户可以将该属性设置为不同的值以满足不同的即时调试需求。
该系统中,通知器1003可以采用以下方法之一实现:
a.扩展操作系统中的进程控制块,加入即时调试相关信息;
b.操作系统内核为所有进程维护一个即时调试信息列表;
c.将即时调试信息记录在对应进程的进程空间的固定位置处。以上通知器1003的具体扩展和实现方法和本发明的方法描述是一致的,这里不再赘述。
该系统中,配置器1004可以采用以下方法之一实现:
a.编译器提供特定选项支持即时调试相关信息的生成并记录在程序的可执行文件中;
b.操作系统提供额外的配置工具来对进程的即时调试信息进行修改;
c.类Unix/Linux系统在proc文件系统中提供设置即时调试信息的接口;
d.操作系统系统提供系统调用来实现对进程即时调试信息的修改;
e.将即时调试信息记录在可执行文件以外的配置文件中。
以上配置器1004的具体实现方法和本发明的方法描述是一致的,这里不再赘述。
该系统中,添加器1005,用于在操作系统加载应用程序并为其创建进程时,将配置好的即时调试信息添加到下述之一:
a.扩展操作系统中的进程控制块;
b.操作系统内核为所有进程维护的即时调试信息列表;
c.对应进程的进程空间的固定位置处。
对于这样的在操作系统内可基于进程定制调试器的即时调试的系统,在操作系统中工作的流程为:
1.采用配置器1004配置即时调试信息;
2.利用添加器1005识别出即时调试信息,传给通知器1003,这样,操作系统就可以获知即时调试相关信息;
3.当一个陷阱事件发生并需要即时调试时,操作系统利用获取器1001获得即时调试相关信息,然后利用调用器1002根据即时调试相关信息来调用进程相关的调试器;
4.开始调试过程。
本发明还提供一种程序产品,包含实现以上所有方法的程序代码以及承载该程序代码的承载介质。
虽然这里参照附图描述了本发明的示例性实施例,但是应该理解本发明不限于这些精确的实施例,并且再不背离本发明的范围和宗旨的情况下,本领域普通技术人员能对实施例进行各种变化的修改。所有这些变化和修改意欲包含在所附权利要求中限定的本发明的范围中。

Claims (10)

1.一种在操作系统内可基于进程定制调试器的即时调试的方法,包括:
配置进程即时调试相关信息并存储,其中进程即时调试相关信息包括进程调试器路径;
将进程即时调试相关信息告知操作系统;
响应于操作系统内核事件的一陷阱事件的发生,获得进程即时调试相关信息;
根据获得的进程即时调试相关信息,调用该进程对应的调试器。
2.根据权利要求1所述的方法,其中所述陷阱事件为软件中断、硬件异常事件或软件异常事件。
3.根据权利要求1所述的方法,其中将进程即时调试相关信息告知操作系统可以采用以下方法之一实现:
a.扩展操作系统中的进程数据块,加入进程即时调试相关信息;
b.操作系统内核为所有进程维护一个即时调试信息列表;
c.将即时调试信息记录在对应进程的进程空间的固定位置处。
4.根据权利要求1所述的方法,其中配置进程即时调试相关信息可以采用以下方法之一实现:
a.编译器提供特定选项支持进程即时调试相关信息的生成并记录在程序的可执行文件中;
b.操作系统提供额外的配置工具来对进程的即时调试信息进行修改;
c.类Unix/Linux系统在proc文件系统中提供设置即时调试信息的接口;
d.操作系统提供系统调用来实现对进程即时调试信息的修改;
e.将即时调试信息记录在可执行文件以外的配置文件中。
5.根据权利要求1-4之一所述的方法,其中还包括在操作系统加载应用程序并为其创建进程时,将配置好的即时调试信息加载到下述之一:
a.扩展操作系统中的进程数据块;
b.操作系统内核为所有进程维护的即时调试信息列表;
c.对应进程的进程空间的固定位置处。
6.一种在操作系统内可基于进程定制调试器的即时调试的系统,包括:
配置器,用于配置进程即时调试相关信息,其中进程即时调试相关信息包括进程调试器路径;
通知器,用于将进程即时调试相关信息告知操作系统;
获取器,用于响应于操作系统内核事件的一陷阱事件的发生,获得进程即时调试相关信息;
调用器,用于根据获得的进程即时调试相关信息,调用该进程对应的调试器。
7.根据权利要求6所述的系统,其中所述陷阱事件为软件中断、硬件异常事件或软件异常事件。
8.根据权利要求6所述的系统,其中通知器可以采用以下方法之一实现:
a.扩展操作系统中的进程数据块,加入进程即时调试相关信息;
b.操作系统内核为所有进程维护一个即时调试信息列表;
c.将即时调试信息记录在对应进程的进程空间的固定位置处。
9.根据权利要求6所述的系统,其中配置器可以采用以下方法之一实现:
a.编译器提供特定选项支持进程即时调试相关信息的生成并记录在程序的可执行文件中;
b.操作系统提供额外的配置工具来对进程的即时调试信息进行修改;
c.类Unix/Linux系统在proc文件系统中提供设置即时调试信息的接口;
d.操作系统提供系统调用来实现对进程即时调试信息的修改;
e.将即时调试信息记录在可执行文件以外的配置文件中。
10.根据权利要求6-9之一所述的系统,其中还包括添加器,用于在操作系统加载应用程序并为其创建进程时,将配置好的即时调试信息加载到下述之一:
a.扩展操作系统中的进程数据块;
b.操作系统内核为所有进程维护的即时调试信息列表;
c.对应进程的进程空间的固定位置处。
CN2007101619803A 2007-09-27 2007-09-27 可基于进程定制调试器的即时调试的方法和系统 Expired - Fee Related CN101398780B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN2007101619803A CN101398780B (zh) 2007-09-27 2007-09-27 可基于进程定制调试器的即时调试的方法和系统
US12/210,484 US9128837B2 (en) 2007-09-27 2008-09-15 Providing customizable, process-specific just-in-time debugging in an operating system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2007101619803A CN101398780B (zh) 2007-09-27 2007-09-27 可基于进程定制调试器的即时调试的方法和系统

Publications (2)

Publication Number Publication Date
CN101398780A CN101398780A (zh) 2009-04-01
CN101398780B true CN101398780B (zh) 2011-08-24

Family

ID=40517352

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2007101619803A Expired - Fee Related CN101398780B (zh) 2007-09-27 2007-09-27 可基于进程定制调试器的即时调试的方法和系统

Country Status (2)

Country Link
US (1) US9128837B2 (zh)
CN (1) CN101398780B (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101739295B (zh) * 2009-12-31 2013-12-04 北京数码大方科技股份有限公司 基于进程调用扩展程序的方法和装置
KR101459867B1 (ko) 2010-06-28 2014-11-13 현대자동차주식회사 시스템 테스트 장치
CA2800271A1 (en) * 2010-09-07 2012-03-15 Ewha University-Industry Collaboration Foundation System test method
US8412984B2 (en) 2010-11-12 2013-04-02 Microsoft Corporation Debugging in a cluster processing network
US20120185881A1 (en) * 2011-01-13 2012-07-19 Begeman Nathaniel C Debugging Support For Core Virtual Machine Server
WO2012124841A1 (ko) 2011-03-15 2012-09-20 현대자동차 주식회사 통신 테스트 장치 및 방법
CN102508769A (zh) * 2011-10-11 2012-06-20 北京锐安科技有限公司 一种基于核心注入式调试器的被调试程序调试方法
CN103544095B (zh) * 2012-07-12 2015-09-16 腾讯科技(深圳)有限公司 服务器程序的监控方法及其系统
CN104487935B (zh) * 2012-07-27 2018-04-24 慧与发展有限责任合伙企业 记录外部过程
US9400885B2 (en) 2014-01-10 2016-07-26 Bitdefender IPR Management Ltd. Computer security systems and methods using virtualization exceptions
US9916220B2 (en) * 2015-03-26 2018-03-13 EMC IP Holding Company LLC Smart logging of trace data for storage systems
CN105354136B (zh) 2015-09-25 2018-06-15 华为技术有限公司 一种调试方法、多核处理器和调试设备
CN105224454B (zh) 2015-09-25 2018-06-05 华为技术有限公司 一种调试方法、多核处理器和调试设备
CN106778098A (zh) * 2015-11-24 2017-05-31 中国移动通信集团公司 一种安卓系统应用程序的保护方法和装置
US10545740B2 (en) * 2017-10-25 2020-01-28 Saudi Arabian Oil Company Distributed agent to collect input and output data along with source code for scientific kernels of single-process and distributed systems
CN112131097A (zh) * 2020-07-27 2020-12-25 展讯半导体(南京)有限公司 一种调试信息动态获取方法及系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5526485A (en) * 1994-10-13 1996-06-11 Microsoft Corporation Just-in-time debugging system and methods under the windows 3.0 and windows 3.1 operating systems
US6275868B1 (en) * 1997-03-12 2001-08-14 Microsoft Corporation Script Engine interface for multiple languages
GB0125628D0 (en) * 2001-10-25 2001-12-19 Ibm Computer system with watchpoint support
US7272832B2 (en) * 2001-10-25 2007-09-18 Hewlett-Packard Development Company, L.P. Method of protecting user process data in a secure platform inaccessible to the operating system and other tasks on top of the secure platform
US7721265B1 (en) * 2003-11-10 2010-05-18 Cisco Technology, Inc. Source code debugging method and apparatus for use in script testing environment
US7640539B2 (en) * 2005-04-12 2009-12-29 International Business Machines Corporation Instruction profiling using multiple metrics

Also Published As

Publication number Publication date
US20090089622A1 (en) 2009-04-02
US9128837B2 (en) 2015-09-08
CN101398780A (zh) 2009-04-01

Similar Documents

Publication Publication Date Title
CN101398780B (zh) 可基于进程定制调试器的即时调试的方法和系统
US20220398109A1 (en) Dynamically Loaded Plugin Architecture
CN108345542B (zh) 一种应用程序中异常处理方法及装置
EP2245532B1 (en) Method and apparatus for generating virtual software platform based on component model and validating software platform architecture using the platform
US8171460B2 (en) System and method for user interface automation
US8037472B2 (en) Building and installing dynamic installation packages using a declarative authoring tool
US7299455B2 (en) Remote monitoring of computer programs
US7743282B2 (en) Capturing computer application diagnostics
US20050125788A1 (en) Wizard-based installation package with run-time debugging support
US20070169114A1 (en) Application suite installer with automatic detection of content and configurable options
US20050223360A1 (en) System and method for providing a generic user interface testing framework
US8347283B2 (en) System and method for automatic installation and maintenance of hardware and software in a distributed computer system
US20050229161A1 (en) Generic user interface testing framework with load-time libraries
US20120110567A1 (en) Operating system installation using build plans
US20050228644A1 (en) Generic user interface testing framework with rules-based wizard
CN115268986A (zh) 一种低代码业务脚本运行方法及引擎装置
US20080127061A1 (en) Method and system for editing code
Jansen et al. A process model and typology for software product updaters
CN117215558A (zh) 安卓的基于可视化的软件开发方法、装置、设备及介质
Winter et al. The PECOS software process
CN111367796A (zh) 应用程序调试方法及装置
CN117742783A (zh) 用于软件系统的日志数据跨语言自动记录方法
Acharya Design and Implementation of a Continuous Integration System
Antunes et al. Test Framework for Jenkins Shared Libraries
Shukla et al. Component Based Software Development Using Component Oriented Programming

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110824