CN1271896A - 调试优化代码的方法和设备 - Google Patents
调试优化代码的方法和设备 Download PDFInfo
- Publication number
- CN1271896A CN1271896A CN00107018A CN00107018A CN1271896A CN 1271896 A CN1271896 A CN 1271896A CN 00107018 A CN00107018 A CN 00107018A CN 00107018 A CN00107018 A CN 00107018A CN 1271896 A CN1271896 A CN 1271896A
- Authority
- CN
- China
- Prior art keywords
- code
- debugging
- relevant
- program
- 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
Links
Images
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/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/3628—Software debugging of optimised code
-
- 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
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
本发明一般涉及用来改进软件应用性能的方法和设备。更确切地说,本发明涉及为调试系统提供足够信息以有效地调试已优化代码的方法和设备。
在努力提高与计算机程序的执行有关的效率方面,许多计算机程序已经“优化”。优化计算机程序一般用来清除计算机代码中那些基本不用的部分。而且,优化计算机程序可以重构计算操作使得整个计算更有效地执行,从而消耗更少的计算机资源。
优化器用来有效转换计算机程序,例如,将用诸如C++,FORTRAN或Java字节代码的程序语言编写的计算机程序转换成更快的程序。更快的或优化的程序一般包括与原来的或转换前的计算机程序实质完全一样可见的行为。特别地,优化程序包括与它相关源程序一样的数学行为。然而,优化程序一般用较少计算重建同样数学行为。
典型地,优化器包括寄存器分配器和内核优化器。本领域的技术人员可以理解,寄存器分配器将计算从存储器空间移到寄存器空间,同时内核优化器完成与优化程序有关的数学计算。在生成优化程序的过程中,优化器清除不用代码。例如,那些与在源程序中循环外不用的变量有关的代码一般都被清除。这些变量可包括但不限于在循环中用作索引的计数器变量。
当优化器转换计算机程序时,优化器时常生成计算机程序的内部表示。然后该内部表示可用来生成与计算机程序的计算码的机器码。图1是转换计算机程序成优化计算机程序的优化器的框图表示。计算机程序104,它可用任何合适的计算机程序语言编写,提供给优化器110。如图所示,计算机程序104包括“for”循环106,循环中包括变量“i”。
优化器110,它有效地作为一个编译器,包括内部表示生成器114和机器码生成器118。内部表示生成器114将计算机程序104当作输入,产生计算机程序104的内部表示122。内部表示生成器114典型地删除不用代码,如象变量“i”的索引变量,以便内部表示112不引用这些不用代码。
提供内部表示112作为输入给机器码生成器118,机器码生成器118生成机器码126,如已转换的计算机程序104计算码。由于内部表示112不包括对不用代码的引用,可以理解机器码126也不包括对这些不用代码的引用。由于清除了这些不用代码,机器码126比它包括不用代码时可以更有效率地执行。
当机器码将被调试时,代表已转换或已优化版本的计算机程序104的机器码126一般是用调试器来访问的。当由于各种各样不同的原因机器码被调试的同时,为了确定在优化码中明显的错误,优化码经常被调试。调试也可出现来确定与该代码有关的内部状态,这对本领域的技术人员是能理解的。图2是描述与优化程序和调试已优化程序有关的步骤的过程流程图。优化和调试程序的过程200开始于步骤202,在该步骤优化器获得包括不用值或变量的程序码。一旦获得程序码,在步骤204生成程序码的内部表示。生成程序码的内部表示一般必须删除那些不用值的引用,象前面讨论的一样。
程序码的内部表示产生以后,在步骤206从内部表示生成机器码。然后调试器在步骤208访问机器码。并从机器码获得可用的调试信息。一般地,调试信息包括位于机器码中不同点的状态信息。这样的调试信息由“解优化”已优化码来生成的。当不用码,如死亡变量,从已优化程序中删除时,那些不用码一般不可以在调试过程中重新获得。因为如此,调试码和优化码之间的准确关系要么可能不能获得,要么不正确,这一点对于本领域的技术人员是可以理解的。换句话说,获得的调试信息可能是不准确的。一旦获得调试信息,优化码和调试已优化码的过程完成。
在有虚拟机的环境中,如由加州Palo Alto的太阳微系统公司开发的JavaTM虚拟机,希望转换优化码为解释码。为了准确的将优化码返回成解释码,有效的JavaTM虚拟机状态一般为所有变量所需要。在属于某些状态的代码在优化过程中可能已删除的事件中,不是所有状态是可用的。当这样的状态不可用时,转换成解释码一般可能根本不发生,或可能不准确。转换中的不准确可能对整个计算环境实质上导致不正确的结果。
因此,希望从优化码中获得调试信息的有效方法。也就是,所需要的是一个方法和设备,它能激活与在调试或优化过程中有效获得的不用值的相关状态。
本发明涉及为了调试已优化计算机程序码,提供调试器的状态信息的实际上的全集而不显著影响系统性能。根据本发明的一个方面,获得与程序码相关的信息的方法包括增加代码段至程序码中,该代码段包括计算后不再有效使用的表示,即“调试码”。在代码段的附近选择“断点”,并且从程序码中产生机器码。最后,方法包括将断点处的指令替换为用来引发调试码执行的分支指令。通过执行调试码,使得在已优化机器码中一般将被清除的状态对调试器或解优化器是可用的,从而激活将被准确调试或解优化的机器码。
根据本发明的另一方面,获得与程序码相关的信息的计算机实现的方法可包括增加对与程序码有关的子程序,即“调试码”,的调用。调用子程序包括包括多个参数,其中至少一个参数对应与计算有关的表示的引用。对于程序码和子程序,该表示实际上不使用。计算机实现的方法也包括用实际转换子程序调用为调试码,生成与程序码有关的机器码。
在本发明的另一个方面,调试优化码的方法包括生成较高级的程序表示,它包括带相关计数器值和调试码段的循环部分。该方法还包括通过转换较高级程序表示为包括与调试码和断点有关部分的较低级码的方法而优化较高级程序表示。断点处的指令用使引发与断点有关的部分执行的分支指令来替换。最后,调试码被执行,从而提供与计数器值相关的信息。
阅读以下详细说明和研究附图后,本发明的这些和那些优点是明显的。
参照下面结合附图的说明,可以最佳理解本发明,其中:
图1是转换计算机程序为优化计算机程序的优化器的框图表示。
图2是描述与优化程序和调试已优化程序有关的步骤的过程流程图。
图3a是依照本发明的实施例,转换带断点码的计算机程序为带断点码的已优化计算机程序的优化器的框图表示。
图3b是依照本发明的实施例,有包括断点指令的机器码320的图3a的优化器310的框图表示。
图4是依照本发明的实施例,描述与优化和调试带调试码的计算机程序相关的步骤的过程流程图。
图5是适合实现本发明的通用计算机系统的框图表示。
图6是图5的计算机系统支持的并且适合实现本发明的虚拟机的框图表示。
有时,希望或必须调试优化码。一般地,编译器不支持优化码的调试。当代码被优化,那些在源代码中原来可得到的信息可能被毁坏。例如,死亡变量可能被清除。因此,当试图调试优化码时,一般不可能取得与死亡变量有关的信息。因此,获得的调试信息可能不是准确的。不准确调试信息经常使得很难跟踪源代码中的问题,也很难将优化码转换回源代码。
在如加州Palo Alto太阳微系统公司开发的JavaTM虚拟机的虚拟机的环境中,可能希望转换已优化码为解释码。例如,很少使用的已优化码可以转换成解释码来更好分配系统资源。为了执行从优化码至解释码的转换,有效的JavaTM虚拟机状态一般为所有变量所需要。在与某些状态有关的变量在优化过程中可能已经被删除的事件中,不是所有状态都是有用的。当状态不可用时,转换为解释码可能导致错误的发生。转换中的不准确对整个计算环境可能导致实际问题。
包括如属于死亡变量或不用值的信息的调试信息作为计算机程序的执行语义学的一部分,同时也转换调试信息,容许优化器转换计算机程序为它的最佳能力。尽管在优化计算机程序的过程中转换调试信息可能排除某些优化,从而影响计算机程序的整体优化性,可实现改进的调试。特别地,准确调试计算机程序所需的程序码是优化的,且寄存器与计算机程序的剩余部分一起被分配。这样,计算机程序的优化级相对是高的且仍顾及调试。
为了包括调试信息作为计算机程序执行语义学的一部分,调试码可以包括在计算机程序中。调试码有效提供必要信息来通知运行时间系统,如定位象状态值的值的调试器,并且约束了将清除不用值和在调试时可能需要的死亡变量的优化。
图3a是依照本发明的实施例,转换带断点码的计算机程序为带断点码的已优化计算机程序的优化器的框图表示。计算机程序302或源代码,它可能用任何合适的计算机程序语言编写,包括代码段304。如图所示,代码段304是一个“for”循环,该循环包括索引变量“i”,“i”是一个不用值或“死亡”变量。就是说,索引变量“i”一般不在“for”循环外使用。应当注意到,尽管代码段304是作为“for”循环示出,但代码段304可包括任何合适的循环。
在描述的实施例中,调试代码306一般插入到“for”循环中,从而生成稍稍修改的计算机程序302′。尽管调试码306可能大大不同,调试码306通常是调试器调用,它将索引变量“i”作为参数作出调用。断点码306的布置用来标识潜在断点指令的位置。例如,调试码306实际上可能放在计算机程序302′的任何地方,在这里需要与计算机程序302′有关的所有变量状态的知识。调试码306一般用来参照映射指向包含所要状态的地点的断点指针的表。
提供计算机程序302′给优化器310,或更特别地内部表示生成器312。优化器310和调试器(未示出)一般作为编译器的一部分被包括在内。在所述的实施例中,内部表示生成器312用来生成计算机程序302′的JavaTM表示314。然而,可以理解,其它合适的表示可用另外实施例中的内部表示生成器312产生。表示314包括调试码306的表示316。由于调试码306的表示包含在表示314中,与不用值“i”有关的状态信息出现在表示314中。
表示314作为输入提供给为优化器310的一部分的机器码生成器318。由机器码生成器生成的机器码320包括与调试码306有关的调试码322。机器码320也包括主体324,该主体包括与“for”循环304有关的代码。调试码322用来运行以响应断点,该断点有效中止与“for”循环304有关代码执行。
调试器可以修改机器代码320或更特别地,主体324,这样到达调试码322。当调试码322到达时,可以获得与不用值“i”有关的状态信息。在JavaTM环境中,与不用值“i”有关的状态信息可以用在解优化过程中,在该过程将已优化码如已编译码,转换成解释码。图3b是依照本发明的实施例,有包括断点的机器码320的图3a的优化器310的框图表示。分支指令360在与“for”循环304有关的主体324中要么替换要么覆盖装载指令。分支指令360使得程序逻辑跳到调试码322,这里在执行调试器或解优化器的过程中可以获得属于不用值“i”的状态信息。
一般地,诸如优化器310的优化器实质上尊重与程序302有关的所有定义和使用,同时清除不用码,这对于本领域的技术人员是可以理解的。增加调试码306来容许获得属于不用值的状态信息,可能减慢机器码320的执行,而且结果是对程序302的优化的妥协。然而,已经注意到,断点一般并不显著减慢机器码320的执行。换句话说,增加断点至程序码中极大提高了与程序码有关的调试和解优化能力,而不显著牺牲程序码的表现。
图4是依照本发明的实施例,描述与优化和调试带调试码的计算机程序相关的步骤的过程流程图。优化和调试计算机程序的过程450在步骤452开始,在该步骤获得计算机程序或程序码包括调试码,以及不用值。在步骤454生成程序代码的内部表示。应该理解,由于断点码包括在程序码中的事实,不能有效的清除不用值的同时,内部表示一般包括对于程序码已简化的计算。
在步骤454生成内部表示后,在步骤458选择断点。在所述的实施例中,断点的选择涉及到确定诸如与不用值有关的内部表示中的代码段。一旦断点被选择,那么在步骤460,指向程序的调试码,或更特别的,程序的内部表示被插入。调试码一般根据被选择的断点被插入。
对于本领域的技术人员可理解,在步骤458中断点的选择和在步骤460中调试码的插入可以重复直到所有断点的潜在位置已经处理。换句话说,步骤458和步骤460可以是循环的一个部分,它容许所有的潜在断点被选择以便调试码可以根据每个潜在断点被插入。
一旦在步骤460插入调试码,在步骤462实际上使用任何合适的方法包括调试码的程序被优化。程序优化后,在步骤456从内部表示产生机器码。产生的机器码有效地是在步骤452中获得的源程序代码的已优化版本。一旦产生,机器码就可以被调试器或解优化器访问。
在步骤466,程序码被运行或被执行,如在步骤464生成的机器码被执行。在运行程序的过程中,在步骤468作出决定,考虑程序是否需要调试。这样的一个决定可以根据不同情况的变化而定。例如,决定可以至少部分根据对特殊应用是否需要调试信息。
在步骤468,如果决定程序不需要调试,那么在步骤466程序继续运行。本领域的技术人员可以理解,程序可以继续运行直到终止。否则,如果在步骤468的决定是程序需要调试,那么在步骤470,断点处的指令被的分支指令覆盖。举例来说,循环中的装载指令可以用分支指令替换,该分支指令,参照图3b的描述,可能是这样一个指令,它指示程序流跳到包括调试码的机器码的部分。本领域的技术人员可以理解,分支指令可以是传统的分支指令,如“jump”指令。否则,分支指令可以是断点指令,捕获指令,或实际上可以是用来直接改变程序流向的任何其它指令。
指令被覆盖后,在步骤472从机器码获得调试信息。在JavaTM环境中,调试信息可包括与诸如在JavaTM虚拟机的虚拟机有关的状态。一旦获得调试信息,优化代码和调试已优化代码的过程完成。
图5描述了适合首先本发明的典型的通用计算机系统。计算机系统1030包括任何数目的处理器1032(也指中央处理单元,或CPU),它连接到存储器设备,存储器设备包括主存储设备1034(典型地是随机存取存储器,或RAM)和主存储设备1036(典型地是只读存储器,或ROM)。
计算机系统1030或更特别地CPU 1032,可用来支持虚拟机,这一点本领域的技术人员可以理解。在计算机系统1030上支持的虚拟机的实例将参照图6描述如下。技术上众所周知,ROM表现为单向地传送数据和指令给CPU 1032,而RAM一般用来以双向方式传送数据和指令。CPU 1032一般可包括任何数目的处理器。主存储设备1034和1036都可包括任意合适的计算机可读的媒体。二级存储设备介质1038,一般为海量存储设备,也是双向连接到CPU 1032并且提供额外的数据存储能力。海量存储器存储设备1038是计算机可读的介质,它可用来保存程序,包括计算机代码,数据诸如此类。一般地,海量存储器存储设备1038是一存储介质,例如硬盘或磁带,磁带一般比主存储介质1034,1036慢。海量存储器存储设备1038可采取磁或纸带阅读器或一些其它周知的设备的形式。可以理解,保留在海量存储器存储设备1038中的信息,在适当的情形下,可以象虚拟内存一样作为RAM 1036的一部分合并为标准形式。特殊的主存储设备1034,如CD-ROM也可双向传递数据给CPU 1032。
CPU 1032也可连接至有关或多个输入/输出设备1040,它可包括但不限于诸如视频监视器,轨迹球,鼠标,键盘,麦克风,触摸式显示器,传感卡阅读器,磁或纸带阅读器,书写板,书写笔,声音或手写识别器,或其它众所周知的输入设备,当然例如其它计算机。最后,CPU 1032可以用在1012一般示出的网络连接方法,选择地连接至计算机或电讯网络,如局域网,因特网或企业内部互联网。用这样的网络连接,预期CPU 1032在执行上面描述的方法步骤的过程中,可能接收来自网络的信息,或可能输出信息给网络。这样的信息,常常表现为用CPU 1032执行的序列指令,可以从网络中接收到或输出到网络中,例如,用具体表现为载波的计算机数据信号的形式。上面描述的设备和材料对于计算机硬件和软件方面的技术人员是熟悉的。
如前所述,虚拟机可在计算机系统上执行。图6是图5中的计算机系统支持的并且适合实现本发明的虚拟机的框图表示。当执行如由加州Palo Alto的太阳微系统公司开发的JavaTM程序语言编写的计算机程序的计算机程序时,源代码1110在编译时间环境1105中提供给编译器1120。编译器1120翻译源代码1110为字节代码1130。一般地,源代码1110在软件开发者生成源代码的时候翻译成字节代码1130。
字节代码1130一般可以重新生成,下载或通过诸如图5的网络1012的网络发布,或保存在诸如图5的主存储1034的存储设备中。在所述的实施例中,字节代码1130与平台独立。就是说,字节代码1130实际上可以在运行合适的虚拟机1140的任何计算机系统上执行。例如,在JavaTM环境中,字节代码1130可以在运行JavaTM虚拟机的计算机系统上执行。
字节代码1130提供给包括虚拟机1140的运行环境1135。运行环境1135一般可以用诸如图5的CPU 1032的处理器执行。虚拟机1140包括编译器1142,解释器1144和运行时间系统1146。字节代码1130一般可要么提供编译器1142,要么给解释器1144。
当字节代码1130提供给编译器1142时,包括在字节代码1130中的方法编译成机器指令,如上所述。另一方面,当字节代码1130提供给解释器1144时,字节代码1130在某时候被读到解释器1144一个字节代码。由于每个字节被读到解释器1144,解释器1144然后执行每个字节代码定义的操作。一般地,解释器1144处理字节代码1130,并且实际上连续地执行与字节代码1130有关的操作。
当从操作系统1160调用方法时,如果判断该方法将作为已解释的方法来调用,运行时间系统1146可以从解释器1144获得该方法。另一方面,如果判断该方法将作为已编译方法来调用,运行时间系统1146激活编译器1142。然后编译器1142从字节代码1130生成机器码,并且执行机器语言指令。一般地,当虚拟机1140终止时,机器语言指令被放弃。
尽管只描述了本发明的几个实施例,应该理解到,本发明可以以许多其它的特定形式具体化,而不偏离本发明的精神和范畴。举例来说,涉及使用运行调试器或解优化器的步骤可能被重新调用,删除和增加。而且,在一些实施例中,与生成包括断点的程序有关的步骤可以修改。一般地,涉及本发明的步骤可以被重新调用,删除或增加,而不偏离本发明的精神和范畴。
使用调试码和断点一般已描述与JavaTM环境有关。然而,在一些实施例中,环境可能不一定是JavaTM环境。举例来说,在使用JavaTM虚拟机的地方,实际上任何合适的虚拟机可以实现。
而且,当断点已被描述置与循环中的某处的同时,应该理解为断点可以置于需要潜在断点的计算机程序中任何地方。就是说,断点可插在计算机程序中的任何地方,这里它可能潜在地必须获得全部可用的值。因此,本实例看作为解释性的而不是限制性的,并且本发明不限于这里给出的细节,但在附加的权利要求书的范畴内可以作出修改。
Claims (20)
1.一种获得与程序代码有关的信息的计算机实现的方法,该计算机实现的方法包括:
增加代码段给程序代码,代码段包括与计算有关的表示,表示用于实质上不被处理;
增加调试代码在代码段的附近;
产生与程序代码有关的机器代码,机器代码包括断点,断点与调试代码有关;以及
用分支指令替换断点处的指令,分支指令用于引发调试代码执行,其中当调试代码执行时,获得与表示有关的信息。
2.如权利要求1中所述的计算机实现的方法,其中增加调试代码到代码段的附近包括将调试代码集合到代码段中。
3.如权利要求1和2中所述的计算机实现的方法,其中代码段与程序循环有关。
4.如权利要求3中所述的计算机实现的方法,其中增加调试代码到代码段的附近包括将调试代码集合到程序循环中。
5.如权利要求2和4中所述的计算机实现的方法,其中调试代码包括调用用于调试程序代码的调试函数的代码。
6.如权利要求2,4和5之一所述的计算机实现的方法,其中调试代码包括调用用于解优化程序代码的解优化函数的代码。
7.如上述权利要求中任一个的计算机实现的方法,还包括:
转换程序代码为内部表示,其中生成与程序代码有关的机器代码包括从内部表示生成机器代码。
8.如权利要求7中所述的计算机实现的方法,其中生成与程序代码有关的机器代码包括生成与表示有关的机器代码。
9.如权利要求7和8之一中所述的计算机实现的方法,还包括:
执行调试代码,其中执行调试代码用于提供与表示有关的信息。
10.如权利要求9中所述的计算机实现的方法,其中调试代码用调试器和解优化器之一来执行。
11.一种获得与程序代码有关的信息的计算机设备,该计算机设备包括:
用于增加代码段至程序代码的编程接口,代码段包括与计算有关的表示,表示用于实际上不被处理,编程接口还用于增加调试代码到代码段的附近;
用于生成与程序代码有关的机器代码的机器代码生成器,机器代码包括断点,断点与调试代码有关,其中机器代码还包括位于断点位置的指令;以及
用于将指令替换为分支指令的解编译器,其中分支指令用于引发调试代码执行
12.如权利要求11的计算机设备,其中用于增加调试代码到代码段的附近的编程接口还用于将调试代码集合到代码段中。
13.如权利要求11和12之一的计算机设备,其中代码段与程序循环有关,用于调试在代码段附近的代码的编程接口还包括用于集合调试代码至程序循环中。
14.如权利要求11-13中的任意一个的计算机设备,还包括:
用于转换程序代码为内部表示的代码转换器,其中机器代码生成器用于从内部表示生成机器代码。
15.如权利要求14的计算机设备,还包括:
用于执行调试代码的调试器,其中执行调试代码用于提供与表示有关的信息。
16.如权利要求14和15中的一个的计算机设备,还包括:
用于执行调试代码的解优化器,其中执行调试代码用于提供与程序表示有关的信息。
17.一种获得与特殊指令集有关的信息的计算机程序产品,该计算机程序产品包括:
包括与计算有关的表示相关的计算机代码,表示用于实际上不被处理,其中计算机代码包括调试代码;
生成与包括表示和调试代码的计算机代码有关的机器代码的计算机代码,机器代码包括断点,断点与调试代码有关,其中机器代码还包括指令;
用分支指令替换指令的计算机代码,分支指令用于引发调试代码执行,其中引发调试代码执行提供与表示有关的信息;以及
保存程序代码的计算机可读介质。
18.如权利要求17的计算机程序产品,其中计算机可读介质为从组中选择的一种,组包含用载波具体化的数据信号,CD-ROM,硬盘,软盘,磁带驱动器和闪存。
19.一种获得与程序代码有关的信息的计算机实现的方法,该计算机实现的方法包括:
增加对子程序的调用,子程序与程序代码有关,子程序的调用包括多个参数,其中多个参数中的至少一个对应于与计算有关的表示,表示相对于程序代码和子程序不被使用;以及
生成与程序代码有关的机器代码,其中生成机器代码包括实际上转换子程序的调用为调试代码。
20.一种调试已优化代码的计算机实现的方法,该计算机实现的方法包括:
生成较高级的程序表示,较高级的程序表示包括循环部分,循环部分有相关的计数器值,其中循环部分包括断点代码段;
优化较高级的程序表示,其中优化较高级的程序表示包括转换较高级的程序表示为较低级代码,较低级代码包括与调试代码和指令有关的部分;
用分支指令替换指令,分支指令用于引发与调试代码部分有关的执行;以及
执行分支指令,其中执行分支指令引发与调试代码部分有关的执行并且提供与计数器值有关的信息。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/298,692 US6553565B2 (en) | 1999-04-23 | 1999-04-23 | Method and apparatus for debugging optimized code |
US09/298692 | 1999-04-23 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1271896A true CN1271896A (zh) | 2000-11-01 |
CN1153141C CN1153141C (zh) | 2004-06-09 |
Family
ID=23151624
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB001070185A Expired - Lifetime CN1153141C (zh) | 1999-04-23 | 2000-04-24 | 调试优化代码的方法和设备 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6553565B2 (zh) |
EP (1) | EP1046995A3 (zh) |
JP (1) | JP2000353110A (zh) |
CN (1) | CN1153141C (zh) |
AU (1) | AU780946B2 (zh) |
CA (1) | CA2306517A1 (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100456260C (zh) * | 2006-12-21 | 2009-01-28 | 华为技术有限公司 | 一种用于对解释语言程序进行调试方法及装置 |
CN101714098A (zh) * | 2008-09-26 | 2010-05-26 | Arm有限公司 | 通过修改跟踪操作减少跟踪开销 |
CN102096629A (zh) * | 2009-12-14 | 2011-06-15 | 华为技术有限公司 | 经过性断点设置、调试方法和装置 |
CN102855179A (zh) * | 2011-06-30 | 2013-01-02 | 国际商业机器公司 | 虚拟机环境下的程序调试方法和系统 |
CN102855186A (zh) * | 2012-07-24 | 2013-01-02 | 飞天诚信科技股份有限公司 | 一种Java卡调试信息的处理方法 |
CN106462488A (zh) * | 2014-05-29 | 2017-02-22 | 微软技术许可有限责任公司 | 调试期间的性能优化提示呈现 |
US10380003B2 (en) | 2014-10-29 | 2019-08-13 | Microsoft Technology Licensing, Llc | Diagnostic workflow for production debugging |
CN110998540A (zh) * | 2017-08-01 | 2020-04-10 | 微软技术许可有限责任公司 | 调试器中的跟踪代码的聚焦的执行 |
US10691445B2 (en) | 2014-06-03 | 2020-06-23 | Microsoft Technology Licensing, Llc | Isolating a portion of an online computing service for testing |
Families Citing this family (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6968542B2 (en) * | 2000-06-16 | 2005-11-22 | Hewlett-Packard Development Company, L.P. | Method for dynamically identifying pseudo-invariant instructions and their most common output values on frequently executing program paths |
US6978456B1 (en) | 2000-10-31 | 2005-12-20 | Sun Microsystems, Inc. | Methods and apparatus for numeric constant value inlining in virtual machines |
US6901591B1 (en) * | 2000-10-31 | 2005-05-31 | Sun Microsystems, Inc. | Frameworks for invoking methods in virtual machines |
US6996813B1 (en) | 2000-10-31 | 2006-02-07 | Sun Microsystems, Inc. | Frameworks for loading and execution of object-based programs |
US7024187B2 (en) * | 2000-12-08 | 2006-04-04 | Samsung Electronics Co., Ltd. | System and method for performing diagnostics on a mobile station using over-the-air transfer of interpreted byte-code program |
US7360205B2 (en) * | 2001-02-09 | 2008-04-15 | International Business Machines Corporation | Minimizing interaction costs among components of computer programs |
US7020874B2 (en) * | 2001-03-26 | 2006-03-28 | Sun Microsystems, Inc. | Techniques for loading class files into virtual machines |
US7096466B2 (en) * | 2001-03-26 | 2006-08-22 | Sun Microsystems, Inc. | Loading attribute for partial loading of class files into virtual machines |
US6957428B2 (en) * | 2001-03-27 | 2005-10-18 | Sun Microsystems, Inc. | Enhanced virtual machine instructions |
US7543288B2 (en) | 2001-03-27 | 2009-06-02 | Sun Microsystems, Inc. | Reduced instruction set for Java virtual machines |
CA2345416C (en) * | 2001-04-27 | 2005-05-03 | Ibm Canada Limited-Ibm Canada Limitee | High performance debugging in a message flow environment |
US20020199179A1 (en) * | 2001-06-21 | 2002-12-26 | Lavery Daniel M. | Method and apparatus for compiler-generated triggering of auxiliary codes |
US7039904B2 (en) | 2001-08-24 | 2006-05-02 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for storing values into local variables |
US7228533B2 (en) * | 2001-08-24 | 2007-06-05 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for performing programming loops |
US6988261B2 (en) | 2001-08-24 | 2006-01-17 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions in Java computing environments |
US6678876B2 (en) * | 2001-08-24 | 2004-01-13 | Formfactor, Inc. | Process and apparatus for finding paths through a routing space |
US6862727B2 (en) | 2001-08-24 | 2005-03-01 | Formfactor, Inc. | Process and apparatus for adjusting traces |
US7058934B2 (en) * | 2001-08-24 | 2006-06-06 | Sun Microsystems, Inc. | Frameworks for generation of Java macro instructions for instantiating Java objects |
US6738969B2 (en) * | 2001-11-14 | 2004-05-18 | Sun Microsystems, Inc. | Non-intrusive gathering of code usage information to facilitate removing unused compiled code |
US7426717B1 (en) * | 2001-11-27 | 2008-09-16 | Adobe Systems Incorporated | System and method for debugging files in a runtime environment |
US7178135B2 (en) * | 2002-05-16 | 2007-02-13 | International Business Machines Corporation | Scope-based breakpoint selection and operation |
DE10235504A1 (de) * | 2002-08-02 | 2004-02-12 | Siemens Ag | Umsetzeinrichtung, Automatisierungsgerät mit einer Umsetzeinrichtung und Entwicklungsumgebung mit einem Automatisierungsgerät mit Umsetzeinrichtung |
US8225293B2 (en) * | 2003-02-13 | 2012-07-17 | Accurate Technologies Inc. | Method for supporting calibration parameters in an ECU |
CA2432866A1 (en) * | 2003-06-20 | 2004-12-20 | Ibm Canada Limited - Ibm Canada Limitee | Debugging optimized flows |
US7367023B2 (en) * | 2003-07-10 | 2008-04-29 | International Business Machines Corporation | Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability |
WO2005041028A1 (ja) * | 2003-10-23 | 2005-05-06 | Fujitsu Limited | ソフトウェア開発ツールプログラム |
US7607123B2 (en) * | 2004-09-21 | 2009-10-20 | Hewlett-Packard Development Company, L.P. | Systems and methods for validating debug information for optimized code |
JP4718901B2 (ja) * | 2005-05-27 | 2011-07-06 | パナソニック株式会社 | 命令実行装置、デバッグ方法、デバッグ装置及びデバッグプログラム |
US20070168975A1 (en) * | 2005-12-13 | 2007-07-19 | Thomas Kessler | Debugger and test tool |
US7827537B2 (en) * | 2006-05-26 | 2010-11-02 | Oracle America, Inc | Searching computer programs that use different semantics |
US8332819B2 (en) * | 2007-05-03 | 2012-12-11 | Siemens Industry, Inc. | Diagnostic and trouble-shooting methods in a wireless control and sensor network |
US8028277B2 (en) * | 2007-05-21 | 2011-09-27 | International Business Machines Corporation | Self-healing system and method for code optimization in a computing environment |
US7851298B2 (en) * | 2007-10-29 | 2010-12-14 | Hynix Semiconductor Inc. | Method for fabricating transistor in a semiconductor device utilizing an etch stop layer pattern as a dummy pattern for the gate electrode formation |
US8527961B2 (en) * | 2007-11-14 | 2013-09-03 | Oracle America, Inc. | Expression-level debugging without format changes |
US20100095281A1 (en) * | 2008-10-14 | 2010-04-15 | Riverside Research Institute | Internal Function Debugger |
US8271958B2 (en) * | 2008-12-12 | 2012-09-18 | Microsoft Corporation | Remapping debuggable code |
US9632909B2 (en) * | 2008-12-16 | 2017-04-25 | Microsoft Technology Licensing, Llc | Transforming user script code for debugging |
JP5444724B2 (ja) * | 2009-01-20 | 2014-03-19 | 富士通株式会社 | 検証支援プログラム、情報処理装置および検証支援方法 |
CN102088391B (zh) | 2009-12-07 | 2013-09-11 | 华为技术有限公司 | 一种IPv6报文的处理方法、设备和系统 |
US9111033B2 (en) | 2012-04-17 | 2015-08-18 | International Business Machines Corporation | Compiling source code for debugging with user preferred snapshot locations |
US8910126B2 (en) | 2012-04-18 | 2014-12-09 | International Business Machines Corporation | Compiling source code for debugging with variable value restoration based on debugging user activity |
US8990781B2 (en) | 2012-06-04 | 2015-03-24 | International Business Machines Corporation | Synchronization point visualization for modified program source code |
US9632906B2 (en) * | 2013-03-15 | 2017-04-25 | Ca, Inc. | Automated software system validity testing |
US9558105B2 (en) | 2013-03-15 | 2017-01-31 | Ca, Inc. | Transactional boundaries for virtual model generation |
CN104063258B (zh) | 2013-03-21 | 2017-05-03 | 国际商业机器公司 | 用于调试过程中的代码动态切换的方法和系统 |
US9274931B2 (en) | 2013-05-06 | 2016-03-01 | International Business Machines Corporation | Inserting implicit sequence points into computer program code to support debug operations |
US9292417B2 (en) | 2013-08-07 | 2016-03-22 | Raytheon Cyber Products, Llc | System and method for hypervisor breakpoints |
US9747189B2 (en) * | 2015-11-12 | 2017-08-29 | International Business Machines Corporation | Breakpoint for predicted tuple processing time in a streaming environment |
US9940218B2 (en) | 2016-02-15 | 2018-04-10 | International Business Machines Corporation | Debugging optimized code using fat binary |
US10540262B2 (en) | 2016-10-17 | 2020-01-21 | Microsoft Technology Licensing, Llc | Using edit and continue to dynamically set and unset optimizations in source code while debugging |
US10613964B2 (en) | 2017-05-04 | 2020-04-07 | Microsoft Technology Licensing, Llc | Conditional debugging of server-side production code |
US10534693B2 (en) | 2017-05-04 | 2020-01-14 | Microsoft Technology Licensing, Llc | Temporary de-optimization of target functions in a cloud debugger |
US10445216B2 (en) | 2017-08-25 | 2019-10-15 | Microsoft Technology Licensing, Llc | Debugging program code at instruction level through emulation |
CN113971124B (zh) * | 2020-07-24 | 2024-06-25 | 腾讯科技(深圳)有限公司 | 子应用的调试方法、装置、计算机设备和存储介质 |
CN112711539A (zh) * | 2021-01-08 | 2021-04-27 | 北京三快在线科技有限公司 | 一种数据处理的方法、装置以及数据检测系统 |
US11972240B2 (en) | 2021-12-03 | 2024-04-30 | Samsung Electronics Co., Ltd. | Systems and methods for automapping source code to machine code |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5732273A (en) * | 1995-08-11 | 1998-03-24 | Digital Equipment Corporation | System for monitoring compute system performance |
US5539907A (en) * | 1994-03-01 | 1996-07-23 | Digital Equipment Corporation | System for monitoring computer system performance |
-
1999
- 1999-04-23 US US09/298,692 patent/US6553565B2/en not_active Expired - Lifetime
-
2000
- 2000-04-20 AU AU28917/00A patent/AU780946B2/en not_active Expired
- 2000-04-20 CA CA002306517A patent/CA2306517A1/en not_active Abandoned
- 2000-04-24 CN CNB001070185A patent/CN1153141C/zh not_active Expired - Lifetime
- 2000-04-24 JP JP2000123170A patent/JP2000353110A/ja active Pending
- 2000-04-25 EP EP00303466A patent/EP1046995A3/en not_active Withdrawn
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100456260C (zh) * | 2006-12-21 | 2009-01-28 | 华为技术有限公司 | 一种用于对解释语言程序进行调试方法及装置 |
CN101714098A (zh) * | 2008-09-26 | 2010-05-26 | Arm有限公司 | 通过修改跟踪操作减少跟踪开销 |
CN102096629B (zh) * | 2009-12-14 | 2013-09-25 | 华为技术有限公司 | 经过性断点设置、调试方法和装置 |
WO2011072565A1 (zh) * | 2009-12-14 | 2011-06-23 | 华为技术有限公司 | 经过性断点设置、调试方法和装置 |
CN102096629A (zh) * | 2009-12-14 | 2011-06-15 | 华为技术有限公司 | 经过性断点设置、调试方法和装置 |
US8555256B2 (en) | 2009-12-14 | 2013-10-08 | Huawei Technologies, Co., Ltd. | Pass-by breakpoint setting and debugging method and device |
CN102855179A (zh) * | 2011-06-30 | 2013-01-02 | 国际商业机器公司 | 虚拟机环境下的程序调试方法和系统 |
CN102855186A (zh) * | 2012-07-24 | 2013-01-02 | 飞天诚信科技股份有限公司 | 一种Java卡调试信息的处理方法 |
CN102855186B (zh) * | 2012-07-24 | 2014-10-29 | 飞天诚信科技股份有限公司 | 一种Java卡调试信息的处理方法 |
CN106462488A (zh) * | 2014-05-29 | 2017-02-22 | 微软技术许可有限责任公司 | 调试期间的性能优化提示呈现 |
US10691445B2 (en) | 2014-06-03 | 2020-06-23 | Microsoft Technology Licensing, Llc | Isolating a portion of an online computing service for testing |
US10380003B2 (en) | 2014-10-29 | 2019-08-13 | Microsoft Technology Licensing, Llc | Diagnostic workflow for production debugging |
CN110998540A (zh) * | 2017-08-01 | 2020-04-10 | 微软技术许可有限责任公司 | 调试器中的跟踪代码的聚焦的执行 |
Also Published As
Publication number | Publication date |
---|---|
AU780946B2 (en) | 2005-04-28 |
US6553565B2 (en) | 2003-04-22 |
EP1046995A3 (en) | 2003-11-19 |
EP1046995A2 (en) | 2000-10-25 |
CN1153141C (zh) | 2004-06-09 |
AU2891700A (en) | 2000-10-26 |
US20020100018A1 (en) | 2002-07-25 |
JP2000353110A (ja) | 2000-12-19 |
CA2306517A1 (en) | 2000-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1153141C (zh) | 调试优化代码的方法和设备 | |
US5579520A (en) | System and methods for optimizing compiled code according to code object participation in program activities | |
US7725883B1 (en) | Program interpreter | |
US7912877B2 (en) | Leveraging garbage collection to dynamically infer heap invariants | |
EP0735468B1 (en) | Method and apparatus for an optimizing compiler | |
US7386838B2 (en) | Method and apparatus for obtaining profile data for use in optimizing computer programming code | |
US7992141B2 (en) | Method and apparatus for building executable computer programs using compiled program libraries | |
CN1197003C (zh) | 将异常作为正常控制流进行处理的方法和装置 | |
JPH09330233A (ja) | 最適目的コード生成方法 | |
JP2500079B2 (ja) | プログラムの最適化方法及びコンパイラ・システム | |
KR19980080502A (ko) | 템플릿 오브젝트 파일들을 최적화하기 위한 시스템과 방법 | |
US20060101437A1 (en) | Data processing device and method | |
Chanet et al. | System-wide compaction and specialization of the Linux kernel | |
CN116934330A (zh) | 一种调用智能合约的方法及执行方法、计算机设备及存储介质 | |
Waite | The cost of lexical analysis | |
CN113553057B (zh) | 一种针对不同架构的gpu进行并行计算的优化系统 | |
CN1191527C (zh) | 生成稀疏干扰图的装置与方法 | |
Chase | Garbage collection and other optimizations | |
US7240341B2 (en) | Global constant pool to allow deletion of constant pool entries | |
Nanjekye et al. | Towards Reliable Memory Management for Python Native Extensions | |
Tuthill et al. | Debugging with dbx | |
CN117850788A (zh) | 一种编译方法、装置、存储介质及电子装置 | |
CN117687912A (zh) | 一种仿真优化处理方法及装置 | |
Lionas | Runtime Object Lifetime Profiler for the Virtual Machine GraalVM | |
Steckler | Polymorphism over nested regular arrays: theory and implementation in FISh |
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 | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20040609 |