CN110603527A - 服务器侧生产代码的有条件调试 - Google Patents
服务器侧生产代码的有条件调试 Download PDFInfo
- Publication number
- CN110603527A CN110603527A CN201880029170.9A CN201880029170A CN110603527A CN 110603527 A CN110603527 A CN 110603527A CN 201880029170 A CN201880029170 A CN 201880029170A CN 110603527 A CN110603527 A CN 110603527A
- Authority
- CN
- China
- Prior art keywords
- breakpoint
- target program
- execution
- computer
- setting
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
提出了用于在远程服务器计算机上处理断点的系统和方法。在一个实施例中,在目标程序中设置断点。这包括以在断点触发时不阻塞目标程序的执行的方式设置断点。另外,可执行指令被包括在断点的目标程序中的位置处,以生成有关目标程序的调试器信息的快照。然后将快照信息提供给程序员的调试器以用于调试目的。此外,在设置断点时,程序员将断点调节为仅在满足与逻辑执行上下文相对应的一组条件标准时才触发。
Description
背景技术
调试器是一种计算机可执行工具,其使程序员能够监视目标程序的执行。通常,调试器可以使程序能够根据程序员的编码指令/代码逐步运行(称为步进),以在遇到断点时停止在特定的代码行处,并且可以使变量的值能够在程序处于断点处时或在程序正在运行时被检查(检查)。除了观察和报告目标程序的状态外,一些调试器还可以允许程序员在程序处于执行中(尽管通常停止在断点处)时修改目标程序的状态数据。一些调试器可以显示和导航执行堆栈,从而使程序员能够在步进时跳过部分代码,或者从可能的任意代码行重新开始执行。调试器的其他功能包括同时列出和调试多个线程,启用命中计数等。
传统上,尽管不是排他性地,调试器在与目标程序相同的计算机上执行。然而,当目标代码是服务器侧代码(在远程计算机上操作的代码)时,则无法采用传统的调试器。实际上,调试服务器侧代码是一个复杂而困难的挑战。其原因很多。如前所指示,服务器侧代码通常驻留在远程计算机上,而不是在程序员的调试器也正在执行的程序员的计算机上。这种远程性会产生与执行代码和当前程序状态信息的实际调查有关的调试问题。另外,服务器侧代码通常操作为服务多个用户和/或请求的过程。典型的调试涉及在目标程序内设置断点,即在程序中在有效执行将转移到调试器时将挂起执行的点,从而允许程序员经由调试器调查程序执行状态。然而,当目标代码和调试器正在远程执行时,两者(目标程序和调试器)之间的这种紧密交互充其量是极富挑战性的。
此外,对于服务器侧代码的情况,在任何时刻,服务器侧代码内的任何给定功能或模块(即服务器侧目标程序)可能正在来自多方的多个线程上执行。当断点被“命中”时,仅挂起服务器侧目标程序的执行(该程序被设计为服务多个用户),将致使所有用户暂停——这是非常不希望的结果。而且,单个断点可能会响应于各种执行条件而被多方命中。从字面上看,每次在“负载下”操作的服务器侧程序中遇到断点时生成断点数据(即,同时执行来自多方的多个线程的相同的服务器侧代码)会生成不可理解的调试数据数理逻辑困境,其需要花费大量精力才能根据哪个断点数据集属于哪个逻辑执行上下文来进行整理。简而言之,当将传统的调试技术应用于在负载下执行的服务器侧目标程序时,结果需要大量时间进行整理,并且目标程序的执行停止。
尽管调试服务器侧代码面临许多挑战,但能够在负载下有效且高效地调试服务器侧代码对于操作为服务器侧服务的高质量、无错误的可执行代码而言是无价的。
发明内容
提供以下发明内容以简化的形式介绍一些概念,这些概念将在下面的详细描述中进一步描述。本发明内容既不旨在标识所要求保护的主题内容的关键特征或必要特征,也不旨在用于限制所要求保护的主题内容的范围。
根据所公开主题内容的各方面,提出了用于在位于远程服务器计算机上处理断点的系统和方法。在一个实施例中,在目标程序中设置断点,该目标程序在远程计算设备上执行。设置断点包括以断点触发时不阻塞目标程序的执行的方式设置之。另外,可执行指令被包括在断点的目标程序中的位置处,以生成有关目标程序的调试器信息的快照。然后将快照信息提供给程序员的调试器以用于调试目的。此外,在设置断点时,程序员将断点调节为仅在满足一组条件标准时才触发。
根据所公开主题内容的附加方面,提出了一种用于以非阻碍的方式处理在执行目标程序时遇到的断点的方法。从计算机用户/程序员接收断点信息以在目标程序中设置第一断点,其中目标在远离程序员的计算设备上执行。在与所接收到的断点相对应的执行位置处设置第一断点。设置第一断点包括以在触发断点时不阻塞目标程序的执行的方式设置断点,并且还包括将可执行指令并入目标程序中以在第一断点触发时生成有关目标程序的调试器信息的快照。此后,接收与第一断点的触发有关的调试信息的快照,并将调试器信息的快照提供给计算机用户/程序员。
根据所公开主题内容的其他方面,提出了一种承载计算机可执行指令的计算机可读介质,用于执行用于处理断点的方法。在执行目标程序时,将测试是否满足与所遇到的断点相关联的一组条件。在确定满足一组条件时,执行用于生成目标程序的调试信息的快照的指令。此外,对快照进行处理以用于调试目的。
根据所公开主题内容的附加的方面,提出了一种用于处理断点请求的计算机设备。该计算机设备包括处理器和存储器,其中该处理器执行作为该计算设备的一个或多个附加可执行组件的一部分或与之结合而被存储在该存储器中的指令。在执行中,这些组件将计算机设备配置为从计算机用户接收与可执行目标程序中的执行位置有关的断点信息,以在目标程序中设置第一断点。在目标程序的对应执行点处设置第一断点,包括以在触发第一断点时不阻塞目标程序的执行的方式设置第一断点,并且在目标程序中包括可执行指令以在第一次断点触发时生成有关目标程序的调试器信息的快照。随后,接收与第一断点的触发有关的调试信息的快照并将其提供给计算机用户。
附图说明
当结合以下附图并参考以下描述可以更好地理解所公开主题内容的前述方面和许多附带优点时,它们将变得更加容易理解,在附图中:
图1是图示出适合于实现所公开主题内容的各方面的示例性网络环境的框图;
图2是用于在目标程序中设置根据逻辑执行上下文信息调节的断点的示例性例程200的流程图;
图3是图示出关于在目标程序的执行期间遇到根据逻辑执行上下文信息调节的断点的示例性例程300的流程图;
图4是图示出用指令编码的示例性计算机可读介质的框图;和
图5是适合于实现所公开主题内容的各方面的示例性服务器侧计算机500的框图。
具体实施方式
为了清楚和定义起见,本文档中使用的术语“示例性”应被解释为用作某物的说明或示例,而不应被解释为该物的理想说明或主要说明。在风格上,当“(多个)”(s)在单词或术语之后时,其含义应被解释为指示该单词或术语的单数或复数形式,这取决于是否存在该术语/项目的一个实例或者是否存在该术语/项目的一个或多个实例。例如,术语“(多个)用户”应被解释为一个或多个用户。
通过进一步定义,“调试器代码”(旨在由调试器使用的目标程序的版本)包括符号和数据、调试例程等,以促进调试器执行。通常,调试器代码不是优化的代码。相比之下,“生产代码”指的是目标程序的可执行版本,该版本除去了调试器工件(符号、表格、调试器例程等),并且旨在用于实际使用。因此,服务器侧生产代码是旨在用作服务器侧程序的生产代码——服务器侧程序是在远程计算机上执行并且通过网络可访问的目标程序。
传统上,断点指的是程序中中断或挂起程序的执行的位置。这是一个阻塞断点。换言之,目标程序以其逻辑流程执行,直到遇到断点为止,在该点处目标程序的执行被阻塞/挂起,并将控制权递交给程序员的调试器。然而,通过定义以及出于本文档的目的,除非在文档中进行了特殊和其他限定,否则术语“断点”是指非阻塞断点,即目标程序内将采取调试器动作的执行位置(在执行期间遇到该位置后)。如下面将更详细讨论的,该调试器动作是在执行到达断点位置的时刻生成程序信息的快照。另外,“条件断点”是在满足与断点相关联的条件标准时触发的断点(即,生成快照)。
关于术语“非阻塞”,当其在本文中用于描述断点时,在所公开主题内容的一个实施例中,出于生成程序数据/信息的快照的目的,从目标程序临时重定向执行线程。快照完成后,将从重定向的点自动恢复执行。在所公开主题内容的备选实施例中,在遇到断点时,出于生成程序信息的快照的目的,该线程的执行被暂时挂起,此后从挂起的点自动恢复线程的执行。在两个实施例中,程序信息的快照的生成都是非阻塞的,因为在外部输入(例如,程序员的恢复指令)待定时,执行不会停止。此外,在大多数实现中,生成程序信息的快照所消耗的时间量预计为10毫秒或更短的时间,使得生成快照所需的额外时间很大程度上不会被察觉和注意到。关于调试服务器侧目标程序的术语“非侵入性”意指目标程序的执行堆栈和/或存储器堆栈的状态不受调试器活动的影响——特别是在生成目标程序的数据的快照和执行状态方面。
术语“断点的原子集合”是指相关的断点集合,其在相同的条件适用于并触发原子集合内的每个断点的意义上是相关的。因此,如果程序员要将断点集合应用于目标程序,则触发该原子集合内的第一断点的条件将与触发该原子集合内的第二断点的条件相同。
关于目标程序的执行,本领域技术人员将理解,目标程序的执行的第一线程可能致使一个或多个附加线程执行。此外,对于给定的目标程序,可以发生在第一执行线程和第二执行线程之间的链接,其中第一逻辑执行线程终止,但目标程序的逻辑执行在第二线程中继续。因此,通过定义和出于所公开主题内容的目的,因为用户执行目标程序可能导致发生多个执行线程——包括同时执行,所以这些线程的集体执行应被视为“逻辑执行上下文”,或更简单地说,是“执行上下文”。另外,逻辑执行上下文与用户通过“上下文标识符”致使执行有关。在各种实施例中,上下文标识符可以对应于在访问远程执行的服务/程序时生成的会话标识符。当然,可以将任何数目的其他标识符用作上下文标识符,通过例示而非限制,诸如用户名、通用资源标识符(URI)等。
服务器侧调试的最新进展允许对服务器侧生产代码进行非阻塞、非侵入式调试。不幸的是,尽管调试服务器侧生产代码可以是非阻塞且非侵入性的,但在多方负载下使用时,在服务器侧目标程序内设置断点仍生成调试数据的近乎难以理解的困境,这需要花费大量精力来进行整理和处理。根据所公开主题内容的各方面,并且如将在下面更详细地讨论的,在目标程序中提供条件断点允许关于单个逻辑执行内容提取调试快照。如将容易理解的那样,这允许生产代码在负载下操作并生成关于单个逻辑执行上下文的调试快照。
转到附图,图1是图示出适合于实现所公开主题内容的各方面的示例性网络环境100的框图。该示例性网络环境包括通过网络110连接到服务器计算机120的一个或多个用户计算机,诸如用户计算机102。通过例示,利用用户计算机102的程序员/用户101关于在服务器计算机120上操作的服务器侧程序122而执行调试器104。如上所提及,服务器侧程序,即目标程序,操作为生产代码并且也可以在负载下操作。
如下面将另外讨论的,调试模块124也在服务器计算机120上操作。在操作中,程序员101向调试模块124发布断点集合126,断点的原子集合。断点的原子集合中的每个断点都与条件相关联。此条件在执行期间被满足后,将致使断点“激发”,如下所述。
根据所公开主题内容的各方面,与断点的原子集合相关联的条件可以包括各种因素,包括(通过例示而非限制)请求方(即,程序员101)的域、特定的上下文标识符、致使执行服务器侧程序的请求类型、有关请求方的人口统计信息、有关服务器侧程序和/或服务器计算机的负载信息等。
就其本身而言,调试器模块124接收断点的原子集合,标识目标服务器侧程序122内的各种代码段,并且对于每个断点,“设置”条件断点,每个断点响应于相同条件被调节。根据断点的性质并且如本领域技术人员将理解的那样,当目标程序的执行遇到对应的执行点时,目标服务器侧程序触发断点。不同于挂起目标程序的执行以使程序员采取所期望的任何调试动作的典型断点,根据所公开主题内容的各方面,当遇到断点并且满足针对该断点的条件时,生成程序信息的快照并继续执行目标程序。程序信息的快照可以包括描述值和变量以及它们的当前状态的堆栈/堆信息、描述导致断点位置的当前执行路径的程序堆栈信息等。尽管生成程序信息的快照肯定会涉及处理器时间,但是典型的处理时间通常为10毫秒或更短,这在大多数情况下并且大多数人是无法察觉的。
在生成快照并且继续执行目标程序之后,将诸如快照128之类的快照传送回调试器104,以便程序员可以在执行任何调试任务时利用该信息。有利地,仅在满足断点的条件、特别是执行上下文条件时才触发断点。这不仅将断点的触发限制为特定方(或满足执行上下文条件的特定方集合),而且对于不满足条件标准的那些逻辑上下文,对目标程序的执行的处理影响也最小。
现在转到图2,图2是用于在目标程序中设置根据逻辑执行上下文信息来调节的断点的示例性例程200的流程图。从框202处开始,接收关于目标程序的断点的原子集合,诸如原子集合126。除了简单地标识目标程序中的断点位置之外,所接收到的信息还包括条件信息,即将触发原子集合的断点所响应于的条件。
在框204处,迭代循环开始迭代遍历原子集合126的每个断点。因此,在框206处,标识包含当前迭代断点的断点位置的目标程序的代码块。通过定义,代码块是指这样的代码部分:该代码部分可以被视为一个整体而使得可以用备选配置的版本替换整体而不影响整个目标程序的其他方面。目标程序的代码块的示例包括功能或方法。整个模块也可以被视为代码块。当然,将最小的代码集标识为可以被也不会影响目标程序中的其他代码块的备选配置的版本替换的代码块是有利的。
在框208处,在没有代码优化的情况下重新编译与所标识的代码块相对应的代码。本领域技术人员将理解,代码优化通常导致重新布置的可执行代码,尽管该代码总体上表示代码块的期望结果(如编程源代码中所述),但无法很好地映射到编程源代码的各个行/元素。通过例示而非限制,去除优化包括本机编译的抑制(特别是当以IL或中间形式生成目标程序以供执行引擎或公共语言运行时(CLR)引擎执行/解译时)、在代码块内强制包含所谓的“尾部调用”(因为尾部调用通常是在代码块外进行优化的)、内联表达式的抑制、子表达式消除的抑制等。当然,如本领域技术人员还将理解的那样,断点通常与编程代码行相关联,并被映射到目标程序内的实际未优化的可执行代码。因此,去除优化还意味着排序信息和/或序列点(即,可以使源代码行与目标程序中的可执行指令集合相关的信息)被包括在重新编译的目标程序中。
关于编译(多个)所标识的代码块并根据所公开主题内容的各方面,在第一实施例中,重新编译整个目标程序,其中针对将添加断点的那些所标识的代码块(包括条件代码和对快照生成器的调用)关闭优化。备选地,可以利用编译器仅重新编译那些所标识的代码块(没有优化)并且绑定到目标程序的其余部分。在一个实施例中,可以利用即时(just-in-time)编译器来重新编译所有或一些目标程序,包括(多个)所标识的代码块。
在框210处,标识与当前迭代的断点相对应的执行点/位置。在框212处,将用于生成程序/调试信息的快照的代码插入所标识的位置处,即与当前迭代的断点相对应的执行位置。根据所公开主题内容的各种实施例,该插入的代码可以对应于一组可执行指令,该组可执行指令捕获期望的程序信息并将所捕获的信息存储为与当前断点相对应的快照。备选地,插入的代码可以对应于对目标程序内的另一代码块的函数/例程调用,该函数/例程调用执行快照生成并返回以执行重新编译的代码块的附加指令。作为另一备选方案,可以进行对另一程序或服务的函数/例程调用。与所实现的实际机制无关,在框212处,将用于生成快照的代码插入到重新编译的代码块中/或作为其一部分。
除了插入快照生成代码之外,在框214处,根据与断点的原子集合相关联的条件信息来调节快照生成代码。更特别地,根据关于逻辑执行上下文的信息来调节断点。如上所指示的,调节断点可以包括根据上下文标识符、用户标识符或URI、人口统计信息、程序相关信息、域信息等中的一个或多个来调节快照生成代码的执行。当然,除了根据执行上下文来调节断点之外,还可以应用与该断点有关的其他调节因素。调节快照生成代码意味着仅在满足与断点相关联的条件标准(并且尤其是执行上下文标准)时才执行快照生成代码。
将理解,重新编译代码块可以包括快照生成代码的插入以及快照生成代码的调节。相应地,尽管例程200看似图示出了在代码块的重新编译之后实现了快照生成代码的插入,并且在代码块的重新编译之后调节了快照生成代码,但是各个步骤的这种逐项列举只是为了例示和描述的目的,并且不应被视为对所公开主题内容的限制。实际上,通常尽管不是唯一的,但是代码块的重新编译将包括插入快照生成器代码以及实现用于调用快照生成代码的条件的代码。
在框216处,在重新编译了包含当前迭代的断点的断点位置的代码块之后,如果还有要处理的断点的原子集合的附加断点,则例程200再次返回到框204,在其中,选择迭代循环中的下一断点并重复上述步骤。备选地,当没有要处理的附加断点时,例程200终止。
尽管上面对例程200的讨论通常涉及在遇到断点时(在满足执行上下文条件时)程序员/用户在目标程序中建立断点、执行目标程序并生成调试器信息的快照,但是应当理解,上述原理可以类似地应用于调试概念“步进”,即根据源代码的每一行逐行地通过执行目标程序来步进。实际上,可以重新编译代码块,使得为源代码的每一行生成快照或某种其他形式的跟踪,每行都根据执行上下文数据进行调节。此外,还可以根据是否期望步进来调节每个断点。
关于执行期间的断点的触发,现在对图3进行参考。实际上,图3是图示出关于在目标程序的执行期间遇到根据逻辑执行上下文信息来调节的断点的示例性例程300的流程图。该例程在目标程序的执行过程中“开始”,尤其是在遇到断点时。尽管典型的“断点”可能会致使目标程序的执行的挂起,但是如上所指示的,所公开主题内容的断点是非阻塞的,使得执行不会暂停。
在框302处,在诸如目标程序122之类的目标程序的继续执行中,实施测试以确定与当前断点相关联的条件是否得到满足。如上面所讨论的,这些条件包括确定关于逻辑执行上下文的条件是否得到满足。另外,可以变化和/或组合以形成期望的标准集合,响应于该标准集合生成调试/程序信息的快照。在框304处,如果满足与所遇到的断点相关联的条件,则处理继续到框306。备选地,如果不满足与断点相关联的条件,则例程300“终止”。当然,如已经建议的,终止该例程300仅暗示目标程序的执行继续,而不生成程序信息的快照。
关于测试是否满足与断点相关联的条件,可以是:服务器侧目标程序可以被许多不同的用户调用,其中一些将具有必要的属性以满足最初利用断点的原子集合的断点建立的条件。虽然最初建立了潜在的多方可以满足的条件执行上下文标准,但是一旦最初触发了原子集合的任何一个断点,则将“调谐”原子集合的所有断点以仅在触发任何断点的第一用户的逻辑执行上下文上触发。下面关于框308-框312描述了调谐断点的原子集合的断点以仅由第一遇到的执行上下文来触发。框302/框304所陈述的“测试”应被视为测试原子集合的任何断点的初始触发以及断点的原子集合内的任何断点的后续触发。
如果满足关于所遇到的断点的条件,则在框306处测试这是否是第一次触发/遇到了断点的原子集合中的任何断点。在框308处,如果这是第一次触发/遇到了断点的原子集合中的任何断点,则处理进行到框310,如下所述。备选地,处理在框314处继续。
根据所公开主题内容的各种实施例,在框310处,因为这是第一次遇到断点的原子集合的任何断点,所以获得了逻辑执行上下文的上下文标识符。在一个实施例中,利用逻辑执行上下文的上下文标识符允许唯一标识逻辑执行上下文,而排除其他逻辑执行上下文,同时允许标识在执行目标程序的过程中可能发生的多个线程和/或过程。当然,逻辑执行上下文的上下文标识符是一个实施例的示例,通过该实施例可以标识逻辑执行上下文,而排除其他逻辑上下文,并且预期可以备选地使用其他方式和/或标识符。
在框312处,根据上下文标识符(或可以利用的其他标识机制)来调谐与断点的原子集合的所有断点有关的条件。在调谐时(即,更新将触发断点的原子集合的断点所响应于的条件时),原子集合的断点确保一旦合适的逻辑执行上下文被标识(即满足与断点的原子集合相关联的初始条件),则程序员提交的(原子集合中的)断点都会在相同条件下触发。
在框314处,并且在执行目标程序的过程中,执行与快照生成有关的代码,导致在当前断点处的程序的快照。在框316处,处理快照,其可以包括发起异步线程以存储快照并将其转发给程序员101。此后,例程300“终止”,在这种情况下,这意味着目标程序在其正常过程中继续其执行。
关于上述例程200和300以及本文中可以描述的其他过程,尽管针对离散步骤来表达这些例程/过程,但是这些步骤应被视为本质上是逻辑的并且可以对应于或可以不对应于给定实现的任何特定的实际和/或离散执行步骤。同样,除非另有说明,否则在各种例程和过程中呈现这些步骤的顺序不应被解释为可以执行这些步骤的唯一顺序。此外,在一些实例中,这些步骤中的一些可以被组合和/或省略。本领域技术人员将认识到,步骤的逻辑表示对于执行所要求保护主题内容的各方面是具有充分的指导意义的,而与在其中对逻辑指令/步骤进行编码的任何特定开发或编码语言无关。
当然,尽管例程和/或过程包括所公开主题内容的各种新颖特征,但是在这些例程中执行所阐述的主题内容时,还可以包括并执行其他步骤(未列出)。本领域技术人员将理解,这些例程的逻辑步骤可以组合在一起或由多个步骤组成。可以并行或串行地执行上述例程的步骤。通常,但并非排他地,各种例程的功能性被体现在在计算设备(诸如下面关于图6描述的计算设备)的一个或多个处理器上执行的软件(例如,应用、系统服务、库等)中。另外,在各种实施例中,各种例程中的全部或一些例程也可以被体现在可执行硬件模块中,该可执行硬件模块包括但不限于计算机系统上的片上系统(SoC)、编解码器(codec)、专用处理器和/或逻辑电路等。
如上所述,这些例程和/或过程通常体现在可执行代码块和/或模块中,该模块和/或模块包括例程、函数、循环结构、选择器和交换器(switch)诸如if-then和if-then-else语句、赋值、算术运算等,其在执行中将计算设备配置为根据例程/过程进行操作。然而,每个例程在可执行语句中的确切实现都基于各种实现配置和决策,包括编程语言、编译器、目标处理器、操作环境以及链接或绑定操作。本领域技术人员将容易理解,可以以许多方式来实现在这些例程中标识的逻辑步骤,并且因此,以上阐述的逻辑描述足以实现类似的结果。
虽然以应用(也称为计算机程序),app(小型的、通常为单一目的或狭窄目的的应用)和/或方法内体现的例程来表达所公开主题内容的许多新颖方面,但这些方面也可以被体现为由作为制品的计算机可读介质(也称为计算机可读存储介质)存储的计算机可执行指令。如本领域技术人员将认识到的,计算机可读介质可以托管、存储和/或再现计算机可执行指令和数据,以用于稍后取回和/或执行。当被托管或存储在计算机可读存储设备上的计算机可执行指令由计算设备的处理器执行时,其执行致使、配置和/或调配正在执行的计算设备以执行各种步骤、方法和/或功能性,包括上面关于各种图示的例程和/或过程所描述的那些步骤、方法和例程。计算机可读介质的示例包括但不限于:光学存储介质,诸如蓝光盘、数字视频盘(DVD)、压缩盘(CD)、光盘盒等;磁存储介质,包括硬盘驱动器、软盘、磁带等;存储器存储设备,诸如随机存取存储器(RAM)、只读存储器(ROM)、存储器卡、拇指驱动器等;云存储装置(即在线存储服务);等等。为了本公开的目的,尽管计算机可读介质可以再现和/或致使将计算机可执行指令和数据递送给计算设备,以用于由一个或多个处理器经由各种传输手段和介质(包括载波和/或传播的信号)来执行,但是计算机可读介质明确排除了载波和/或传播的信号。
关于计算机可读介质,图4是图示出用指令编码的示例性计算机可读介质的框图,指令诸如是用于在目标程序中设置断点或在执行目标程序期间遇到断点的指令,如上所述。更特别地,实现400包括计算机可读介质408(例如,CD-R、DVD-R或硬盘驱动器的盘片),在其上编码有计算机可读数据406。该计算机可读数据406依次包括一组计算机指令404,其被配置为根据本文阐述的一个或多个原理进行操作。在一个这样的实施例402中,处理器可执行指令404可以被配置为执行一种方法,诸如示例性方法100或200中的至少一些。在另一个这样的实施例中,处理器可执行指令404可以被配置为在计算设备上实现系统,诸如系统500的示例性可执行组件中的至少一些,如下所述。本领域普通技术人员可以设计出许多这样的计算机可读介质,这些计算机可读介质被配置为根据本文提出的技术进行操作。
现在转到图5,图5是适合于实现所公开主题内容的各方面的示例性服务器侧计算机500的框图。特别地,服务器侧计算机500被配置为在设置目标程序中的断点时以及在向程序员提供关于目标程序中各种所遇到的断点的快照时与程序员/用户交互,如关于图1所描述的。示例服务器侧计算机500包括诸如处理器502之类的一个或多个处理器(或处理单元),并且还包括至少一个存储器504。处理器502和存储器504以及其他组件通过系统总线510互连。
如本领域技术人员将理解的,存储器504通常(但不总是)包括易失性存储器506和非易失性存储器508两者。只要存储器被供电,易失性存储器506就保留或存储信息。相比之下,即使当电源不可用时,非易失性存储器508也能够存储(或保持)信息。一般而言,RAM和CPU高速缓存存储器是易失性存储器6506的示例,而ROM、固态存储器设备、存储器存储设备和/或存储器卡是非易失性存储器508的示例。
如本领域技术人员还将理解的那样,处理器502在执行各种功能——执行断点的处理、代码块的重新编译等时执行从存储器504(和/或从计算机可读介质,诸如图4的计算机可读介质400)取回的指令。处理器502可以包括多个可用处理器中的任何处理器,诸如单处理器、多处理器、单核单元和多核单元。
此外,所图示的服务器侧计算机500包括网络通信组件512,该组件用于通过诸如图1的网络110之类的计算机网络将该计算设备与其他设备和/或服务互连。网络通信组件512(有时被称为网络接口卡或NIC)经由物理/有形(例如,有线、光学等)连接、无线连接或两者而使用一种或多种通信协议在网络上进行通信。如本领域技术人员将容易理解的那样,诸如网络通信组件512之类的网络通信组件通常包括通过传输介质(即网络)传送和接收数字信号和/或模拟信号的硬件和/或固件组件(并且还可以包括或包含可执行软件组件)。
除了以上标识的各种组件之外,示例性服务器侧计算机还包括操作系统514,其为服务器侧计算机提供系统软件,该系统软件管理计算机的硬件和软件资源二者。如本领域技术人员将理解的那样,操作系统还提供了一组公共服务,以用于在服务器侧计算机500上执行计算机程序和其他可执行模块。
服务器侧计算机500中还包括的是用户调试器接口520。在执行中,在接收断点、在目标程序中设置这些断点、以及将生成的快照(由于触发了各种断点而产生的结果)传送回程序员的调试器以进行调试时,用户调试器接口520与用户/程序员(或更具体地,在程序员的指导下与用户计算设备上执行的调试器)交互。
结合用户调试器接口520,在执行中的程序编译器522被用来重新编译目标程序,并且具体地重新编译包含断点位置的所标识的代码块,如上所述。此外,快照生成器524在执行中基于目标程序在所遇到的断点处的执行状态来捕获程序/调试器信息。当然,用于生成快照的代码也可以被包含在目标程序中。因此,将快照生成器524包括为服务器侧计算机500的一部分应被视为非限制性实施例。
此外,服务器侧计算机500可以可选地包括一个或多个可执行应用,诸如目标程序526。而且,服务器侧计算机500包括数据存储库528,可以在其中存储所生成的快照,诸如快照530。
关于示例性服务器侧计算机500的各种组件,本领域技术人员将理解,这些组件中的许多可以被实现为存储在计算设备的存储器中的可执行软件模块,被实现为可执行硬件模块和/或组件(包括SoC-片上系统)或其组合。实际上,组件可以可以根据各种可执行实施例来实现,包括执行本文档中描述的过程的一个或多个逻辑元件的可执行软件模块,或者组件可以被实现为包括执行本文档中描述的过程的一个或多个逻辑元件的可执行逻辑的硬件和/或固件组件。这些可执行硬件组件的示例包括(通过例示而非限制):ROM(只读存储器)设备、可编程逻辑阵列(PLA)设备、PROM(可编程只读存储器)设备、EPROM(可擦除PROM)设备等等,其每一个都可以用指令和/或逻辑来编码,这些指令和/或逻辑在执行时执行本文所述的功能和特征。
此外,在某些实施例中,示例性服务器侧计算机500的各个组件中的每一个可以被实现为独立的、协作的过程或设备,其与一个或多个计算机系统和/或计算设备结合或在一个或多个计算机系统和/或计算设备上操作。当然,还应该理解,上述各种组件应被视为用于执行各种所描述功能的逻辑组件。如本领域技术人员将容易理解的,逻辑组件和/或子系统可以以一对一的方式直接或可以不以一对一的方式直接对应于实际的离散组件。在实际实施例中,如本领域中已知的,每个计算设备的各个组件可以被组合在一起或分布在多个实际组件上和/或实现为计算机网络上的协作过程。
尽管已经描述了所公开主题内容的各种新颖方面,但是应当理解,这些方面是示例性的并且不应被解释为限制性的。在不脱离所公开主题内容的范围的情况下,可以对各个方面进行变化和变更。
Claims (15)
1.一种用于以非阻碍的方式处理遇到的断点的计算机实现的方法,所述方法包括:
从计算机用户接收与在计算设备上执行的目标程序中的执行位置有关的断点信息,以设置第一断点;
在所述执行位置处设置所述第一断点,其中在所述执行位置处设置所述第一断点包括:
以在触发所述第一断点时不阻塞所述目标程序的执行的方式设置所述第一断点;以及
在所述目标程序中包括可执行指令,以在所述第一断点触发时生成有关所述目标程序的调试器信息的快照;接收与所述第一断点的所述触发有关的调试信息的快照;以及
向所述计算机用户提供所述调试信息的快照。
2.根据权利要求1所述的计算机实现的方法,其中:
来自所述计算机用户的所述断点信息包括标识一个或多个执行上下文条件的条件信息,所述第一断点将响应于所述一个或多个执行上下文条件而触发;并且
在所述执行位置处设置所述第一断点还包括:设置所述第一断点以在所述目标程序的执行期间响应于在所述执行位置处满足所述条件信息而触发。
3.根据权利要求2所述的计算机实现的方法,其中所述断点信息标识要在所述目标程序中被设置的断点的原子集合,所述断点的原子集合包括所述第一断点,并且其中所述断点的原子集合中的每个断点对应于所述目标程序中的不同执行位置。
4.根据权利要求3所述的计算机实现的方法,其中标识所述第一断点将响应于其而触发的一个或多个条件的所述条件信息是针对所述断点的原子集合中的每个断点的所述条件信息。
5.根据权利要求4所述的计算机实现的方法,还包括:
将所述断点的原子集合中的每个断点设置在所述断点的其对应执行位置处,并且其中将每个断点设置在所述对应执行位置处包括:
以在触发所述断点时不阻塞所述目标程序的执行的方式设置每个断点;以及
在所述目标程序中包括指令,以在所述断点触发时生成有关所述目标程序的调试器信息的快照。
6.根据权利要求5所述的计算机实现的方法,其中设置所述断点的原子集合的每个断点还包括:设置每个断点以在所述目标程序的执行期间响应于在其对应执行点处满足所述条件信息而触发。
7.根据权利要求5所述的计算机实现的方法,还包括重新编译所述目标程序以抑制所述可执行代码中的优化。
8.根据权利要求7所述的计算机实现的方法,其中重新编译所述目标程序以抑制所述可执行代码中的优化包括:
标识与所述目标程序中的每个断点的所述执行位置相对应的代码块;以及
重新编译所述目标程序以抑制所标识的所述代码块中的优化。
9.一种承载计算机可执行指令的计算机可读介质,所述计算机可执行指令当在至少包括处理器的计算机上被执行时,执行关于权利要求1至8所述的方法中的任何一个或多个方法。
10.一种用于处理断点请求的计算机设备,所述系统包括处理器和存储器,其中所述处理器执行作为一个或多个附加可执行组件的一部分或与一个或多个附加可执行组件结合而被存储在所述存储器中的指令,所述指令在执行时配置所述计算机设备以:
从计算机用户接收与在执行的目标程序中的执行位置有关的断点信息,以在所述目标程序中设置第一断点;
在所述执行位置处设置所述第一断点,其中在所述执行位置处设置所述第一断点包括:
以在触发所述第一断点时不阻塞所述目标程序的执行的方式设置所述第一断点;以及
在所述目标程序中包括可执行指令,以在所述第一断点触发时生成有关所述目标程序的调试器信息的快照;接收与所述第一断点的所述触发有关的调试信息的快照;以及向所述计算机用户提供所述调试信息的快照。
11.根据权利要求10所述的计算机设备,其中:
来自所述计算机用户的所述断点信息包括标识一组执行上下文条件的条件信息,所述第一断点在执行中将响应于所述一组执行上下文条件而触发;并且
在所述执行位置处设置所述第一断点还包括:设置所述第一断点以在所述目标程序的执行期间响应于在所述执行位置处满足所述条件信息而触发。
12.根据权利要求11所述的计算机设备,其中所述断点信息标识要在所述目标程序中被设置的断点的原子集合,所述断点的原子集合包括所述第一断点,并且其中所述断点的原子集合中的每个断点对应于所述目标程序中的不同执行位置。
13.根据权利要求12所述的计算机设备,其中所述计算设备还被配置为:
将所述断点的原子集合中的每个断点设置在所述断点的其对应执行位置处,并且其中将每个断点设置在所述对应执行位置处包括:
以在触发所述断点时不阻塞所述目标程序的执行的方式设置每个断点;以及
在所述目标程序中包括指令,以在所述断点触发时生成有关所述目标程序的调试器信息的快照。
14.根据权利要求13所述的计算机设备,其中设置所述断点的原子集合中的每个断点还包括:设置每个断点以在所述目标程序的执行期间响应于在其对应执行点处满足所述条件信息而触发。
15.根据权利要求14所述的计算机设备,其中重新编译所述目标程序以抑制所述可执行代码中的优化包括:
标识与所述目标程序中的每个断点的所述执行位置相对应的代码块;以及
重新编译所述目标程序以抑制所标识的所述代码块中的优化。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/586,593 | 2017-05-04 | ||
US15/586,593 US10613964B2 (en) | 2017-05-04 | 2017-05-04 | Conditional debugging of server-side production code |
PCT/US2018/026775 WO2018204032A1 (en) | 2017-05-04 | 2018-04-10 | Conditional debugging of server-side production code |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110603527A true CN110603527A (zh) | 2019-12-20 |
CN110603527B CN110603527B (zh) | 2023-03-31 |
Family
ID=62067871
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880029170.9A Active CN110603527B (zh) | 2017-05-04 | 2018-04-10 | 用于服务器侧生产代码的条件调试的方法、系统和设备 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10613964B2 (zh) |
EP (1) | EP3619611A1 (zh) |
CN (1) | CN110603527B (zh) |
WO (1) | WO2018204032A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111338961A (zh) * | 2020-02-28 | 2020-06-26 | 北京小米移动软件有限公司 | 应用调试方法及装置、电子设备及存储介质 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106354566B (zh) * | 2015-07-14 | 2019-11-29 | 华为技术有限公司 | 一种命令处理的方法以及服务器 |
CN110399292A (zh) * | 2019-06-21 | 2019-11-01 | 平安普惠企业管理有限公司 | 记录代码运行轨迹方法、装置、计算机设备和存储介质 |
CN111061623B (zh) * | 2019-07-12 | 2023-08-22 | 华控清交信息科技(北京)有限公司 | 调试程序的方法、装置、中台服务器、存储介质及系统 |
US11153321B2 (en) | 2019-07-26 | 2021-10-19 | Microsoft Technology Licensing, Llc | Secure investigations platform |
US11630684B2 (en) | 2019-07-26 | 2023-04-18 | Microsoft Technology Licensing, Llc | Secure incident investigation workspace generation and investigation control |
US11212300B2 (en) | 2019-07-26 | 2021-12-28 | Microsoft Technology Licensing, Llc | Secure incident investigation event capture |
US11983094B2 (en) | 2019-12-05 | 2024-05-14 | Microsoft Technology Licensing, Llc | Software diagnostic context selection and use |
CN112988283A (zh) * | 2021-05-12 | 2021-06-18 | 鹏城实验室 | 截图获得方法、装置、终端设备以及存储介质 |
CN115543858A (zh) * | 2022-12-02 | 2022-12-30 | 北京大学 | 调试代码文件的方法及装置、非易失性存储介质 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2246270A1 (en) * | 1998-09-01 | 2000-03-01 | Ibm Canada Limited - Ibm Canada Limitee | Debugging multiple related processes simultaneously |
US6249907B1 (en) * | 1998-03-24 | 2001-06-19 | International Business Machines Corporation | Method system and article of manufacture for debugging a computer program by encoding user specified breakpoint types at multiple locations in the computer program |
US6681384B1 (en) * | 1999-12-23 | 2004-01-20 | International Business Machines Corporation | Multi-threaded break-point |
US6795963B1 (en) * | 1999-11-12 | 2004-09-21 | International Business Machines Corporation | Method and system for optimizing systems with enhanced debugging information |
US20050010912A1 (en) * | 2003-07-10 | 2005-01-13 | International Business Machines Corporation | Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability |
US20050066314A1 (en) * | 2003-09-18 | 2005-03-24 | International Business Machines Corporation | Managing breakpoints |
US20050289396A1 (en) * | 2004-06-25 | 2005-12-29 | Hooper Donald F | Conditional breakpoint using breakpoint function and breakpoint command |
US7665079B1 (en) * | 1999-11-17 | 2010-02-16 | International Business Machines Corporation | Program execution method using an optimizing just-in-time compiler |
JP2010287101A (ja) * | 2009-06-12 | 2010-12-24 | Oki Semiconductor Co Ltd | ソフトウエアデバッグ装置及び方法 |
US20120110552A1 (en) * | 2010-10-28 | 2012-05-03 | International Business Machines Corporation | Protecting breakpoints in a software debugger |
US20120151452A1 (en) * | 2010-12-14 | 2012-06-14 | Microsoft Corporation | Remote debugging of server side code without blocking or high-level privileges |
US20130152054A1 (en) * | 2011-12-13 | 2013-06-13 | International Business Machines Corporation | Setting breakpoints in optimized instructions |
US20150143344A1 (en) * | 2013-11-18 | 2015-05-21 | Microsoft Corporation | Diagnosing Production Applications |
WO2015079291A1 (en) * | 2013-11-29 | 2015-06-04 | Freescale Semiconductor, Inc. | Code injection for conditional breakpoints |
US20160124835A1 (en) * | 2014-10-29 | 2016-05-05 | Microsoft Corporation | Diagnostic workflow for production debugging |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6553565B2 (en) | 1999-04-23 | 2003-04-22 | Sun Microsystems, Inc | Method and apparatus for debugging optimized code |
US6968546B2 (en) | 2001-03-30 | 2005-11-22 | Intel Corporation | Debugging support using dynamic re-compilation |
US7134115B2 (en) | 2002-02-07 | 2006-11-07 | Matsushita Electric Industrial Co., Ltd. | Apparatus, method, and program for breakpoint setting |
US7086043B2 (en) | 2002-10-29 | 2006-08-01 | International Business Machines Corporation | Compiler apparatus and method for unrolling a superblock in a computer program |
US7607123B2 (en) | 2004-09-21 | 2009-10-20 | Hewlett-Packard Development Company, L.P. | Systems and methods for validating debug information for optimized code |
US8316352B2 (en) * | 2006-06-09 | 2012-11-20 | Oracle America, Inc. | Watchpoints on transactional variables |
US8667471B2 (en) * | 2007-03-30 | 2014-03-04 | Sap Ag | Method and system for customizing profiling sessions |
US8370816B2 (en) | 2007-05-02 | 2013-02-05 | International Business Machines Corporation | Device, method and computer program product for evaluating a debugger script |
US8261199B2 (en) | 2007-10-16 | 2012-09-04 | International Business Machines Corporation | Breakpoint identification and presentation in virtual worlds |
US8291388B2 (en) | 2008-01-09 | 2012-10-16 | International Business Machines Corporation | System, method and program for executing a debugger |
US8250551B2 (en) * | 2008-01-17 | 2012-08-21 | International Business Machines Corporation | Refining tail call optimizations at link-time |
US20110078666A1 (en) | 2009-05-26 | 2011-03-31 | University Of California | System and Method for Reproducing Device Program Execution |
US8752017B2 (en) | 2010-05-17 | 2014-06-10 | Salesforce.Com, Inc. | Method and system for remote debug protocol proxying for production debugging; selective session and user routing for debugging in multi-tenant cloud computing infrastructure |
US8468124B2 (en) | 2010-06-30 | 2013-06-18 | International Business Machines Corporation | Debugging workflows |
US8990780B2 (en) | 2012-03-29 | 2015-03-24 | International Business Machines Corporation | Setting breakpoints in optimized instructions |
US8819640B2 (en) | 2012-07-24 | 2014-08-26 | International Business Machines Corporation | Establishing cloud debug breakpoints assigned to users |
CN103973741B (zh) | 2013-01-31 | 2018-02-09 | 国际商业机器公司 | 用于在云系统中进行远程调试的方法和装置 |
CN104063258B (zh) | 2013-03-21 | 2017-05-03 | 国际商业机器公司 | 用于调试过程中的代码动态切换的方法和系统 |
US9465721B2 (en) * | 2013-08-19 | 2016-10-11 | Microsoft Technology Licensing, Llc | Snapshotting executing code with a modifiable snapshot definition |
US9262300B1 (en) | 2014-06-24 | 2016-02-16 | Google Inc. | Debugging computer programming code in a cloud debugger environment |
US10353679B2 (en) | 2014-10-31 | 2019-07-16 | Microsoft Technology Licensing, Llc. | Collecting profile data for modified global variables |
US9436583B1 (en) | 2015-11-06 | 2016-09-06 | International Business Machines Corporation | Minimally disruptive debugging in a production environment |
-
2017
- 2017-05-04 US US15/586,593 patent/US10613964B2/en active Active
-
2018
- 2018-04-10 CN CN201880029170.9A patent/CN110603527B/zh active Active
- 2018-04-10 WO PCT/US2018/026775 patent/WO2018204032A1/en unknown
- 2018-04-10 EP EP18720908.5A patent/EP3619611A1/en active Pending
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6249907B1 (en) * | 1998-03-24 | 2001-06-19 | International Business Machines Corporation | Method system and article of manufacture for debugging a computer program by encoding user specified breakpoint types at multiple locations in the computer program |
CA2246270A1 (en) * | 1998-09-01 | 2000-03-01 | Ibm Canada Limited - Ibm Canada Limitee | Debugging multiple related processes simultaneously |
US6795963B1 (en) * | 1999-11-12 | 2004-09-21 | International Business Machines Corporation | Method and system for optimizing systems with enhanced debugging information |
US7665079B1 (en) * | 1999-11-17 | 2010-02-16 | International Business Machines Corporation | Program execution method using an optimizing just-in-time compiler |
US6681384B1 (en) * | 1999-12-23 | 2004-01-20 | International Business Machines Corporation | Multi-threaded break-point |
US20050010912A1 (en) * | 2003-07-10 | 2005-01-13 | International Business Machines Corporation | Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability |
US20050066314A1 (en) * | 2003-09-18 | 2005-03-24 | International Business Machines Corporation | Managing breakpoints |
US20050289396A1 (en) * | 2004-06-25 | 2005-12-29 | Hooper Donald F | Conditional breakpoint using breakpoint function and breakpoint command |
JP2010287101A (ja) * | 2009-06-12 | 2010-12-24 | Oki Semiconductor Co Ltd | ソフトウエアデバッグ装置及び方法 |
US20120110552A1 (en) * | 2010-10-28 | 2012-05-03 | International Business Machines Corporation | Protecting breakpoints in a software debugger |
US20120151452A1 (en) * | 2010-12-14 | 2012-06-14 | Microsoft Corporation | Remote debugging of server side code without blocking or high-level privileges |
US20130152054A1 (en) * | 2011-12-13 | 2013-06-13 | International Business Machines Corporation | Setting breakpoints in optimized instructions |
US20150143344A1 (en) * | 2013-11-18 | 2015-05-21 | Microsoft Corporation | Diagnosing Production Applications |
WO2015079291A1 (en) * | 2013-11-29 | 2015-06-04 | Freescale Semiconductor, Inc. | Code injection for conditional breakpoints |
US20160124835A1 (en) * | 2014-10-29 | 2016-05-05 | Microsoft Corporation | Diagnostic workflow for production debugging |
Non-Patent Citations (2)
Title |
---|
US HOELZLE, ET.: "Debugging Optimized Code with Dynamic Deoptimization", 《PROCEEDINGS OF THE ACM SIGPLAN 1992 CONFERENCE ON PROGRAMMING LANGUAGE DESIGN AND IMPLEMENTATION》 * |
姚放吾等: "嵌入式远程调试器保护模式下调试功能的实现", 《计算机技术与发展》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111338961A (zh) * | 2020-02-28 | 2020-06-26 | 北京小米移动软件有限公司 | 应用调试方法及装置、电子设备及存储介质 |
CN111338961B (zh) * | 2020-02-28 | 2023-10-20 | 北京小米移动软件有限公司 | 应用调试方法及装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US10613964B2 (en) | 2020-04-07 |
WO2018204032A1 (en) | 2018-11-08 |
CN110603527B (zh) | 2023-03-31 |
EP3619611A1 (en) | 2020-03-11 |
US20180322030A1 (en) | 2018-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110603527B (zh) | 用于服务器侧生产代码的条件调试的方法、系统和设备 | |
CN107077414B (zh) | 用于生产调试的诊断工作流程 | |
US9703553B2 (en) | Assertions based on recently changed code | |
US9015676B2 (en) | Varying removal of internal breakpoints during debugging of code | |
US9720657B2 (en) | Managed assertions in an integrated development environment | |
US9733903B2 (en) | Optimizing program performance with assertion management | |
US10255086B2 (en) | Determining optimal methods for creating virtual machines | |
US8843899B2 (en) | Implementing a step-type operation during debugging of code using internal breakpoints | |
US20200089594A1 (en) | Artificial intelligence for load testing | |
CN106681897B (zh) | 一种代码调试方法及装置 | |
US20140365833A1 (en) | Capturing trace information using annotated trace output | |
US20100162207A1 (en) | Behavior-first event programming model | |
EP3619612B1 (en) | Temporary de-optimization of target functions in a cloud debugger | |
US10599554B2 (en) | Dynamic instrumentation based on detected errors | |
US10133652B2 (en) | Debugging optimized code using FAT binary | |
US20160291951A1 (en) | Dynamic provision of debuggable program code | |
CN114840418A (zh) | 模糊测试方法及装置 | |
US10956304B2 (en) | Dynamic diagnostic code instrumentation over a historic program execution | |
CN115220701A (zh) | 任务依赖关系的处理方法和装置、任务执行方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |