CN112041823A - 计算机过程执行的选择性跟踪部分 - Google Patents
计算机过程执行的选择性跟踪部分 Download PDFInfo
- Publication number
- CN112041823A CN112041823A CN201980028633.4A CN201980028633A CN112041823A CN 112041823 A CN112041823 A CN 112041823A CN 201980028633 A CN201980028633 A CN 201980028633A CN 112041823 A CN112041823 A CN 112041823A
- Authority
- CN
- China
- Prior art keywords
- tracking
- execution
- code
- trace
- distance variable
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 252
- 230000008569 process Effects 0.000 title claims abstract description 154
- 239000003607 modifier Substances 0.000 claims abstract description 12
- 230000015654 memory Effects 0.000 claims description 120
- 230000006870 function Effects 0.000 claims description 44
- 238000003860 storage Methods 0.000 claims description 35
- 230000004048 modification Effects 0.000 claims description 18
- 238000012986 modification Methods 0.000 claims description 18
- 230000007246 mechanism Effects 0.000 claims description 17
- 238000004891 communication Methods 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 5
- 238000010586 diagram Methods 0.000 abstract description 22
- 230000009467 reduction Effects 0.000 abstract description 3
- 230000000694 effects Effects 0.000 description 38
- 238000012545 processing Methods 0.000 description 22
- 230000007547 defect Effects 0.000 description 12
- 238000004519 manufacturing process Methods 0.000 description 10
- 230000008859 change Effects 0.000 description 9
- 230000007717 exclusion Effects 0.000 description 8
- 238000012360 testing method Methods 0.000 description 7
- 239000008186 active pharmaceutical agent Substances 0.000 description 6
- 238000013459 approach Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 230000000644 propagated effect Effects 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 230000007423 decrease Effects 0.000 description 5
- 238000009826 distribution Methods 0.000 description 5
- 238000002347 injection Methods 0.000 description 5
- 239000007924 injection Substances 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 230000001276 controlling effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 230000002452 interceptive effect Effects 0.000 description 4
- 230000005291 magnetic effect Effects 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000003247 decreasing effect Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 230000018109 developmental process Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000000052 comparative effect Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 239000000047 product Substances 0.000 description 2
- 230000001105 regulatory effect Effects 0.000 description 2
- 241000238876 Acari Species 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000002155 anti-virotic effect Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000000712 assembly Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000006227 byproduct Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000005352 clarification Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000012010 growth Effects 0.000 description 1
- 230000003446 memory effect Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003340 mental effect Effects 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000035515 penetration Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000000053 physical method Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000007619 statistical method Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000003936 working memory Effects 0.000 description 1
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/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3089—Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
- G06F11/3093—Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3495—Performance evaluation by tracing or monitoring for systems
-
- 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/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
在开发人员希望其被跟踪的代码与其他代码之间的每个连接点处明确地开启和关闭跟踪可以减小跟踪文件大小但是却增加计算性成本。所描述的技术支持选择性地跟踪过程的执行,除了开发者想要跟踪的代码以外,还进行了一些额外的跟踪,但是通过减少跟踪启用和禁用操作的数目,显著降低了计算性成本。跟踪控制器使用跟踪禁用距离变量,跟踪禁用距离变量的值指示距跟踪禁用的计算性距离。随着过程执行,距离变量修改器自动地移动距离变量以更接近停止跟踪值。基于关于例程大小和计算性成本的信息,通过调节阈值来平衡额外的跟踪量与跟踪启用/禁用操作的减少。跟踪控制器的操作由示例API、跟踪状态图和并排比较、以及其他项进行了说明。
Description
背景技术
计算机软件通常很复杂。部分复杂性可能来自于程序被设计为执行的工作的性质,例如,在数小时或更长时间内追踪大量真实世界项或正在进行的事务,与其他复杂软件协调活动,控制复杂硬件,等等。在软件的几乎任何真实世界使用中,复杂性也会出现,因为很多细节被引入并且应当被正确管理以指示计算机硬件如何执行真实世界工作,该真实世界工作在最初用英语或另一种自然语言来描述时精度要小得多。也就是说,从高级别描述到由计算机系统可执行的低级别实现的转换不可避免地引入了复杂性。甚至比自然语言更精确的编程语言源代码仍处于相对较高级别,并且因此是模糊的,对各种理解和实现是开放的。源代码被转换为由计算性硬件直接可执行的低级别指令,很多细节被引入,并且在转换期间做出了选择。
复杂性引入通常经常意识到的编程错误(又称为“缺陷”,bug)的可能性。标识缺陷的原因并且尝试修改程序以补救或移除缺陷的影响的过程被称为“调试”。协助调试的专用软件工具称为“调试器”。被调试的程序称为“调试对象”。
当开发者可以随意缓慢地或全速运行调试对象,或者随意暂停调试对象的执行,并且可以在调试对象的执行的任何时候检查调试对象的所有状态信息时,调试可能是最容易的。这被称为“实时过程调试”。但是,对调试对象的这样的完全访问权通常是不可用的。例如,调试对象可以是生产软件,在不违反服务协议或损害利益方的声誉、安全性或财务状况的情况下,不能够对该生产软件进行实时调试。如果在开发者检查变量值、检查利用哪些参数值调用了哪些函数、查看源代码、考虑缺陷的可能解释、以及设计可能有助于标识、补救或消除缺陷的测试时一次将实时过程调试对象暂停几秒钟,则可能会造成不能够接受的危害。
因此,有时状态信息在调试对象执行时被记录,以便稍后被检查而基本上不暂停调试对象的执行。例如,与调试对象的执行相关的部分或全部存储器值以及对这些值的操作可以随时间被记录在执行跟踪中。在调试对象不是实时过程的情况下,一些调试器支持使用这种跟踪来重放所跟踪的调试对象的执行。使用一些调试器,可以正向或反向重放在跟踪中捕获的调试对象执行,从而准许“时间旅行”(time travel)、“反向”或“历史性”调试。
然而,跟踪通常会使调试对象变慢。因此,在避免对软件性能产生不适当影响的同时跟踪软件程序执行的进展有助于改善可用于调试的信息,并且因此将倾向于通过支持对它们的缺陷的调解和消除来改善调试对象计算机系统的功能。
发明内容
本文中描述的一些技术涉及创建执行跟踪的技术活动,该执行跟踪关注于程序中最有可能包含感兴趣的缺陷的部分,从而改善了基于跟踪的调试。一些教导涉及对启用或禁用跟踪的计算性成本与对特定调试工作没有帮助的跟踪代码的计算性和存储成本进行平衡的特定计算性机制。描述了用于适应环境以从本机过程或被管理过程创建被关注的跟踪的技术机制。响应于将跟踪关注于感兴趣的用户代码上的挑战,此处描述了特定技术工具和技术,以减少由于跟踪非用户代码(诸如内核、编译器、垃圾收集器或标准库代码)而导致的不期望的性能降低和跟踪大小增加。与本文中的教导有关的其他技术活动对于本领域技术人员也将变得清楚。
本文中描述的一些选择性执行跟踪实施例包括处理器、与处理器可操作通信的数字存储器、以及用于计算机实现的过程的可执行代码。可执行代码具有隐式地或显式地被指定用于跟踪的部分以及未被指定用于跟踪的其他部分。存在执行跟踪器,利用跟踪禁用器来禁用执行跟踪器的跟踪,利用跟踪启用器来启用执行跟踪器的跟踪。跟踪控制器包括跟踪禁用距离变量,该变量的变化的值指示从执行跟踪禁用器的当前计算距离。即,当跟踪被启用时距离变量越大,在跟踪被禁用之前将会跟踪越多的可执行代码的执行。跟踪控制器结合具有停止跟踪值(例如,零)的距离变量来调用跟踪禁用器。跟踪控制器随后可以结合不具有停止跟踪值的距离变量来调用跟踪启用器。随着可执行代码执行,距离变量修改器递增地移动距离变量以更接近停止跟踪值。例如,距离变量修改器可以递减距离变量中的正值,从而移动距离变量以接近零,并且当距离变量达到零时,跟踪将被禁用。
通过使用距离变量来控制跟踪禁用,而不是每次执行退出被指定用于跟踪的可执行代码的部分时都明确地调用跟踪禁用器,实施例可以减少跟踪的计算性成本。在各种情况下这可能是有益的,因为跟踪用于多种目的,例如在调试期间,以协助代码理解,以供统计分析,以及以支持其他目标。这种计算性成本的降低是换来跟踪一些不感兴趣的代码。跟踪文件可能比仅跟踪感兴趣代码的情况要大,但是与仅跟踪感兴趣代码的情况相比,跟踪的性能影响往往要小。例如,在调试上下文中,当代码位于代码的可疑部分之外时,相对于特定缺陷,代码被认为“不有趣”,这使其不太可能有助于标识和缓解或移除缺陷。例如,项(诸如内核、编译器、系统库或垃圾收集器)中的代码对于标识这些项之外的用户代码中的缺陷并不有趣。
本文中描述的一些实施例涉及将环境配置为执行计算机实现的选择性执行跟踪。一些实施例特别涉及配置用于跟踪的可执行代码,该跟踪使用跟踪禁用距离变量(即,其值指示在计算性成本上与禁用跟踪的相对距离的变量)而被控制。一个方法在可执行代码中嵌入非零高计数确保代码,该非零高计数确保代码被配置为在执行时将距离变量设置为不小于高计数阈值的值。该方法使指令计数递减机制与可执行代码相关联,该指令计数递减机制被配置为随着可执行代码执行而递减距离变量。该方法还将执行跟踪器连接到可执行代码。该方法将跟踪控制器配置为当距离变量达到停止跟踪值时禁用跟踪,并且还将跟踪控制器配置为当距离变量不同于停止跟踪值时在可执行代码的执行的至少部分期间启用跟踪。
一些实施例涉及实际执行计算机实现的选择性执行跟踪。一个实施例在代码单元的入口点处设置跟踪禁用距离变量。距离变量被设置为不小于非零高计数阈值的值。距离变量测量在计算性成本上与禁用跟踪的相对距离。与将距离变量设置为不小于高计数阈值的值相结合,该实施例进行调用,如果跟踪尚未被启用,则该调用支持执行跟踪器最多跟踪距离变量的值数目的指令,而如果已经启用了跟踪,则该调用使跟踪继续被启用。在代码单元的出口点处,该实施例将距离变量设置为小于高计数阈值的非零低计数阈值。随着计算机处理器执行包含代码单元的计算机过程的指令,距离变量自动地递减。当距离变量的值为正并且执行跟踪器被启用时,执行跟踪器将跟踪计算机过程的执行,并且如果距离变量的值达到零,则该实施例将禁用对计算机过程的执行的跟踪。
给出的示例仅仅是示出性的。本“发明内容”既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。相反,提供本“发明内容”是为了以简化的形式介绍一些技术概念,这些技术概念将在下面的“具体实施方式”中进一步描述。本发明以权利要求书来定义,并且在本发明内容与权利要求相抵触的情况下,以权利要求书为准。
附图说明
将参考附图给出更具体的描述。这些附图仅说明所选择的方面,因此不能完全确定覆盖或范围。
图1是示出计算机系统并且还示出所配置的存储介质的框图;
图2是示出跟踪被管理代码过程的方面的框图;
图3是示出跟踪本机代码过程的方面的框图;
图4是示出执行跟踪的方面的框图;
图5是示出可以在跟踪中被参考的一些种类的存储器单元的框图;
图6是示出线程跟踪数据的方面的框图;
图7是示出选择性执行跟踪系统的方面的框图;
图8是示出具有跟踪禁用距离变量的跟踪与不具有这种距离变量的跟踪的计算性成本优势的方面的框图;
图9是示出使用跟踪禁用距离变量来控制执行跟踪的跟踪控制器的方面的框图;
图10是跟踪状态图;
图11是示出一些可以被跟踪的各种代码单元以及相关联的项的框图;
图12是示出可以与跟踪有关的代码的一些方面以及在跟踪禁用距离变量的控制下跟踪代码时可以采用的一些调节条件的框图;
图13是跟踪场景中的并排跟踪控制实现的计算性成本比较;
图14是示出用于配置针对使用了跟踪禁用距离变量的选择性执行跟踪的系统的示例方法的流程图;
图15是示出针对使用了跟踪禁用距离变量的选择性执行跟踪的示例方法的流程图;以及
图16是进一步示出与使用了跟踪禁用距离变量的选择性执行跟踪有关的方法的流程图。
具体实施方式
概述
软件开发者通常要负责调查难以重现的软件缺陷,或者是他们不能够访问以用于直接调试目的的机器上发生的缺陷。在这些情况下,具有自动将过程的执行记录到文件使得问题可以稍后被调试、或者在不中断过程的执行的情况下进行调试的系统会很有帮助。但是,这样的记录可能会导致较大的开销和极大的文件大小。
特别地,在生产云环境中的调试提出了严重的技术挑战。例如,假定对在线购物车的特定请求R不起作用。开发者如何在不减慢所有其他请求的处理并且使请求R的处理减速最小化的情况下调试请求R的处理?为了找到缺陷,开发者使用关于代码内部正在发生什么的信息,例如一种在请求R的处理期间查看一个或多个兴趣点处的变量的值的方式。
基于跟踪的调试创新有助于克服传统方法不能够解决的技术难题。例如,很多传统的调试器和调试方法允许开发者设置暂停断点(halt breakpoint)以得到关于变量值的信息。暂停断点是暂停执行的指令,从而开发者有时间在处理中的给定点处检查存储器内容并且考虑观察到的可能解释。但是在生产环境中,暂停断点可能会暂停大量请求的处理,而这是不希望的。即使仅暂停单个线程,也可能导致不希望的放弃请求,并且产生不能够预料的副作用,其阻碍调试、或降低性能、或两者。
一些熟悉的调试方法涉及在代码中的特定点处添加打印语句,以打印特定变量的值,或者添加其他代码,例如,以测试变量的值以查看其是否是开发者在代码中的这一点处期望的值。但是这些方法可能需要重新编译和重新部署代码,这在生产环境中不受欢迎,尤其是如果重新编译和重新部署要被多次完成作为迭代调试过程的一部分以查找和修复单个缺陷。另外,可能要求开发者标识开发者没有其来源并且因此不能够向其添加打印语句并且重新编译的代码中的缺陷。
开发者可以在执行时间处将操作注入请求处理代码中,以制作与请求有关的部分或全部存储器的副本。副本可以包括“快照”216(经由写时复制与原始过程共享存储器分配页的过程的存储器中(in-memory)副本)或“转储”文件218(过程的序列化副本)或两者。一些传统的调试器可以读取转储文件或快照,并且在给定适当元数据的情况下,以特定格式呈现存储器内容,该特定格式示出从二进制被转译为包括变量名称的信息性结构的变量值并且基于变量的相应数据类型来显示变量值。但是将存储器转储到文件需要花费大量时间,这会减慢不仅请求R而且示例场景中所有请求的处理。尽管制作快照比创建转储文件要快得多,但这可能会需要开发者的很多尝试来在处理中找到有用的点,以获取揭示缺陷的存储器快照,并且快照占用RAM中的空间。为了在转储文件或快照中捕获的除执行时间以外的时间中的另一点查看存储器,可以创建另一存储器副本。为了从实时过程的时间中的任何点查看存储器,实时过程被使用。
在很多现代计算系统中,如图2所示的被管理过程环境200的示例,实时过程206是被管理代码208过程,除了依赖于操作系统120以外,其还包括运行时210。被管理代码208除了依赖于内核120以外,还包括或依赖于运行时210以供垃圾收集或代码编译(即,JIT编译或中间语言代码的编译)或两者。垃圾收集可以利用对象可达性分析、对象参考计数、或其他策略。相比之下,图3示出了包括缺少运行时210的本机代码308实时过程206的本机过程环境300的示例。本机代码308在不使用进行时210的情况下直接与内核120对接。
本文提供的教导可以有益地应用于两种环境200、300中的一种或两种中。如图所示,工具122(诸如调试器202或执行跟踪器204)可以将操作注入实时过程206,以制作在过程206的执行期间采用的部分或全部存储器项212的副本214。在在线购物车场景中,例如,跟踪器204可以将操作注入请求处理代码,以制作与有问题的请求R有关的部分或全部存储器112、212的副本。可以在执行代码208、308之前或期间,由工具122注入用以实现存储器复制的指令116。代码注入又称为“代码插装”,它是一个技术过程,通过该过程,可执行代码的二进制表示在执行时被译码并且被重写,以向程序添加附加的功能性。
缺少运行时的过程可以由调试器通过插入暂停断点来直接控制。但是,依赖于运行时的过程不受调试器202的直接控制,因为它们的运行时有效地从调试器细节212隐藏,诸如存储器位置、存储器内容和指令指针。为了向开发者展示调试期间存储器中有什么,调试器向运行时发送要求当前存储器值的消息,运行时在答复消息中将这些值发送给调试器,调试器在某个用户界面中显示其在回复消息中接收到的值。
运行时210还控制实时调试对象的执行。在一个示例中,为了在偏移28处在方法Foo中的中间语言(IL)指令处设置断点,消息被发送至运行时,要求它在Foo偏移28处设置断点。然后,运行时内的线程将接收该消息,将Foo IL偏移28转译为驻留于存储器地址0x4567123512395处的机器指令,并且然后在该位置写入断点指令。
调试器202用户界面以图形方式向用户显示调试器的程序状态的代表。程序状态的一些示例是线程的列表、要在每个线程上执行的下一行源代码、每个线程的调用栈、调用栈的每一帧中的一组变量、这些变量的值等。
在一些实现中,调试器202的运行时转译部分负责在低级概念(诸如存储器单元和寄存器)与运行时抽象之间进行转译。运行时抽象的示例包括线程的列表、针对每个线程的一个或多个调用栈、以及接下来将要执行的IL指令。注意,抽象的运行时层的调用栈不一定与抽象的源代码级别处的调用栈相同,例如,虚拟机的调用栈与虚拟机中正在执行的IL代码的虚拟调用栈不匹配。
跟踪器204可以创建过程的执行跟踪220。然后可以使用硬件102的仿真来重放跟踪。有时,该跟踪过程是用高级语言编写的,高级语言需要由运行时框架210执行过程206。跟踪本身可能很难调试,因为跟踪数据反映的是低级别处的视图(例如,运行时或即时编译的代码或两者),而不是编写程序的高级语言。一些跟踪技术不提供开发者104可能更喜欢的过程的高级视图。大多数高级运行时都要求运行时本身提供关于在其框架中运行的程序的信息。因此,常规调试可能要求过程在运行时内执行,而当调试基于跟踪而不是实时过程时,这不可选。
像任何其他过程一样,运行时可以被跟踪。然而,调试除了运行时以外的软件比调试运行时更为常见,并且除非另有说明,否则在此假定跟踪过程可以排除作为运行时本身的一部分的一些或全部代码。跟踪文件420仅跟踪依赖于运行时的过程的执行并且不跟踪运行时本身,跟踪文件420不完全支持通过常规调试方法从跟踪文件读取运行时管理对象的值。没有针对调试器的正在执行的运行时来使存储器位置与对象和其他变量完全关联,从而使由跟踪公开的存储器值有意义。为了控制依赖于运行时正在执行代码的实时过程的执行,调试器可以向运行时发送请求操作的消息,所请求的操作诸如“步进”(step)或者“运行”(run),然后运行时代表调试器执行该操作。该功能性不适用于没有当前执行运行时的跟踪文件。
就运行时不可用而言,转储文件218和快照216与跟踪相似。运行时可以在转储或快照或跟踪中呈现,但它没有正在执行并且因此不能够调用。
尽管如此,跟踪文件420可被作为调试环境的一部分。一些基于跟踪的调试工具扩展调试的权力(power),使得调试器可以在由开发者选择的执行时间中的多个点处从跟踪文件读取存储器112。一个方法是在跟踪与高级语言调试器之间插入数据访问层。数据访问层理解运行时的数据结构。这允许高级过程的检查。
在一些情况下,开发者可以使用“时间旅行”调试器来控制执行重放,以在重放所记录的跟踪220时在执行时间中向前运行或在执行时间中向后运行,从而利用调试器的能力以有用的高级别(例如,被命名的和基于数据类型的)变量呈现形式来呈现存储器,不仅用于如以前的快照,现在还用于连续重放在代码执行期间所记录的执行时间的分段(segment)。然后,可以由开发者基于跟踪文件中所记录的低级别数据在多个点处在高级别呈现中检查在跟踪中所捕获的存储器值。当然,存储器检查需要从跟踪读取存储器单元值,或者读取其他值,并且以某种方式从它们获取关于在重放期间所寻求的存储器值的有用信息。启发法可以帮助调试器和其他工具获取有关存储器值的有用信息,即使当跟踪未在执行时间中的期望点处明确声明该值时。
当利用过程转储或快照进行调试时使用数据访问层作为数据源,可以查看有关运行时内的高级别程序状态的信息。适当地调节,调试器202可以应用已经被记录为机器级别操作的过程跟踪的运行时(高级别)视图。仅出于本申请的目的,“机器级别”操作是在汇编语言或中间语言或更低的级别处所指定的操作。
在一些情况下,跟踪220记录机器级别的过程活动,例如,就寄存器活动以及在特定存储器地址处的读取和写入而言,该特定存储器地址以二进制或十六进制被指定,而不是由被编译以创建过程的源代码中的标识符指定。可以使用硬件102的仿真重放一些跟踪220。
跟踪开销包括处理器周期和存储空间(在RAM中,在磁盘上,或两者)。一些跟踪开销是由记录(复制214)过程206中的与要被调试的问题不直接相关的部分引起的。本文中的教导讨论了用于选择性地选择将被记录的过程206的分段的工具和技术。“分段”是过程的一部分,并且可以以其基础代码或存储器活动的形式包括一个或多个例程、线程、库、或过程的其他适当子集。分段选择减少了跟踪的处理时间和存储器开销、以及跟踪220的盘消耗。在生产环境和很多其他环境中,过程执行跟踪220往往很大(数百或数千兆字节),并且跟踪会导致在启用跟踪时的大量处理器开销(执行被放慢了十倍或更多)。本文中提出的解决方案通过在过程执行期间选择关于应当跟踪软件的哪些部分,来帮助减少文件大小、存储器压力和处理器负载。
一些人可以在较广泛的上下文中查看本文中描述的一些实施例。例如,诸如禁用、距离、启用、大小和跟踪等概念可以被认为与特定实施例相关。然而,不遵循来自广泛上下文的可用性,排他权在该广泛上下文中被寻求用于抽象概念;他们不是。而是,本公开关注于提供适当的特定实施例,这些实施例的技术效果完全或部分解决特定技术问题,诸如标识折中(tradeoff),在所跟踪的程序性能、跟踪执行减慢、跟踪相关性和跟踪大小之间追求选择平衡,以及协助所选择的平衡的追求的实现机制。涉及禁用、距离、启用、大小或跟踪的其他媒体、系统和方法不在当前范围之内。因此,在适当地理解本公开的情况下,也避免了模糊、仅仅抽象、缺乏技术特征以及伴随的证明问题。
技术特征
本文中描述的实施例的技术特征对于本领域普通技术人员将是显而易见的,并且也将以多种方式对于各种专注读者而言是显而易见的。一些实施例致力于植根于计算技术并且改善计算系统的功能的技术活动。例如,一些实施例通过使调试跟踪更有效来帮助调试系统。当跟踪这些系统的执行时,一些实施例减轻了系统中的性能降低。
例如,一些实施例有助于减少开发者必须筛选以发现缺陷的无关或不感兴趣的执行跟踪的数量。通过在不省略相关跟踪数据的情况下减少对跟踪文件的存储要求,一些实施例使得有效跟踪变得可行,即使由于可用存储的限制而原本不可行。
而且,通过使所跟踪的程序在其执行未调试的操作时全速运行,一些实施例使开发者在给定工作周期内有更多时间执行调试分析。当工具跟踪不感兴趣的操作(如垃圾收集、JIT编译、或标准库例程)时,开发者等待的时间减少,上述操作是执行的一部分,但不太可能包含所追求的缺陷。减少不相关的跟踪所节省的时间可以用于代码重放、变量的检查和其他调试分析。
一些实施例包括诸如计算硬件的技术性组件,该技术性组件以超出通用计算机内的典型交互的方式与软件交互。例如,除了一般交互(诸如一般的存储器分配、一般的存储器读取与写入、一般的指令执行、以及某种I/O)以外,本文中描述的一些实施例还使用跟踪禁用距离变量及一个或多个相关阈值来实现选择性跟踪算法步骤,如本文中公开的。
一些实施例提供的技术效果包括开发者更有效地使用调试时间、经减小的跟踪文件大小、以及经减小的跟踪程序执行的减慢。
一些实施例包括技术性适配,诸如跟踪禁用距离变量、例程、和修改或检查跟踪禁用距离变量的其他机制。一些适配包括跟踪选择调节条件。这些条件实现启用或禁用跟踪的计算性成本与对特定调试工作没有帮助的跟踪代码的计算和存储成本之间的平衡。
从所提供的描述,基于教导的技术特征的其他优点对于本领域技术人员也是很清楚的。
首字母缩写词和缩写
下面定义一些首字母缩写词和缩写。其他缩写可以在本文中的其他地方定义,或者不需要任何定义就能被本领域技术人员理解。
ALU:算术和逻辑单元
API:应用程序接口
BIOS:基本输入/输出系统
CD:压缩盘
CPU:中央处理单元
DV:距离变量,如在“跟踪禁用距离变量”中
DVD:数字多功能盘或数字视频盘
FPGA:现场可编程门阵列
FPU:浮点处理单元
GPU:图形处理单元
GUI:图形用户界面
ID:标识符
IDE:集成开发环境,有时又称为“交互式开发环境”
JIT:及时,如在“JIT编译器”或“JIT编译”中
OS:操作系统
RAM:随机存取存储器
ROM:只读存储器
“==”指示“等于”,“!=”指示“不等于”,“=”指示“被赋值”;这些缩写在图10和13中使用
“()”指示例程,例如,“trace-on()”是被命名为“trace-on”的例程;例程也可以利用其名称被引用而不带括号,例如,图13中的“A”、“B”、“B1”、“C”和“C2”指的是例程
附加术语
在本文中参考诸如附图中所示的示例性实施例,并且本文中使用特定语言来描述它们。但是,相关领域的技术人员可能想到的并且具有本公开的本文中示出的特征的改变和进一步修改以及本文中由特定实施例示出的抽象原理的附加技术应用应当被认为在权利要求的范围内。
在本公开中澄清了术语的含义,因此在阅读权利要求时应当仔细注意这些澄清。给出了具体示例,但是相关领域的技术人员将理解,其他示例也可以落入所使用的术语的含义内,并且落入一个或多个权利要求的范围内。这里的术语不一定具有与它们在一般用途(尤其是在非技术用途中)、在特定行业的用途、在特定词典或词典中的用途相同的含义。附图标记可以与各种措词一起使用,以帮助示出术语的广度。从给定文本中省略附图标记并不一定表示该文本未讨论图的内容。发明人主张并且行使其对自己的词典编纂的权利。带引号的术语是显式地定义的,但也可以不使用引号而隐式定义术语。可以在“具体实施方式”中和/或在申请文件中的其他位置显式或隐式地定义术语。
如本文中使用的,“计算机系统”可以包括例如一个或多个服务器、主板、处理节点、膝上型计算机、平板、个人计算机(便携式或非便携式)、个人数字助理、智能电话、智能手表、智能手环、蜂窝或移动电话、至少具有处理器和存储器的其他移动设备、视频游戏系统、增强现实系统、全息投影系统、电视、可穿戴式计算系统、物联网节点、和/或提供至少部分由指令控制的一个或多个处理器的其他设备。指令可以采用固件或存储器和/或专用电路系统中的其他软件的形式。
“多线程”计算机系统是支持多个执行线程的计算机系统。术语“线程”应当被理解为包括能够进行或被进行排程(并且可能进行同步)的任何代码,并且例如还可以称为诸如“过程”或“协程”。线程可以并行地运行、顺序地运行、或以并行执行(例如,多处理)和顺序执行(例如,分割时间地(time-sliced))的组合方式运行。
“处理器”是线程处理单元,诸如同时多线程实现中的核心。处理器包括硬件。给定芯片可以容纳一个或多个处理器。处理器可以是通用的,或者可以被定制用于特定用途,诸如矢量处理、图形处理、信号处理、浮点算术处理、加密、I/O处理等。
“内核”包括操作系统、虚拟机监视器、虚拟机、BIOS代码和类似的硬件接口软件。
“代码”是指处理器指令、数据(包括常量、变量和数据结构)或指令和数据两者。“代码”和“软件”在本文中可互换地被使用。可执行代码、解释代码和固件是代码的一些示例。被解释或被编译以便执行的代码称为“源代码”。
“程序”在本文中被广泛地使用,以包括应用、内核、驱动、中断处理器、固件、状态机、库、以及由程序员(又称为开发者)编写和/或自动生成的其他代码。
“服务”是指在云计算环境或其他网络环境中进行提供的消耗性程序。
“执行时间点”是指针对处理单元或线程的执行的具体点,尤其是与跟踪执行有关的。本文中对“特定执行时间”或“执行时间t”等的引用是对执行时间点的引用。例如,可以将执行时间点实施为时间码变量或时间码值,或者实施为跟踪或执行活动的其他记录中的相对位置。执行时间点ta“早于”或“晚于”执行时间点tb表示两个执行时间点的相对顺序被确定。类似地,“较年轻”的执行时间点是比“较老”的执行时间点晚的执行时间点。
跟踪中有关跟踪事件的顺序的信息可能不完整。因此,跟踪可以具有足够的信息来确立事件A早于事件B,或确立事件D晚于事件C。但是就考虑跟踪来说,事件的相对顺序也可能是部分或完全不确定的。跟踪可以示出,事件E不在事件F之后,但这并不一定表示E在F之前;类似地,跟踪可以示出,事件K不在事件J之前,而没有跟踪还示出K在J之后。跟踪还可能缺少足够的信息来确立两个特定事件相对于彼此的任何顺序。
“时间码”表示单调变化的值,该值可以用于对执行跟踪中的至少一些事件施加顺序。可以预期,时间码通常是单调递增的值,但是时间码也可以被实施为单调递减的值。时间码的一些示例包括指令计数器、时钟时间(又称时钟滴答)和完全人工的(不基于寄存器或指令的)单调值。依赖于跟踪,所有或一些或没有跟踪事件可以具有相应的相关联的时间码。当时间码存在时,它们可以是唯一的,或者由于一些时间码值重复,因此它们可以只是单调的。
“存储器单元”是指存储器的可寻址单元。一些示例包括RAM或ROM中的字节或字、处理器寄存器、高速缓存行、以及其他可寻址的存储器单元。
“仿真器”执行“仿真”,该“仿真”提供与原始硬件相同的功能,但是使用不同的实施或不同的硬件或两者。一个示例是CPU仿真器,其作用类似于CPU,并且可以像原始CPU硬件一样被用于执行代码,但是与原始CPU的实施不同,例如,仿真器可以在完全不同的物理硬件上运行。
“记录”和“跟踪”在本文中可互换地被使用,以指代创建或扩展跟踪的动作。
除非另有说明,否则如本文中使用的,“包括”允许附加的元素(即,包括表示包含)。
“优化”是指改进,而不必须完美。例如,可以对已经优化的程序或算法进行进一步的改进。
例如,“过程”在本文中有时被用作计算科学领域的术语,并且在技术意义上涵盖资源用户,即协程、线程、任务、中断处理器、应用过程、内核过程、过程(procedure)和对象方法。“过程”在本文中也用作专利法的术语,例如,在描述与系统权利要求或制品(所配置的存储介质)权利要求相对的过程权利要求时。类似地,“方法”在本文中有时被用作计算机科学领域的技术术语(一种“例程”),也被用作专利法领域的术语(“过程”)。本领域技术人员将理解在特定情况下意图使用的含义,还将理解(在专利法意义上的)给定的要求保护的过程或方法有时可以使用一个或多个过程或方法(在计算科学意义上)而被实现。
与没有自动化相反,“自动地”是指利用自动化(例如,由软件配置的、用于本文中讨论的特定操作和技术效果的通用计算硬件)。尤其是,“自动地”执行的步骤虽然可以由人发起或由人以交互方式引导,但它们并不手动地在纸上或在人的脑海中执行。自动的步骤通过机器被执行,为了获取不利用如此提供的技术交互就不能够实现的一种或多种技术效果。
技术人员理解,技术效果是技术实施例的推定目的。例如,在一个实施例中涉及计算,并且一些计算也可以在没有技术组件(例如,通过纸和铅笔,或者甚至作为精神步骤)的情况下执行,这一事实并不消除技术效果的存在或改变实施例的具体和技术性质。操作(诸如启用跟踪、复制跟踪数据和禁用跟踪)在本文中应当理解为,除了其固有的数字性质(人类的思维不能够直接与执行过程或跟踪文件交互),还需要并且提供人类思维步骤不能够获取的速度和准确性。本领域技术人员已经很好地理解了这一点,但是其他人有时可能会从事实的告知或提醒中受益。除非另有说明,否则与单纯的思想实验相反,实施例被假定能够在生产环境中或在生产环境的测试实验室中大规模操作。
“计算性地”同样表示正在使用计算设备(至少是处理器加存储器),并且排除了仅凭人类思想或仅凭人类行动获取的结果。例如,如本文中理解的,用纸和铅笔进行算术不是计算性地的算术。计算结果更快,更广泛,更深入,更准确,更一致,更全面,和/或提供的技术效果超出了人类绩效范围。“计算性步骤”是计算性地执行的步骤。“自动地”或“计算性地”都不一定表示“立即”。“计算性地”和“自动地”在本文中可互换地被使用。
“主动地”是指没有来自用户的直接请求。实际上,在直到步骤的结果已经被呈现给用户为止,用户甚至可能没有意识到实施例的主动步骤是可能的。除非另有说明,否则本文中描述的任何计算性和/或自动地步骤也可以主动地进行。
在整个文档中,使用可选的“(多个)”表示存在一个或多个所指示的特征。例如,“(多个)处理器”是指“一个或多个处理器”或等效地“至少一个处理器”。
出于美国法律和实践的目的,在权利要求书或其他地方使用本文中的“步骤”一词并非旨在调用手段加功能、步骤加功能或35美国法典第112条第六款/第112(f)条要求解释。特此明确驳斥对此种效果的任何推定。
出于美国法律和实践的目的,除非权利要求使用短语“用于……的手段”,否则它们并不意图援引手段加功能的解释。意图被解释为手段加功能语言的权利要求语言(如果有的话)将通过使用短语“用于……的手段”来明确叙述该意图。当采用手段加功能的解释时,无论是通过使用“用于……的手段”和/或通过法院对权利要求语言的法律解释,应当将说明书中针对给定名词或给定动词列举的手段理解为与权利要求语言链接在一起并且在此通过以下任何方式链接在一起:出现在附图框图中相同框内,用相同或相似名称表示,用相同附图标记表示。例如,如果权利要求限制中记载了“zac小部件”,并且该权利要求限制受制于手段加功能的解释,则至少在说明书中任何图块、段落或示例中提到“zac小部件”的任何地方标识的或由分配给zac小部件的任何附图标记绑在一起的所有结构应当视为zac小部件应用中标识的结构的一部分,并且有助于定义zac小部件结构的等效项集。
在整个文档中,除非另有明确说明,否则对过程中的步骤的任何引用都假定该步骤可以由感兴趣的一方直接执行,和/或由一方通过干预机制和/或干预实体间接执行,并且仍然落入该步骤的范围内。也就是说,除非明确说明直接执行,否则该步骤不需要由相关方直接执行。例如,涉及感兴趣的一方的有关目的地或其他主题的动作(诸如关联、配置、确认、连接、控制、复制、递减、指定、禁用、嵌入、启用、进入、执行、退出、安装、调用、测量、移动、记录、运行、满足、选择、设置、跟踪、调节、使用(以及关联、相关联的、配置、所配置的等)的步骤可以涉及另一方的干预动作,诸如转发、复制、上传、下载、编码、译码、压缩、解压缩、加密、解密、认证、调用等,但仍应当理解为直接由感兴趣一方执行。
每当引用数据或指令时,应当理解,例如,这些项配置计算机可读存储器和/或计算机可读存储介质,从而将其转换为特定物品,与简单地存在于纸上、在一个人的思想中、仅仅是能量、或者仅仅是信号在电线上传播相反。出于美国专利保护的目的,根据美国专利商标局(USPTO)在re Nuijten案中的解释,存储器或其他计算机可读存储介质不是在可专利主题范围之外的传播信号、载波或仅能量。在美国,没有任何一项权利要求能够涵盖信号本身,并且任何主张相反的权利要求解释都是不合理的。除非在美国以外地区授予的权利要求中另有明确说明,否则权利要求并不涵盖信号本身。
此外,尽管本文中其他地方有明显相反的规定,但是应当理解(a)计算机可读存储介质和计算机可读存储器与(b)传输介质(又称为信号介质或仅能量)之间的明显区别。传输介质是传播信号或载波计算机可读介质或仅能量。相反,计算机可读存储介质和计算机可读存储器不是传播信号或载波计算机可读介质。除非在权利要求中另有明确说明,否则“计算机可读介质”是指计算机可读存储介质,不是传播信号本身,也不是仅能量。
本文中的“实施例”是示例。术语“实施例”不能与“本发明”互换。实施例可以自由地共享或借用方面以创建其他实施例(只要结果是可操作的),即使本文中本身未明确描述方面的结果性组合。对于本领域技术人员而言,不需要明确描述的每个许可组合都是必要的,这与承认专利说明书是为本领域技术人员编写的政策相反。关于即使由少量可组合特征产生的可能组合的数目的形式化组合计算和非正式的直觉也将表明,本文中描述的方面存在大量的方面组合。因此,要求每种组合的明确的叙述与要求简明的专利说明书并且使读者对有关技术领域知识的政策背道而驰。
附图标记列表
提供以下列表是为了方便和支持附图以及作为说明书文本的一部分,其通过参考多个项来描述创新。尽管如此,这里未列出的项仍可以是给定实施例的一部分。为了使文本更清晰易读,在文本中一些(而非全部)参考项附近参考了给定的附图标记。可以参考给定项的不同示例或不同实例使用相同的附图标记。附图标记的列表是:
100:操作环境,又称为计算环境
102:计算机系统,又称为计算性系统或计算系统
104:用户
106:外围设备
108:一般是网络
110:处理器
112:计算机可读存储介质,例如RAM、硬盘
114:配置为是可移动的计算机可读存储介质
116:通过处理器可执行的指令;可以在可移动介质上,也可以在其他存储器(易失性或非易失性或两者)中
118:数据
120:(多个)内核,例如,(多个)操作系统、BIOS、设备驱动
122:工具,例如防病毒软件、分析器(profiler)、调试器、执行跟踪器、编辑器、编译器、解释器、安全渗透测试器、模糊器等;可以适于使用本文中教导的选择性跟踪控制
124:应用,例如文字处理器、网络浏览器、电子表格
126:显示屏
128:计算硬件,不以其他方式与附图标记106、108、110、112、114相关联
200:环境,其中被管理的代码被跟踪、或被跟踪和被调试
202:调试器
204:执行跟踪器
206:实时调试程序或过程
208:被管理的代码
210:运行时
212:存储器项,例如,应用或系统数据结构
214:一些或所有存储器项的副本
216:存储器快照;可以包括附加的信息,诸如索引或元数据
218:转储文件,又称为存储器转储;可以包括附加的信息,诸如索引或元数据
220:执行跟踪;尽管图4中的虚线示出了给定跟踪中可以包括个体项或省略了个体项,但是本文中假定跟踪不是空的,并且因此针对一般地跟踪数据454的框示出实线。
300:环境,其中本机代码被跟踪、或被跟踪或被调试
420:跟踪文件,包含执行跟踪数据;可以包括机器级别的跟踪数据,即,记录汇编语言或中间语言或更低级别的执行活动的数据
422:在跟踪中精确到位的跟踪数据
424:时间码,在跟踪中,在所跟踪的代码的执行中标识特定执行时间点;可以被链接到或被嵌入到跟踪内的其他数据中,例如,在跟踪数据中,该跟踪数据明确声明与涉及所声明的数据值的所声明的存储器地址处的所声明的操作相关联的执行时间点;时间码可以被实施为例如时钟滴答或指令计数器;对于每个被记录的操作,一些跟踪可以包含唯一时间码,但是在一些跟踪数据中,时间码也可以被重复或被省略
428:跟踪中的时间码中的间隙,用于明确或隐式地指示其中未执行跟踪的执行时间点(例如,当对线程或处理单元禁用跟踪时的范围)。这可以包括相邻时间码相差大于默认值或指定增量(通常为1)的任何间隙,例如,时间码序列2、3、4、300、301、302的间隙在4至300之间,时间码序列250、500、750、1000、2000、2250、2500的间隙在1000到2000之间。
430:到跟踪文件中的数据中的索引,例如反向查找数据结构用于快速标识跟踪属性、存储器寿命索引信息、以及跟踪数据中可能特别令人感兴趣的位置的其他可搜索列表
432:跟踪数据中的关键帧;例如,可以以固定间隔存在于跟踪数据中,以准许重放以更快地跳转到关键帧处(或附近)的跟踪重放
434:所执行的代码,例如在调试对象运行并且被跟踪时由处理器执行的调试对象的机器级别代码的操作码和参数
436:堆栈活动,在调试对象运行并且被跟踪时发生,例如,堆栈增长、堆栈收缩、以及该活动发生的执行时间点
438:数据流;可以对应于单个线程或一组线程,可以对应于处理器单元(例如,处理器核心);可以对应于给定处理器插槽(socket)中的所有核心;可以注释有元数据,以帮助重放
440:处理器核心活动,在调试对象运行并且被跟踪时发生,例如,由核心执行的指令的操作码和参数
442:处理器插槽活动,在调试对象运行并且被跟踪时发生,例如,由位于给定处理器插槽中的任何核心执行的指令的操作码和参数
444:线程活动,在调试对象运行并且被跟踪时发生,例如,在线程运行时执行的指令、在线程运行时进行的存储器单元访问、相关联的元数据(诸如线程ID和时间码)
446:寄存器活动,在调试对象运行并且被跟踪时发生,例如,在什么时间码从哪个寄存器读取什么值、在什么时间码向哪个寄存器写入什么值
448:存储器地址
450:指令操作码
452:数据值
454:一般地跟踪数据
456:元组,即,在跟踪中相关联的跟踪数据的两个或更多项,代表在跟踪执行期间的相同操作;例如,存储器读取操作或存储器写入操作可以作为元组被记录在跟踪中的单个行上,该元组包含或以其他方式将操作码(例如,读取或写入)、地址(例如,RAM地址或寄存器ID)、以及已经读取或写入的数据值相关联在一起
458:跟踪入口
502:存储器单元,例如RAM或ROM中的字节或字、处理器寄存器、高速缓存线、或其他可寻址存储器单元
504:堆栈,例如,存储器的一部分,当例程被进入时状态信息被推入其中,并且然后随着控制从例程返回到调用例程的代码而被弹出;通常区别于堆存储器
506:堆栈基地址,其定义起始点,从该起始点开始在连续的存储器中分配堆栈;堆栈被假定利用系统中的堆栈存储器的分配在已知方向上增长,在给定系统中可以是向上的方向(即,地址随着项被推入堆栈而增加),但在另一系统中,其也可以向下(即,地址随着项被推入堆栈而减小);术语“增长的”在此是指在所讨论的系统上在堆栈增长的方向上,而“收缩的”是指在相反方向上
508:堆栈框架,即分配记录,其当例程被调用时被分配在堆栈上;通常包含返回地址,该地址标识代码中的位置,该位置是例程返回时将恢复执行的位置;也可以包含当例程被调用时作为参数传递给例程的值、或这样的参数值的地址
510:堆存储器,随着构造和释放对象而被分配和被释放;在一些情况下,堆可以进行自动垃圾收集,该堆标识并且标记为可用存储器,可用存储器保持过程的实时执行期间不再可访问的对象;在其他情况下,从堆分配的存储器需要单独的显式调用以释放所分配的存储器。
512:对象
514:高速缓冲存储器;例如可以在RAM工作存储器中或在处理器芯片上
516:处理器核中的寄存器
518:对象属性;被命名的值,它是对象的组成部分;可以是函数,在是函数的情况下,该属性通常称为方法;也是指实现对象属性的函数;函数是返回值的例程
520:ROM(只读存储器);通常是非易失性的
522:除了板载ROM之外的非易失性存储器,诸如可移动闪存、磁盘或光盘存储、磁带存储等。
524:RAM(随机存取存储器);通常为易失性的
526:本地存储器,例如,对于所声明的或隐式的上下文是本地的(在例程的执行期间相对例程是本地的并且然后被释放、或者相对线程是本地的)存储器
528:全局存储器,例如对于所声明的或隐式的上下文是全局的(诸如在它们中的任何一个的执行期间相对一组多个例程是全局的、或者相对一组线程是全局的)存储器
530:存储器的特性,其增加或减小线程外部的实体将改变存储在存储器单元中的值的可能性,例如,存储器单元是否相对于其他线程被写保护,是否在共享存储器(诸如相对多个线程是全局的存储器)中
602:线程
604:线程ID
606:线程状态,例如,创建、可运行、正在运行、挂起、阻塞、终止
608:线程代码,即,当线程运行时被执行或可以执行的代码
610:线程存储器,例如,相对线程是本地的存储器、或者相对线程是全局的、并且在线程执行时被该线程访问的存储器
700:跟踪控制器(trace controller),又称为跟踪控制器(tracing controller)
702:被指定为要跟踪的被跟踪的过程的部分
704:指定要跟踪或不跟踪的部分的标准
706:未被指定为要跟踪的被跟踪的过程的部分,包括明确指定为不跟踪的部分和隐式指定为不跟踪(因为它们未明确指定为要跟踪)的部分
708:库,包含除正在被调试的用户代码以外的代码,例如,标准库或由不同的开发者负责的关于任何调试的库
710:编译器,例如,JIT编译器
712:垃圾收集器,即,回收存储器的代码,从而在用户代码源代码中不需要存储器操作行malloc()和free()
714:对可执行代码的修改,以控制跟踪,例如,对跟踪启用器的调用、对跟踪禁用器的调用、对设置或检查跟踪禁用距离变量的调用
716:跟踪禁用器,即,其调用停止跟踪的例程
718:跟踪启用器,即,其调用开始跟踪的例程
720:跟踪禁用距离变量
722:停止跟踪值;当跟踪禁用距离变量达到该值时,将调用跟踪禁用器;预期该停止跟踪值通常是零
724:跟踪禁用距离变量修改器,例如,中断或硬件处理器模式或电路,其在每个程序指令被执行时自动递减指定寄存器(作为距离变量服务);尽管本文中的示例讨论了递减距离变量直到其达到零,但本领域技术人员将认识到,功能上等效的实现可以递增负的距离变量直到其达到零,或者可以递增或递减距离变量直到其达到某个其他停止跟踪值,跟踪控制器将在该停止跟踪值处触发跟踪禁用器的调用
726:针对距离变量中的值的高计数阈值,可以用于在新进入的代码单元中指示其正在被跟踪
728:针对距离变量中的值的低计数阈值,可以用于在退出被跟踪足够长时间的代码单元之后长时间保持跟踪状态,以在也被跟踪的新进入的代码单元中遇到指示,如果存在这样的指示,否则,除非控制传递(向后或向下)到被指定要跟踪的代码,否则使跟踪被禁用
730:跟踪状态,即,跟踪处于被启用的状态,或者跟踪处于被禁用的状态
802:是系统102的一种变型,其缺少或没有利用跟踪控制器700的距离变量方面,该距离变量方面限制本文中教导的跟踪禁用器和跟踪启用器的调用;相反,该变型在进入要跟踪的代码的每个部分时显式调用跟踪启用器,并且在退出要跟踪的代码的每个部分时显式调用跟踪禁用器
804:计算性成本,例如以处理器周期、指令计数、或系统时钟经过的时间、或者以跟踪220进入458的数目来测量
806:计算性成本,是使用跟踪控制器700的距离变量方面来跟踪代码的至少指定部分的计算性成本,该距离变量方面限制本文中教导的跟踪禁用器和跟踪启用器的调用
808:计算性成本,是不使用跟踪控制器700的距离变量方面而跟踪代码的至少指定部分的计算性成本,该距离变量方面限制本文中教导的跟踪禁用器和跟踪启用器的调用
902:跟踪控制器的一些实现中的set-N()例程,用于设置局部变量N的值
904:local-N,set-N()例程的参数
906:跟踪控制器的一些实现中的get-N()例程,用于获取局部变量N的值
908:跟踪控制器的一些实现中的局部变量N
910:跟踪控制器的一些实现中的set-DV()例程,用于设置跟踪禁用距离变量的值
912:tracing-max,用于set-DV()例程的参数
914:跟踪控制器的一些实现中的get-DV()例程,用于获取跟踪禁用距离变量的值
916:跟踪控制器的一些实现中的try-to-trace()例程,用于如果跟踪尚未启用则启用跟踪
1000:跟踪状态图,示出了一些实现中的跟踪控制行为
1002:跟踪开启状态,即,其中跟踪被启用的状态
1004:跟踪关闭状态,即,其中跟踪被禁用的状态
1006:执行被跟踪过程的指令;也可以是指执行过程的较大部分、或过程的全部
1008:调用try-to-trace()例程;1008还指定try-to-trace()例程的执行
1010:调用跟踪启用器;还指定执行跟踪启用器
1012:将执行信息记录到跟踪中
1014:递减跟踪禁用距离变量,或者以其他方式移动距离变量的值以接近停止跟踪值
1016:调用跟踪禁用器;还指定执行跟踪禁用器
1100:代码单元
1102:函数
1104:例程
1106:协程
1108:异常处理器,又称为异常捕获器
1110:中断处理器
1112:其他代码单元,例如块、循环体、各种代码单元的集合
1114:虚拟方法
1116:虚拟方法的实现
1118:回调
1120:计数确保代码,包括用于确保距离变量满足或超过高计数阈值的代码、或者用于确保距离变量不超过低计数阈值的代码
1122:库
1124:模块,例如文件、组件、包
1200:与使用跟踪禁用距离变量来控制将过程的哪些部分记录到跟踪中有关的代码的方面
1202:进入例程或其他代码单元的入口点
1204:退出例程或其他代码单元的出口点
1206:例程的调用者
1208:例程或其他代码单元中的当前执行点
1210:调节条件,用于在使用跟踪禁用距离变量来控制将过程的哪些部分记录到跟踪中时调节折中,例如,调节跟踪多少不感兴趣的代码以及花费多少处理器周期来禁用跟踪和重新启用跟踪;也指代使用这样的条件来调节跟踪阈值726、728
1216:跟踪无效距离变量的值;但是,与开发者一样,为方便起见,此处有时通过简单地引用变量而不是显式地引用变量的值来指示变量的值,例如,引用变量N既指变量(被分配和被标识的存储),也指该变量中保存的值,并且技术人员会从上下文中了解意指哪个引用
1218:关于可执行代码成本的信息,诸如可执行代码的例程的平均长度(指令数/处理器周期数)、例程大小的分布、以及本文中描述的其他信息
1220:关于打开跟踪或关闭跟踪的计算性成本的信息,例如,跟踪启用器或跟踪禁用器的长度(指令数/处理器周期数)
1300:计算性成本比较示例
1400:将系统配置为通过使用跟踪禁用距离变量来控制跟踪的方法
1402:将系统配置为通过使用跟踪禁用距离变量来控制跟踪
1404:通过使用跟踪禁用距离变量来控制跟踪
1406:使用跟踪禁用距离变量
1408:在过程中嵌入计数确保代码
1410:高计数确保代码
1412:代码中的位置
1414:低计数确保代码
1416:将距离变量修改器与过程或其代码相关联
1418:指令计数器
1420:将执行跟踪器与过程或其代码连接
1422:安装回调以将控制权传递给执行跟踪器
1424:配置跟踪控制器
1426:例如通过涉及跟踪禁用器来禁用跟踪
1428:由于距离变量的值改变(例如,由于距离变量的递减)而达到零或其他停止跟踪值
1430:例如通过涉及跟踪启用器来启用跟踪
1500:通过使用跟踪禁用距离变量来控制跟踪的方法
1502:将距离变量设置为相对高的值
1504:将距离变量设置为相对低的非零值
1600:流程图
1602:将代码单元指定为要跟踪的过程(例如,程序)的一部分
1604:将代码单元指定为将不被跟踪的过程(例如,程序)的一部分,或者被指定为跟踪中不需要(可选地包括)的一部分
1606:确认跟踪禁用距离变量未处于停止跟踪值,例如,距离变量为非零
1608:例如在处理器周期1610、指令计数1612或系统时钟经过时间1614中测量计算性成本
1616:运行(又称为执行)被管理代码
1618:运行(又称为执行)本机代码
1620:作为跟踪控制的一部分,使用set-N()、get-N()、局部变量N、或等效但名称不同的功能
1622:使用try-to-trace()、或等效的但名称不同的功能作为跟踪控制的一部分
1624:使用逻辑无穷大作为跟踪禁用距离变量中的相对高的值
1626:逻辑无穷大,即,至少满足以下条件的值LI:LI减去任何其他整数值等于LI,LI比任何其他整数值更远离零
1628:在控制跟踪时使用关于可执行例程大小的信息1218
1630:选择低计数阈值
1632:选择高计数阈值
1634:满足调节条件1210
1636:将过程的执行采样到跟踪中
1638:调用例程
1640:进入例程
1642:退出例程
1646:编译代码
1648:重定向函数调用
1650:将例程或其他代码单元标识为被指定用于跟踪的例程或其他代码单元
操作环境
参考图1,用于实施例的操作环境100包括至少一个计算机系统102。计算机系统102可以是多处理器计算机系统,也可以不是。操作环境可以包括给定计算机系统中的一个或多个机器,这些机器可以在云中被群集、被进行客户端服务器联网和/或被进行对等联网。个体机器是计算机系统,一组协作机器也是计算机系统。给定计算机系统102可以被配置用于例如具有应用的最终用户、用于管理员、用作服务器、用作分布式处理节点、和/或以其他方式。
人类用户104可以经由键入的文本、触摸、语音、移动、计算机视觉、手势、和/或其他形式的I/O,通过使用显示器、键盘和其他外围设备106与计算机系统102交互。屏幕126可以是可移动的外围设备106,或者可以是系统102的组成部分。用户接口可以支持实施例与一个或多个人类用户之间的交互。用户接口可以包括命令行接口、图形用户界面(GUI)、自然用户界面(NUI)、语音命令界面、和/或其他用户界面(UI)呈现,它们可以作为不同的选项被呈现或者可以被集成。
系统管理员、网络管理员、软件开发者、工程师和最终用户都是特定类型的用户104。代表一个或多个人的自动代理、脚本、回放软件等也可以是用户104。存储设备和/或网络设备在一些实施例中可以被视为外围设备,在其他实施例中可以被视为系统102的一部分,这取决于它们与处理器110的可分离性。例如,图1中未示出的其他计算机系统可以使用经由网络接口设备到网络108的一个或多个连接以技术性方式与计算机系统102或与另一系统实施例交互。
每个计算机系统102包括至少一个处理器110。与其他合适的系统一样,计算机系统102也包括一个或多个计算机可读存储介质112。介质112可以是不同的物理类型。介质112可以是易失性存储器、非易失性存储器、就地固定介质、可移动介质、磁性介质、光学介质、固态介质、和/或其他类型的物理持久性存储介质(与仅传播介质信号相反)。具体地,当被插入或以其他方式被安装时,所配置的介质114(诸如便携式(即,外部的)硬盘驱动器、CD、DVD、存储棒或其他可移动非易失性存储介质)可以在功能上成为计算机系统的技术性部分,使其内容是可访问的,以供与处理器110交互并且由处理器110使用。可移动的所配置的介质114是计算机可读存储介质112的示例。计算机可读存储介质112的其他一些示例包括内置的RAM、ROM、硬盘、以及由用户104不随时可拆卸的其他存储器存储设备。为了符合当前的美国专利要求,在美国未决或已批准的任何权利要求下,计算机可读介质、计算机可读存储介质、或计算机可读存储器都不是信号本身、或者仅能量。
例如,介质114配置有由处理器110可执行的二进制指令116;“可执行的”在本文中在广义上使用以包括例如机器代码、可解释代码、字节代码、和/或在虚拟机上运行的代码。介质114还配置有数据118,数据118通过指令116的执行而被创建、被修改、被引用、和/或以其他方式用于技术效果。指令116和数据118配置它们驻留在其中的存储器或其他存储介质114;当该存储器或其他计算机可读存储介质是给定计算机系统的功能性部分时,指令116和数据118也配置该计算机系统。在一些实施例中,数据118的一部分代表真实世界项,诸如产品特性、库存、物理测量、设置、图像、读数、目标、体积,以此类推。这样的数据还会通过备份、还原、提交、中止、重新格式化、和/或其他技术性操作被转换。
尽管可以将实施例描述为由计算设备(例如,通用计算机、服务器、或群集)中的一个或多个处理器执行的软件指令来实现,但是这种描述并不表示穷尽所有可能的实施例。本领域技术人员将理解,相同或相似的功能通常也可以直接在硬件逻辑中全部或部分地被实施以提供相同或相似的技术效果。备选地,或除了软件实现以外,本文中描述的技术功能性可以至少部分由一个或多个硬件逻辑组件执行。例如,并且在不排除其他实现的情况下,实施例可以包括硬件逻辑组件110、128,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、系统片上组件(SOC)、复杂可编程逻辑设备(CPLD)和类似组件。例如,可以基于实施例的组件的输入、输出、和/或它们的技术效果来将它们分组为交互功能模块。
除了处理器110(例如,CPU、ALU、FPU和/或GPU)、存储器/存储介质112以及显示器126以外,操作环境还可以包括其他硬件128,例如,诸如电池、总线、电源耗材、有线和无线网络接口卡。名词“屏幕”和“显示器”在本文中可互换地被使用。显示器126可以包括一个或多个触摸屏、响应于来自笔或平板电脑的输入的屏幕、或仅用于输出的屏幕。在一些实施例中,诸如人类用户I/O设备(屏幕、键盘、鼠标、平板电脑、麦克风、扬声器、运动传感器等)的外围设备106将与一个或多个处理器110和存储器进行可操作的通信。软件过程可以是用户104。
在一些实施例中,该系统包括由网络108连接的多个计算机。联网接口设备可以使用组件(诸如分组交换网络接口卡、无线收发器、或电话网络接口)来提供对网络108的访问权,例如,组件可以存在于给定计算机系统中。然而,实施例还可以通过直接存储器访问、可移动非易失性介质、或其他信息存储检索和/或传输方法来传达技术数据和/或技术指令。
本领域技术人员将理解,本文中在“操作环境”下呈现的前述方面和其他方面可以形成给定实施例的一部分。本文档的标题并非旨在将特征严格分类为实施例和非实施例特征集。
一个或多个项在附图中以虚线形式示出,或者在括号内列出,以强调它们不一定是所示操作环境的一部分或所有实施例的一部分,而是可以与操作环境中的项或本文中讨论的一些实施例互操作。在任何附图或任何实施例中,并不必然要求非虚线或括号形式的项是必需的。特别是,图1是为了方便起见而提供的;在图1中包括项并不表示该项或该项的所描述的用途是在本发明之前已知的。
跟踪环境
图2和3分别示出了实时过程环境;图2示出了被管理代码208,而图3示出了本机代码308。这些环境200、300也在上面进行了详细讨论。这里特别感兴趣的是跟踪器204和由跟踪器204产生的跟踪220。跟踪器204和跟踪220可以包括熟悉的方面,但是它们也将反映并且受益于本文中教导的选择性跟踪创新。
在各个环境200、300中,存在跟踪器204。跟踪器204最初被设计和实现或者已经被适配为执行如本文中教导的选择性跟踪。调试器202也可以存在于环境200、300之一或两者中。如果存在,则调试器可以与跟踪器集成以在调试期间执行跟踪,或者调试器仅能够读取由跟踪器先前创建的跟踪220。
跟踪
如图4所示,跟踪220可以存储在一个或多个文件420中,并且可以包括各种种类的跟踪数据、以及支持或界定对跟踪数据的搜索的元数据。跟踪220的一部分或全部也可以驻留在RAM中。跟踪数据的一些示例包括精确到位的跟踪数据422(诸如低级指令及其操作数的副本)、可以用于相对于彼此对跟踪数据项进行排序的时间码424、存储器快照216或转储218、到原始跟踪数据中的索引430、以指定间隔被插入到原始跟踪数据中的关键帧432、由调试对象在跟踪期间所执行的代码434的副本、堆栈活动436、由调试对象在跟踪时读取或写入的数据流438、以每个核心440或每个插槽(多个核心)442为基础的处理器活动、在跟踪时的线程活动444、在跟踪时的寄存器读取和写入446、将存储器地址448与指令450和一个或多个值452以及可选地还与时间码424相关联的元组456、以及在跟踪中捕获的其他454读取或写入或值或操作码。在一些实施例中,项216、422、434、436、438、440、442、444、446、456中的任何一个项的实例符合跟踪“入口”458。在一些中,本身表示跟踪程序的状态改变的跟踪数据454的任何最小部分符合跟踪“入口”458。跟踪中缺少某些数据也可以被认为是状态信息,例如时间码序列中的间隙428。
一些跟踪过程仅记录两种数据。所记录的一种数据是潜在地在多个线程上并行执行的代码指令116的执行。所记录的另一种数据是在执行时间在离散点处获取的存储器的特定块的快照216,例如,以在选择性记录被发起时捕获堆栈的一部分。然而,其他跟踪过程记录不同或附加种类的数据,如图4所示。在一些情况下,跟踪包含所有被记录的指令及其所有输入和输出的有效表示。通过依赖于(多个)处理器110的确定性并且主要记录基于该确定性不能推断的信息以及已经记录在跟踪220中的信息,可以使跟踪220的记录高效。大部分跟踪220在一些实现中是数据,而不是所执行的代码指令;这样的数据通常是非确定性的。跟踪可以主要是种子数据加上非确定性信息。在一些情况下,仅将命中被跟踪的(多个)处理器的信息记录到跟踪220中,例如,在跟踪中进入对处理器寄存器中的值V的读取,但是值V从寄存器到存储器位置X的写入不必被进入到跟踪中。如果对X的写入操作在被跟踪的程序的行为中有所不同,那是因为,在某个时间,写入值从X返回到处理器寄存器中,在该某个时间,如果仍然启用跟踪,则跟踪220中的入口可以被制作。
图5示出了可以被跟踪并且因此服从根据本文中的教导进行检查的各种存储器112。所示的存储器单元502的示例包括堆栈504(包括诸如其基地址506和所分配的堆栈帧508的数据)、诸如对象512的堆内容510、或诸如垃圾收集数据的元数据、高速缓存514、处理器寄存器516、诸如属性518的对象成员、ROM 520或RAM524中的可寻址单元、可移动或第三层存储器522、本地存储器526和全局存储器528。存储器单元可以具有一个或多个特性530,特性530增加或减少存储器单元的可访问性,例如,存储器可以在内核空间中,可以被共享,可以服从DMA,等等。
图6示出了可以在给定跟踪220中捕获的线程602活动信息444。示出了线程标识符604、线程状态指示606、线程的可执行代码608、以及存储器单元502状态信息610(诸如线程局部变量及其标识符)。
更多关于系统
本文中提供了示例以帮助说明技术的各个方面,但是本文档内给出的示例并未描述所有可能的实施例。实施例不限于本文中提供的特定实现、布置、显示、特征、方法或场景。给定实施例可以包括例如另外的或不同的技术特征、机制、序列或数据结构,并且可以以其他方式背离本文中提供的示例。
图7示出了如本文中教导的被配置用于选择性跟踪的系统102。使用一个或多个指定标准704将代码的一个或多个部分702指定用于跟踪。例如,标准704可以包括文件名、对象名、方法名、模块名、例程名、或开发者希望包括在跟踪中的部分702的其他标识的列表。标准还可以或备选地包括位于过程的代码内的属性或特殊指令,这些属性或特殊指令可以在过程执行期间由运行时或调试器标识并且用于触发跟踪。本文中的“包括在跟踪中”和类似短语表示当在指定部分中的代码执行时启用或将启用跟踪。特别是,标准704可以指定“用户代码”,使得执行跟踪基本上限于被认为是“用户代码”的软件,其中“基本上”是指跟踪代码的90%(或其他特定管理员选择的值)是用户代码。符合的用户代码可以由被跟踪的软件的开发者定义为所配置的“包括列表”,定义为一组模块、命名空间或类名称。也可以通过排除众所周知的标准库来自动地确定。在执行的线程退出“用户代码”之后,跟踪会暂时暂停,并且当重新进入用户代码时恢复。一些实施例支持基于用户配置的范围执行跟踪。用户可以将跟踪配置为在短时间期间启用,例如,以供单个功能的执行、单个Web请求的执行,或在过程代码中的用户定义的点之间执行。
过程的其他部分706可以隐式地或显式地被指定用于从跟踪排除。例如,开发者可以设置指定标准704,以从跟踪排除以下中的任何一个或全部:非用户代码库708(诸如标准库或第三方库)、内核120代码、编译器710代码(包括例如预处理器、编译器本身、汇编器、链接器、解释器)、或垃圾收集代码712。
除非另有说明,否则将部分706从跟踪排除是目标或偏好,但不是必需的。也就是说,相对于包括不足,期望本文中的教导的很多(如果不是全部)实现将倾向于在跟踪中过度包括。通过设计,这些实现将在以下基础上进行操作:包括比指定的更多的跟踪比从跟踪中省略被指定用于跟踪的内容要好。然而,本文中的教导也可以应用于其他实现中。
所示系统102包括配置有跟踪控制器700的跟踪器204。跟踪器204的方面可能是熟悉的,而其他方面包括或使用选择性跟踪修改714。熟悉的跟踪器可以具有跟踪启用器718、跟踪禁用器716和跟踪状态730,例如,尽管根据本文中的教导先前没有使用它们用于选择性跟踪。可以包括在跟踪控制器700中或由跟踪控制器700使用的创新性选择性跟踪修改714的一些示例包括与距离变量修改器724和停止跟踪值722、阈值726及728相协调的距离变量720、其例程在功能上等同于结合图9描述的那些的代码、改变结合图10描述的跟踪状态730的代码、计数确保代码1120、实现一个或多个调节条件1210的代码、以及如结合图13-16中的一个或多个图所描述地那样来操作的代码。
特别地,选择性跟踪修改714包括或使用距离变量720。在跟踪过程中可以有单个距离变量,或者可以有多个距离变量,例如每个线程一个。为了清楚起见,本文中的讨论假定每个过程具有单个距离变量,但是当使用两个或更多个可以独立地禁用跟踪的距离变量来实现选择性跟踪时,本领域技术人员将很容易应用这些教导。本领域技术人员还将理解,在给定实现中,可以赋予距离变量各种名称。在这里,它被称为“距离变量”,只是为了提醒人们其用法的一个描述:一种描述合适用途的方式是将距离变量解释为距将要关闭跟踪的操作的计算性距离的度量。距离变量中的值越大,将要执行的跟踪越多,相反,当距离变量达到零(或某个其他停止跟踪值722)时,将禁用跟踪。
图8示出了两个对比系统,以便强调本文中描述的创新的计算优势。左边是配置有距离变量720的系统102,右边是缺少距离变量和其他选择性跟踪修改714的变型802。在每个系统中,至少对过程206的指定部分702执行跟踪。在每种情况下,跟踪具有相关联的计算性成本804,例如所执行的处理器周期的数目。如图13中的示例所示,在具有距离变量的系统中进行跟踪的计算性成本806将趋于小于没有距离变量和其他选择性跟踪修改714的系统802的计算性成本808,因为启用跟踪的调用较少并且禁用跟踪的调用较少。一种折衷是,当使用选择性跟踪修改714时,与不使用时相比,跟踪220将倾向于较大。然而,通过设置阈值726、728,可以在跟踪的大小上施加控制,以平衡跟踪大小的增加与跟踪计算性成本的减少。
图9示出了跟踪控制器700的特定设计,应理解,其他设计也可以利用本文中提出的教导并且根据图10、13-16所示的各种方法进行操作。图9所示的例程和参数是特定实现示例的概括。该特定实现示例包括具有下面描述的函数的选择性跟踪接口714,其运行在基础执行跟踪技术204之上。基础跟踪技术204可以提供:例如,在运行Microsoft环境(微软公司的商标)的系统上进行跟踪的Windows事件跟踪(ETW)(又称为“时间旅行跟踪”或称为“时间旅行调试”的一部分),在运行环境(分别为Efficios Inc.和Linus Torvalds的商标)的系统上进行跟踪的针对类似于环境(分别为Oracle America,Inc.和X/Open Company Ltd.Corp.的商标)的跟踪、以及其他跟踪技术204。
该示例中的跟踪控制函数包括下述。
SetThreadInstructionsToRecord(threadInstructions):高速缓存应当在线程上记录的全局指令的数目。该高速缓存是线程本地的,并且对记录没有直接影响。threadInstructions的值在逻辑上可以是无限的。
GetThreadInstructionsToRecord():返回由SetThreadInstructionsToRecord()高速缓存的值。
SetMaxInstructionsToRecord(maxInstructions):指导基础跟踪技术在当前线程中执行了maxInstructions指令之后停止记录。
GetRemainingInstructionsToRecord():返回在停止记录之前由基础跟踪技术将在当前线程上记录的指令的数目。
TryStartRecordingCurrentThread():指导基础跟踪技术开始记录当前线程的执行(如果尚未记录的话)。
在该示例中,配置信息704被提供给系统102,以指定过程中的哪些函数被认为是“用户代码”。具体地,在该示例中,用户代码被指定用于跟踪,并且未明确被指定用于跟踪的过程的所有代码被隐式地指定为不用于跟踪。
在根据该示例的操作中,在执行时间处对被认为是“用户代码”的每个例程译码。在线程的方便的早期执行点,利用足够大数目的threadInstructions来调用SetThreadInstructionsToRecord(threadInstructions)。管理员104可以鉴于上面提到的跟踪大小与计算性成本之间的权衡、以及译码、注入和记录技术204的能力来确定构成本文中引用的早期、方便、足够大、足够小、以及类似特征的内容。
在函数的每个入口点1202(函数的开头、来自调用的返回点、捕获处理器等),插入1408代码以:
调用SetMaxInstructionsToRecord(GetThreadInstructionsToRecord()),并且
调用CallTryStartRecordingCurrentThread()。
在函数的每个出口点1204(返回、函数调用、异常抛出等)之前,插入1408代码以:
调用SetThreadInstructionsToRecord(GetThreadInstructionsToRecord()-GetRemainingInstructionsToRecord()),并且
调用SetMaxInstructionsToRecord(e),其中e是足够小的数字。
注意,例如,如果GetThreadInstructionsToRecord()返回逻辑上无限的数字,则调用可以高速缓存指定无穷大的值。
将每个新插装的功能重新编译1646为机器可执行二进制代码。对用户代码功能的调用被重定向1648以执行新编译的可执行代码。
当执行结果代码时,距停止记录事件或调用716的距离随着距离变量maxInstructions改变值而变化。在进入指定部分702时,距离增加,然后在退出时减小。如果出口将控制权传递给另一指定部分,则距离会再次增加。如果退出没有将控制权传递给另一指定部分,则倾向于发生二者之一(在该示例中,为简单起见,忽略了该调用中另一调用的可能性)。
一种可能性是,未指定用于跟踪的所进入的部分706可以足够小(足够少的指令),从而在maxInstructions达到零并且关闭跟踪之前将控制权传递回指定部分;在重新进入指定部分之后,maxInstructions将再次增加。在这种情况下,额外跟踪(即,对未指定用于跟踪的代码进行的跟踪)将包括未指定用于跟踪的所进入的部分706的遍历。
另一可能性是,未指定用于跟踪的所进入的部分706足够大使maxInstructions会持续运行直到其达到零。如果在控制仍在所进入的部分706中时发生这种情况,则当maxInstructions达到零时,跟踪控制器700关闭跟踪。在这种情况下,额外的跟踪将包括所进入的部分706的初始部分但不是全部的遍历的记录。
控制可以最终返回到另一指定部分702,在这种情况下,将再次启用跟踪,并且maxInstructions将被赋予相对较大的值,尽管不一定是上次给出的相同大值。或者该过程可以结束或终止,而无需控制权再次传递给另一指定部分702,在这种情况下,跟踪将保持关闭,或者至少不会由选择性跟踪机制700重新启用。一些其他机制可以重新启用跟踪,但是,在这种情况下,最好还是将其他机制与跟踪控制器700配合使用,以避免对跟踪220产生意外或不希望的影响。
考虑到前述情况,并且重新关注图9,SetThreadInstructionsToRecord()例程是set-N例程902的示例,参数threadInstructions是local-N参数904的示例,线程高速缓存变量是局部变量N 908的示例。GetThreadInstructionsToRecord()例程是get-N例程906的示例。SetMaxInstructionsToRecord()例程是set-DV例程910的示例,其参数maxInstructions是tracing-max参数912的示例。GetRemainingInstructionsToRecord()例程是get-DV例程914的示例。TryStartRecordingCurrentThread()例程是try-to-trace例程916的示例。这里,除了已经给出的特定示例,还提供了概括项902-916,以便强调本文中提供的教导不限于任何特定命名约定、大写方案、编程语言、操作系统、API或其他实现特殊性。
图10示出了跟踪状态图1000,其示出了一些实施例的操作。跟踪状态图1000示出了在给定线程的上下文中的跟踪,并且要理解,本文中的教导可以应用于仅具有单线程的环境并且应用于多线程环境中。图10状态机的实例可以在具有相应线程局部距离变量DV的线程之间独立使用。如在图10的右侧的中心附近所示,将要被跟踪的过程206的执行开始于在关闭状态1004下的跟踪,例如,该关闭状态也可以称为跟踪禁用状态或非跟踪状态或非记录状态。过程的一个或多个指令116在跟踪状态不改变的情况下执行1006。在某一点上,在该示例中,在执行1006一个或多个指令之后,过程的执行到达try-to-trace()例程916。try-to-trace()例程916的执行1008确定距离变量720(在图中又称为“DV”)等于零。在该示例中,零是停止跟踪值722。因此,try-to-trace()例程将距离变量设置为非零值,并且调用1010在该示例中实现或调用跟踪启用器718的trace-on例程()。如图10所示,跟踪状态730然后转换到跟踪开启状态1002,例如,跟踪开启状态1002也可以称为跟踪启用状态或记录状态。
控制权被传递到图10左上方所示的执行记录递减测试循环。过程的一个或多个指令116执行1006,并且使用底层跟踪技术204执行对应记录1012。个体指令116与跟踪220中的入口之间的对应可以是一对一的,也可以不是一对一的。例如,跟踪技术204可以通过记录每M个指令来执行采样1636,其中整数M>1是先前指定的采样周期。例如,采样周期M由管理员104设置,或者由基础跟踪技术204的默认或配置参数设置。当执行记录1012时,通过递减1014距离变量来进行到记录禁用的距离的对应减小。如果距离变量达到零,则跟踪状态转换回到跟踪关闭状态1004,并且调用1016跟踪禁用器716。如果该过程正常结束或被终止,则跟踪状态730保持与该过程结束时的状态相同。
当跟踪开启时,该过程可能会遇到try-to-trace()调用。如图10的左下部分所示,在该状态1002中,try-to-trace()的执行1008将确定距离变量为非零,并且因此不会改变距离变量。控制权将返回到图10左上方所示的execute-record-decrement-test循环,该循环执行1006过程的部分,记录1012对应跟踪数据,递减1014距离变量,并且测试距离变量以查看它是否已经达到停止跟踪值(在该示例中为零)。
如图7所示,可以指定要被跟踪的过程的代码的一些部分702,并且可以隐式地或显式地将其他部分706指定为当前不感兴趣并且因此不进行跟踪,除非可能偶然地将其标记为距离变量720使用的副产品。部分702、706可以是代码单元,诸如线程、库等。也就是说,跟踪指定704可以隐式地或显式地应用于部分702、706,部分702、706的边界是某些代码单元1100的边界,其中一些在图11中示出。
如图11所示,代码单元1100可以是以下中的一个或多个,或者是以下中的一个或多个的集合:线程602、函数1102、或其他例程1104、协程1106、异常处理器1108、中断处理器1110、虚拟方法1114的实现1116、回调1118、库1122、模块1124或另一代码单元1112。就跟踪而言,整个内核120可以是代码单元。
在图11中也示出了计数确保代码1120,但这是为了当列出对代码可以进行分类的方式时的方便和完整性。计数确保代码1120包括诸如set-DV例程910的代码,该代码存在以实现跟踪控制,这与是跟踪修改714的注入之前的过程的部分相反。
图12示出了在选择性跟踪的讨论中可能会感兴趣的过程代码的一些方面1200。过程206代码包括指令116和数据118。该过程可以包括例程1104和其他代码单元1100,其具有控制权可以在此处进入1640代码单元的一个或多个入口点1202、以及控制权可以在此处退出1642代码单元的一个或多个出口点1204。控制权可以例如在调用者1206调用1638例程之后在例程1104的顶部进入1640代码单元,并且可以在到达例程的末尾之后或在调用1638另一例程时退出1642例程。“控制权”是指当前执行点1208,即,过程206的执行中的点,其向技术人员或系统或这两者指示以下中的至少一项:什么指令最近完成执行,什么指令当前正在执行,接下来将执行什么指令。例如,可以通过将执行时间点利用其上下文记录为时间码424(诸如当前线程ID 604)来记录控制点。
图12还示出了影响或确定一个或多个调节条件1210的一些项。调节条件表示并且实现了跟踪的计算性成本804、跟踪220的大小、以及关于开发者想要跟踪或不想跟踪什么的指定704的平衡。例如,可以由管理员或默认设置调节条件1210。它们可以根据实验数据来确定,诸如提供计算性成本的简档信息、或提供关于例程的长度和长度分布的统计的静态分析数据。调节条件1210可以在所跟踪的过程的整个特定执行中是恒定的,或者是变化的。调节过程的执行的选择性跟踪所涉及的项可以包括以下中的一项或多项:针对距离变量的值的低计数阈值728、针对距离变量的值的高计数阈值726、距离变量720的当前值1216、关于例程和其他代码单元1100在所跟踪的过程中的计算性成本的信息1218、以及关于关闭跟踪或打开跟踪的计算性成本的信息1220。
作为调节1210阈值726、728的进一步说明,考虑以下内容。假定停止跟踪以不记录特定函数(并且然后并且然后稍后重新启动)的计算性成本804、1220是记录1000指令的等价。开发者不想记录的函数的指令计数分布也是一个考虑因素。例如,假定开发者从记录会排除的函数的90%需要100个或更少的指令以记录。调节可以询问将低阈值728(或自动停止记录之前的指令的另一计数)设置为101而不是1是否在计算性成本上有意义。在一些架构中,如果要继续记录的标记必须在函数prolog之后,则可能不能够将该数字设置为低于阈值,因此至少低的必须足够高以适合任何函数prolog以及继续记录的调用,以避免在插装有机会告诉框架继续前进(将其设置回高)之前停止记录。除了那些架构,记录开发者实际上想排除的函数的90%计算性地比排除所有函数要便宜。因此,相关调节信息1218包括这样的可能性:记录被指定用于排除的函数将比排除便宜,并且该信息可以用于减少或最小化记录的开销。
在这个调节讨论的上下文中,估计降低101成本是每个函数的平均成本(100*0.9+1101*0.1)等于每个函数200.1个指令。如果被指定用于排除的所记录的函数的任一函数具有少于100个指令(这似乎很可能),则该数字实际上会更低。实际数目是被指定用于排除的每个函数的所记录的平均指令计数,而低为1的成本是每个函数1001个指令。因此,使用低于给定数的被指定用于排除的函数的概率1218,来支持选择低作为优选数目。
假定在将数字设置为101之后,实施例发现实际上89%的函数适合80个指令。然后,该实施例可以动态地将低调至81(实际上对于该数据而言是更好的选择)。也可以动态地增加指令的数目,例如,如果一个实施例观察到对于3%的函数(那些的30%其没有被记录),该记录停止在该函数的结尾处,则该实施例可以增加低值来完成这些。
概率1218的分布可以以多种方式收集。一种方式是同一记录会话中的先前执行。调节信息的其他来源可以以跨行业中的函数、代码库中的函数、或来自该区域中的先前的记录的函数的指令分布的通用统计信息的形式是可用的。
参考图1-12,一些实施例使用或提供一种选择性执行跟踪系统,该系统包括:至少一个处理器110和与处理器可操作通信的数字存储器112。可执行代码208、308被配置为在执行时执行计算机实现的过程206。可执行代码具有被指定用于跟踪的多个部分702和未被指定用于跟踪的多个其他部分706。该系统还包括执行跟踪器204,具有跟踪禁用器716,被配置为在执行时禁用执行跟踪器的跟踪,以及跟踪启用器718,被配置为在执行时启用执行跟踪器的跟踪。该系统还包括跟踪控制器700。跟踪控制器700包括距离变量720,该距离变量720具有值,该值指示与跟踪禁用器的执行的当前计算距离。跟踪控制器700被配置为在执行时结合具有停止跟踪值722的距离变量来调用跟踪禁用器,并且随后结合不具有停止跟踪值的距离变量来调用跟踪启用器。该系统的距离变量修改器724被配置为随着过程206的可执行代码的执行而递增地移动距离变量720以更接近停止跟踪值。
在一些实施例中,该系统的特征还在于,该系统的有距离变量成本806小于该系统的无距离变量成本808。有距离变量成本806是执行配置有跟踪控制器700的可执行代码的总计算性成本804,包括:执行跟踪启用器718的初始调用、执行距离变量的修改714、当距离变量达到停止跟踪值722时执行跟踪禁用器716的一个或多个调用、以及执行跟踪启用器的任何后续调用,并且包括当跟踪被启用时的跟踪的计算性成本。无距离变量成本808是执行被配置为没有跟踪控制器700的可执行代码208、308的变型的总计算性成本804,其中距离变量720未被使用,其中跟踪启用器718随每次进入被指定用于跟踪的可执行代码部分而被调用,并且跟踪禁用器716随每次退出被指定用于跟踪的可执行代码部分而被调用,并且包括当跟踪被启用时的跟踪的计算性成本。计算性成本806和808是通过以下中的至少一项来测量的:所执行的指令的总数目、所执行的处理器周期的总数目、经过的总系统时钟时间、跟踪220入口458的数目。
在一些实施例中,被指定用于跟踪的可执行代码的部分702包括被管理代码208,即,被配置为在运行时210的控制下运行的代码,运行时210实施存储器垃圾收集或代码编译,或实施两者。在一些实施例中,被指定用于跟踪的可执行代码的至少一部分702由本机代码308组成,即,被配置为不需要运行时210而运行的代码,运行时210实施存储器垃圾收集或代码编译。
在一些实施例中,跟踪控制器700包括以下各项:set-N例程902,其具有local-n参数904,并且被配置为在执行时将线程局部变量908(在此表示为N)设置为参数local-n的值;get-N例程906,其被配置为在执行时返回线程局部变量N的当前值;set-DV例程910,其具有tracing-max参数912,并且被配置为在执行时将距离变量720设置为参数tracing-max的值;get-DV例程914,其被配置为在执行时返回距离变量720的当前值;以及try-to-trace例程916,其被配置为:如果跟踪尚未启用,在执行时启用执行跟踪器204对当前线程602的跟踪。
在一些实施例中,距离变量720表示要跟踪的指令116的最大数目,并且距离变量修改器724被配置为随着可执行代码执行而递减距离变量。另外,跟踪控制器700被配置为:在执行时结合距离变量达到作为停止跟踪值722的零来调用跟踪禁用器716,并且随后结合距离变量为正来调用跟踪启用器718。所跟踪的过程的可执行代码被配置为(例如,通过跟踪修改714的注入)在执行时执行以下中的至少一项以确保在进入被指定用于跟踪的任何可执行代码部分时距离变量不等于停止跟踪值:确认距离变量为非零,或将距离变量设置为正的高计数阈值726。
在这些实施例的一些中,高计数阈值726满足以下标准中的至少一项:高计数阈值指示逻辑无穷大,高计数阈值超过被指定用于跟踪的可执行代码的任何代码单元1100、702中的指令的数目,高计数阈值超过被指定用于跟踪的可执行代码的任何例程1104、702中的指令的数目,高计数阈值超过可执行代码的百分之九十的例程1104中的指令的数目,高计数阈值超过可执行代码的例程1104中的平均指令数目。特定百分比的例程中的指令的数目以及例程中的平均指令数目分别是关于代码计算性成本的信息1218的示例。
在一些实施例中,跟踪控制器700包括:在代码单元1100的入口点1202处的可执行代码中的外部高计数确保代码1120。高计数确保代码被配置为:在执行时将距离变量720设置为不小于高计数阈值726的值。代码单元包括以下中的至少一项:线程602、函数1102、例程1104、协程1106、异常处理器1108、或中断处理器1110。在这些实施例的一些实施例中,跟踪控制器700包括在对代码单元内的虚拟方法1114进行调用之前的可执行代码中的低计数确保代码1120。低计数确保代码被配置为:在执行时将距离变量720设置为不大于非零低计数阈值728的非零值,低计数阈值小于高计数阈值。虚拟方法的第一实现1116中的可执行代码中的内部高计数确保代码1120被配置为在执行时将距离变量设置为不小于高计数阈值的值,并且虚拟方法的第二实现1116的代码不具有设置距离变量的任何代码。因此,可以跟踪虚拟方法1114的一个或多个实现,而该虚拟方法的一个或多个其他实现没有被跟踪,或者至少没有被指定为要被跟踪。
在一些实施例中,跟踪控制器700包括异常处理器1108中的高计数确保代码1120。高计数确保代码被配置为在执行时将距离变量设置为不小于高计数阈值726的值。因此,可以确保在处理异常的同时继续进行跟踪,而不会引起调用和执行异常处理器内部的跟踪启用器718的计算性成本。而是,通过将距离变量设置得足够高以跟踪异常处理器1108的期望部分(通常是全部)来继续跟踪。
本领域技术人员将理解,其他系统也在这里提出的教导的范围内。特别地,在一些情况下,其他系统可以使用执行选择性跟踪的跟踪控制器代码,而在一些情况下不使用特定的API、变量、阈值、跟踪文件内容、或本文中说明的示例中的指定标准。使用所提供的选择性跟踪教导的任何方面或实现的系统或装置都在本公开的范围内,而无论它们是否在本文中的示例中。与以下内容相一致的任何权利要求都应当理解为在本文中教导的权利要求中:包括跟踪修改或其他跟踪控制器代码的选择性跟踪系统,该其他跟踪控制器代码被配置为在与处理器一起执行时执行选择性跟踪操作,该选择性跟踪操作通过使用如本文中教导的距离变量来替换或减少跟踪禁用器的调用。
图13示出了成本比较1300,该成本比较1300是通过使用距离变量来替换或减少跟踪禁用器的调用的很多可能示例之一。利用距离变量(以“DV”指示),仅使用一个跟踪启用器调用和一个跟踪禁用器调用来跟踪例程A和C2,如图13的左侧所示。不利用距离变量,使用四个跟踪启用器调用和四个跟踪禁用器调用来跟踪相同的例程A和C2,如图13的右侧所示。
方法
涉及本文中教导的选择性跟踪工具和技术的方法可以分为两个不同但密切相关的类别:将系统配置用于选择性跟踪的方法、以及在适当配置的系统中执行选择性跟踪的方法。下文以及本文中其他地方,例如结合图9、10和13,讨论每种方法。
图14是示出选择性跟踪配置方法1400类别的示例的流程图。该方法将系统102配置1402用于进行选择性跟踪。也就是说,方法1400将系统102配置为通过使用1406距离变量720和其他跟踪修改714(例如,停止跟踪值722、距离变量修改器724、阈值726、728、以及用于设置和测试距离变量并且根据距离变量的值启用或禁用跟踪的例程)来控制1404跟踪1012。这些可以包括例如set-DV例程910、get-DV例程914和try-to-trace例程916。
所示出的方法1400在过程的代码208、308中的第一位置1412处嵌入(又称为“插入”或“注入”)高计数确保代码1410。该高计数确保代码1410在图13中被示出为在TRACE-ON()调用之后的“DV=HIGH”,而在图9的讨论中被示出为对针对threadInstructions具有相对较大值的SetThreadInstructionsToRecord(threadInstructions)的调用。在一些但并非全部情况下,方法1400还在过程的代码208、308中的第二位置1412处嵌入1408低计数确保代码1414。该低计数确保代码1414在图13中被示出为在进入B1的调用之前的“DV=LOW”,而在图9的讨论中被示出为调用SetMaxInstructionsToRecord(e),其中e是相对较小的数字。
顺便说一句,一些实施例经由代码注入在过程运行时处做出跟踪决定。这样的一个技术结果是,在开发和生产期间可以将相同的代码和二进制文件用于记录,而无需对源代码进行任何改变以准许跟踪。
所示出的方法1400将过程的代码208、308与指令计数器1418、或其他硬件128、或硬件时钟或寄存器或电路与递减软件的组合相关联1416。因此,如例如结合图10的执行记录递减测试循环所讨论的,随着过程代码执行,通过使距离变量更接近停止跟踪值来自动修改距离变量。图13没有显式地说明DV递减,以避免图13易读性降低。相反,可以理解,DV随着代码执行而递减。
所示出的方法1400将执行跟踪器204连接1420到可执行代码。例如,这可以通过使用熟悉的方法来完成,以连接ETW工具、工具(Efficios公司的商标)、工具(甲骨文美国公司的商标)或其他熟悉的跟踪能力。一些实施例还向跟踪器204安装1422回调1118,例如作为try-to-trace()例程916实现的部分。
所示出的方法1400将跟踪控制器700配置1424为当距离变量达到1428停止跟踪值时禁用1426跟踪,并且在另一执行时间处启用1430跟踪。例如,该步骤可以例如通过插入代码来完成,该代码将过程配置为执行状态730转换并且以其他方式进行操作,如图10所示。图13和图9的讨论提供了将系统配置1424为结合距离变量720的状态(是否是停止跟踪值)来使跟踪的启用和禁用发生的附加示例。
图15是示出选择性跟踪方法1500的示例的流程图,该方法在由方法1400或另一种合适的方法配置的系统中控制1404跟踪1012。如本文中教导的,将系统配置用于选择性跟踪的任何方法都是方法1400的合适替代。
图15所示的方法包括:随着过程执行,在入口点1202附近将距离变量设置1502为高值,并且调用1008try-to-trace例程916。例如,这一点通过执行图13左侧示出的下述项来说明:
进入C2:被指定
DV=高
TRY-TO-TRACE()[已经开启]
图15所示的方法包括:随着过程执行时,在出口点1204附近将距离变量设置1504为低值。在图13的左侧,例如恰好在来自例程A的每个出口之前执行DV=LOW来说明该设置1504步骤,出口由ENTER B1:NOT DESIGNATED和ENTER C2:DESIGNATED指示。
图15所示的方法包括:执行1006指令,以及随着过程执行递减1014距离变量。在图13的左手边,这一点例如通过任何一项进行说明,因为它们全部被执行并且距离变量DV随着这些项执行而隐式地递减。
图15所示的方法包括:当距离变量不为零并且跟踪被启用时,将执行信息记录1012到跟踪220中。在图13的左侧,这一点例如通过TRACE-ON()与TRACE-OFF()之间的任一项示出,因为它们全部是在DV非零并且跟踪被启用时被执行的。为了帮助强调具有DV的行为(图13的左侧)与不具有DV的行为(图13的右侧)的不同,在图13中还示出了显式RECORD操作。因此,在具有DV时,对B1进行记录(由RECORD B1指示),而在不具有DV时,不记录B1(在ENTER B1:NOT DESIGNATED之前,通过TRACE-OFF()调用来关闭跟踪)。
图15所示的方法包括:当距离变量达到1428零或另一停止跟踪值时,禁用1426跟踪。例如,这一点通过图13左侧示出的以下项进行说明:
EXECUTE UNTIL D==0
TRACE-OFF()
除非另有说明,否则附图中所示或以其他方式公开的技术方法将由例如跟踪控制器700或具有跟踪修改714的已配置1402的系统102自动地执行。在牵涉到人类管理员或其他人类的动作的范围内,方法也可以部分自动地和部分手动地执行,例如,一个人可以将指定标准704录入到工具用户界面中,然后启动正在被跟踪的过程206的执行,这使得工具122配置1402过程用于跟踪,然后被执行所配置的过程。但是,这里没有考虑作为创新的方法是完全手动的。在给定实施例中,方法的零个或更多个示例步骤可以被重复,可能具有不同的参数或要操作的数据。实施例中的步骤也可以以与图中所示不同的顺序进行。步骤可以顺序地、以部分重叠的方式或完全并行地执行。在给定方法期间执行步骤的顺序可以从一种方法的执行到另一种方法的执行而变化。如果所执行的方法是可操作的并且符合至少一项权利要求,则步骤也可以被省略、组合、重命名、重新分组、或以其他方式偏离所示出的流程。
一些实施例使用或提供计算机实现的过程以供选择性执行跟踪。这个过程使用距离变量720,该距离变量720的值指示在计算性成本上与禁用跟踪的相对距离。该存储器检查过程包括在第一位置处在可执行代码中嵌入1408非零高计数确保代码1410,该非零高计数确保代码1410被配置为在执行时将距离变量设置1502为不小于高计数阈值726的值,将指令计数递减机构724或其他递减机构724与可执行代码相关联1416,该指令计数递减机构724或其他递减机构724被配置为随着可执行代码执行而递减1014距离变量,将执行跟踪器204连接1420到可执行代码,将跟踪控制器700配置1424为:当距离变量达到停止跟踪值(诸如零)时,禁用1426利用执行跟踪器的跟踪,并且将跟踪控制器配置1424为:当距离变量不同于停止跟踪值时,在可执行代码的执行的至少部分期间启用1430利用执行跟踪器的跟踪。
一些实施例还包括将低计数确保代码1414在第二位置处嵌入1408可执行代码中,该低计数确保代码1414被配置为在执行时将距离变量设置1504为不大于非零低计数阈值728的非零值。低计数阈值小于高计数阈值。
可以使用各种标准来确定关于距离变量值的阈值和其他约束。在一些实施例中,以下标准至少之一被满足:被配置为禁用执行跟踪器的跟踪的跟踪禁用器中指令的数目大于低计数阈值;被配置为禁用执行跟踪器的跟踪的跟踪禁用器中指令的数目大于第二位置处的距离变量的值;在第二位置处调用跟踪禁用器以禁用执行跟踪器的跟踪的计算性成本大于执行从第二位置开始的M个指令的序列的计算性成本,其中M等于第二位置处的距离变量的值;第二位置处的距离变量的值不大于可执行代码中每个例程的平均指令数目;低计数阈值不大于可执行代码中每个例程的平均指令数目;对未被指定用于跟踪的例程进行跟踪的统计性执行成本小于在第二位置处调用跟踪禁用器以禁用例程的跟踪的计算性成本。
在一些实施例中,将执行跟踪器204连接1420到可执行代码208、308包括在可执行代码中安装1422对执行跟踪器的回调1118。回调被配置为在执行时确定是否执行以下中的一项或多项:继续记录、改变距离变量值、停止记录。针对确定的输入是距离变量值和跟踪状态730,例如如图10所示。
本领域技术人员将理解,其他方法也在这里提出的教导的范围内。特别地,在一些情况下,在不使用本文中描述的示例中的特定API、变量、阈值、状态图1000或指定标准的情况下,其他方法可以执行选择性跟踪。使用所提供的选择性跟踪教导的任何方面或实现的方法在本公开的范围内,而无论它们是否在本文中的示例中。与以下内容相一致的任何权利要求都应当理解为在本文中教导的权利要求中:选择性跟踪方法,包括配置具有跟踪修改的系统或执行这种配置的系统,即,配置或执行通过使用如本文中教导的距离变量来替换或减少跟踪禁用器的调用的选择性跟踪操作。
配置的介质
一些实施例包括所配置的计算机可读存储介质112。介质112可以包括磁盘(磁性的、光学的或以其他方式)、RAM、EEPROMS或其他ROM和/或其他可配置的存储器,尤其包括计算机可读介质(其不仅仅是传播信号或能量)。被配置的存储介质尤其可以是可移动存储介质114,诸如CD、DVD或闪存。通用存储器(可以是可移动的或不可移动的、以及可以是易失性的或非易失性的)可以被配置到使用诸如以下各项的实施例中:诸如具有停止跟踪值722的距离变量720和随着过程执行而将距离变量自动地移向停止跟踪值的修改器724,例程910、914、916,以及具有构成阈值726、728和信息1218、1220的调节条件1210,以数据118和指令116的形式,从可移动介质114和/或其他来源(诸如网络连接)读取,以形成配置的介质。如本文中公开的,所配置的介质112能够引起计算机系统执行技术处理步骤,以供选择性地跟踪计算机过程执行的部分。因此,附图帮助说明所配置的存储介质实施例和过程实施例、以及系统和过程实施例。特别地,图10、14、15、16或本文中另外教导的任何过程步骤可以用于帮助将存储介质配置为形成所配置的介质实施例。
一些实施例使用或提供配置有代码的计算机可读存储介质112、114,该代码在由计算机处理器110执行时执行选择性执行跟踪方法。该方法包括以下内容。在代码单元的入口点处,将距离变量720设置1502为不小于非零高计数阈值726的值,该距离变量测量在计算性成本上禁用跟踪的相对距离。结合将距离变量设置为不小于高计数阈值的值,进行调用,如果跟踪尚未被启用,则该调用支持1430执行跟踪器204最多跟踪距离变量的值数目的指令,并且如果跟踪已经被启用,则使跟踪继续被启用。在代码单元的出口点处,将距离变量设置1504为小于高计数阈值的非零低计数阈值728。随着计算机处理器执行包含代码单元的计算机过程的指令,而自动递减1014距离变量。当距离变量的值为正并且执行跟踪器被启用时,执行跟踪器跟踪1012计算机过程的执行,并且响应于距离变量的值达到1428零而禁用1426对计算机过程的执行的跟踪。
在一些实施例中,选择性执行跟踪方法包括标识1650所指定的例程,即,被指定用于跟踪的例程。该标识基于以下标准704中的至少一项:例程的作者、例程被编写的时间、例程是否被标记为机密、例程是否是运行时的部分、例程是否是所指定的库的部分、例程是否是所指定的命名空间的部分、例程是否具有所指定的参数、例程是否是即时编译器的部分、例程是否是垃圾收集器的部分、例程是否是内核的部分、例程的名称、包含例程的模块的名称、例程的直接调用者、或例程的间接调用者。该选择性执行跟踪方法还包括至少跟踪1012所指定的例程或其他所标识1650的代码单元1100。
在一些实施例中,在代码单元的早期执行点处,选择性执行跟踪方法将在这里表示为N的变量设置1502为不小于高计数阈值的值。变量N对于代码单元是本地的。早期执行点是代码单元的执行中的点,在该点至少以下标准之一被满足:自从代码单元接收到控制权以来,代码单元的不超过十个指令已被执行,自从代码单元接收到控制权以来,代码单元的不超过十分之一的指令已被执行。该示例选择性执行跟踪方法还修改在代码单元的出口点处的代码,以使N的值减去1504该出口点处的距离变量的值,从而将距离变量设置为小于高计数阈值的非零低计数阈值。
在一些实施例中,选择性执行跟踪方法包括产生1012执行跟踪220,该执行跟踪220具有与至少五个指定的例程702、1104的执行相对应的跟踪数据,并且在跟踪数据中具有至少三个间隙428,其中跟踪被禁用1426作为距离变量达到1428零的结果,。
在一些实施例中,选择性执行跟踪方法在计算机过程206的执行期间禁用1426跟踪K次,K为正。特别地,在该示例中,由于距离变量的值达到1428零,所以跟踪被至少禁用了上述K次的一半。
在一些实施例中,响应于将部分706指定为不用于跟踪的标准,选择性执行跟踪方法不跟踪以下中的至少一项:作为被明确标识为从跟踪被排除的库1122的至少部分的代码、作为内核120的至少部分的代码、作为编译器710的至少部分的代码、作为垃圾收集器712的至少部分的代码。
在一些实施例中,高计数阈值726或低计数阈值728或两种阈值在计算机过程的执行期间改变。例如,可以响应于特定于部分代码的调节条件1210来进行阈值的改变。
本领域技术人员将理解,其他配置的介质实施例也处于此处提出的教导的范围内。特别地,其他实施例可以包括被配置为在一些情况下不使用特定API、变量、阈值、状态图1000或本文中说明的示例中的指定标准的情况下执行选择性跟踪的法定介质。使用所提供的选择性跟踪教导的任何方面或实现的方法在本公开的范围内,而无论它们是否在本文中的示例中。与以下权利要求相一致的任何权利要求都应当理解为在本文中教导的权利要求中:一种计算机可读存储介质,其配置有代码,该代码在由处理器执行时执行选择性跟踪方法,该方法通过使用如本文中教导的距离变量来替换或减少跟踪禁用器的调用。
一些附加的组合和变型
代码、变量、数据类型和数据结构、逻辑、组件、假定、通信和/或其功能等价物的这些组合中的任何组合也可以与上述任何系统及其变型组合。过程可以以可操作的任何子集或组合或序列包括本文中描述的任何步骤。每个变型可以单独出现,或者与其他任何一个或多个其他变型组合出现。每个变型可以与任何过程一起出现,并且每个过程可以与任何一个或多个其他过程组合。每个过程或过程组合(包括变型)可以与上述介质组合和变型中的任何一个组合。
结论
尽管在此将特定实施例明确地示出和描述为过程、配置介质或系统,但是应当理解,对一种类型的实施例的讨论通常还扩展到其他实施例类型。例如,结合图9、10、14-16进行的过程描述也有助于描述配置的介质,并且有助于描述与结合其他附图所讨论的那些类似的系统和制造的技术效果和操作。并非必然地,必须将来自一个实施例的限制读入另一实施例。特别地,过程不必限于在讨论诸如配置的存储器等系统或制造时所呈现的数据结构和布置。
本领域技术人员将理解,实现细节可以与特定代码有关,诸如特定API、特定种类的跟踪数据、和特定值,并且因此不一定在每个实施例中都出现。本领域技术人员还将理解,在讨论细节时使用的程序标识符和一些其他术语是特定于实现的,因此不一定与每个实施例有关。尽管如此,尽管这里不一定要求它们存在,但是这样的细节可以通过提供上下文来帮助一些读者,和/或可以说明本文中讨论的技术的很多可能的实现中的一些实现。
本文中对具有一些特征X的实施例的引用以及本文中其他地方对具有一些特征Y的实施例的引用并不排除同时具有特征X和特征Y的实施例,除非本文中明确指出了这种排除。所有可能的否定权利要求限制都在本公开的范围内,因为即使在本文中的任何示例中未给出特定排除,也可以将被规定为实施例的一部分的任何特征从其他实施例中明确删除。术语“实施例”在本文中仅用作“过程、系统、制品、配置的计算机可读介质和/或以与适用法律相一致的方式应用的本文中的教导的其他示例”的更方便形式。因此,给定“实施例”可以包括本文中公开的特征的任何组合,只要该实施例与至少一个权利要求相一致。
在每个实施例中,并非图中所示的每个项都必须存在。相反,实施例可以包含未在图中明确示出的项。尽管此处通过特定示例在文本和附图中示出了一些可能性,但是实施例可以脱离这些示例。例如,示例的特定技术效果或技术特征可以被省略,重命名,不同地分组,重复,在硬件和/或软件中不同地实例化,或者是出现在两个或更多个示例中的效果或特征的混合。在一些实施例中,在一个位置处示出的功能也可以在不同的位置处提供;例如,本领域技术人员认识到,可以在给定实现中以各种方式定义功能模块,而不必从被视为一个整体的交互模块集合中忽略所需要的技术效果。
在全文中通过参考标号对附图进行了参考。在附图或文本中,与给定附图标记相关的措词中的任何明显不一致之处应当被理解为简单地扩大了该数字所参考的范围。即使使用相同的附图标记,给定附图标记的不同实例也可以指代不同的实施例。类似地,给定附图标记可以用于指代动词、名词和/或每个的对应实例,例如,处理器110可以通过执行指令来处理110指令。
如本文中使用的,诸如“一种”和“该”等术语包括所指示的项或步骤中的一个或多个。特别地,在权利要求中,对项的引用通常表示存在至少一个这样的项,而对步骤的引用表示执行该步骤的至少一个实例。
标题仅是为了方便;可以在标题指示该主题的部分之外找到有关给定主题的信息。
所提交的所有权利要求书和摘要是说明书的一部分。
尽管已经在附图中示出并且在上面描述了示例性实施例,但是对于本领域的普通技术人员很清楚的是,在不脱离权利要求中阐述的原理和概念的情况下,可以进行多种修改,并且这样的修改不一定包含整个抽象概念。尽管以特定于结构特征和/或程序动作的语言描述了主题,但应当理解,所附权利要求书中定义的主题不必限于权利要求书中所述的特定技术特征或动作。在给定定义或示例中标识的每个手段或方面或技术效果不必在每个实施例中都存在或被利用。而是,所描述的特定特征以及作用和效果作为示例被公开,以在实现权利要求时考虑。
在法律允许的最大范围内,所有落入整个抽象概念但落入权利要求等同含义和范围之内的改变都应当被包含在其范围之内。
Claims (15)
1.一种选择性执行跟踪系统,包括:
至少一个处理器;
与所述处理器可操作通信的数字存储器;
可执行代码,被配置为在执行时执行计算机实现的过程,所述可执行代码具有被指定用于跟踪的多个部分及未被指定用于跟踪的多个其他部分;
执行跟踪器;
跟踪禁用器,被配置为在执行时禁用所述执行跟踪器的跟踪;
跟踪启用器,被配置为在执行时启用所述执行跟踪器的跟踪;
跟踪控制器,包括距离变量,所述距离变量具有值,所述值指示与所述跟踪禁用器的执行的当前计算距离,所述跟踪控制器被配置为:在执行时结合具有停止跟踪值的所述距离变量来调用所述跟踪禁用器,并且随后结合不具有所述停止跟踪值的所述距离变量来调用所述跟踪启用器;以及
距离变量修改器,被配置为随着所述可执行代码执行而递增地移动所述距离变量以更接近所述停止跟踪值。
2.根据权利要求1所述的选择性执行跟踪系统,其中所述系统的特征还在于,所述系统的有距离变量成本小于所述系统的无距离变量成本,其中:
所述有距离变量成本是执行配置有所述跟踪控制器的所述可执行代码的总计算性成本,包括:执行所述跟踪启用器的初始调用、执行所述距离变量的修改、当所述距离变量达到停止跟踪值时执行所述跟踪禁用器的一个或多个调用、及执行所述跟踪启用器的任何后续调用,并且包括当跟踪被启用时的跟踪的计算性成本;以及
所述无距离变量成本是执行被配置为没有所述跟踪控制器的所述可执行代码的变型的总计算性成本,其中所述距离变量未被使用,其中所述跟踪启用器随每次进入被指定用于跟踪的可执行代码部分而被调用,并且所述跟踪禁用器随每次退出被指定用于跟踪的可执行代码部分而被调用,并且包括当跟踪被启用时的跟踪的计算性成本;
其中所述计算性成本是通过以下中的至少一项来测量的:所执行的指令的总数目、所执行的处理器周期的总数目、经过的总系统时钟时间、跟踪入口的数目。
3.根据权利要求1所述的选择性执行跟踪系统,其中被指定用于跟踪的所述可执行代码的所述部分包括被管理代码,即,被配置为在运行时的控制下运行的代码,所述运行时实施存储器垃圾收集或代码编译,或实施两者。
4.根据权利要求1所述的选择性执行跟踪系统,其中被指定用于跟踪的所述可执行代码的至少一部分包括本机代码,即,被配置为不需要运行时而运行的代码。
5.根据权利要求1所述的选择性执行跟踪系统,其中所述跟踪控制器包括:
set-N例程,具有local-n参数,并且被配置为在执行时将线程局部变量设置为所述参数local-n的所述值,所述线程局部变量在此被表示为N;
get-N例程,被配置为在执行时返回所述线程局部变量N的当前值;
set-DV例程,具有tracing-max参数,并且被配置为在执行时将所述距离变量设置为所述参数tracing-max的所述值;
get-DV例程,被配置为在执行时返回所述距离变量的当前值;以及
try-to-trace例程,被配置为:如果跟踪尚未被启用,则在执行时启用所述执行跟踪器对当前线程的跟踪。
6.根据权利要求1所述的选择性执行跟踪系统,其中:
所述距离变量表示要跟踪的指令的最大数目;
所述距离变量修改器被配置为随着所述可执行代码执行而递减所述距离变量;以及
所述跟踪控制器被配置为:在执行时结合所述距离变量达到作为所述停止跟踪值的零来调用所述跟踪禁用器,并且随后结合所述距离变量为正来调用所述跟踪启用器,所述可执行代码被配置为:在执行时执行以下中的至少一项以确保在进入被指定用于跟踪的任何可执行代码部分时所述距离变量不等于所述停止跟踪值:确认所述距离变量为非零,或将所述距离变量设置为正的高计数阈值。
7.根据权利要求6所述的选择性执行跟踪系统,其中所述高计数阈值满足以下标准中的至少一项:
所述高计数阈值指示逻辑无穷大;
所述高计数阈值超过被指定用于跟踪的所述可执行代码的任何代码单元中的指令的数目;
所述高计数阈值超过被指定用于跟踪的所述可执行代码的任何例程中的指令的数目;
所述高计数阈值超过所述可执行代码的百分之九十的所述例程中的指令的数目;
所述高计数阈值超过所述可执行代码的例程中的指令的平均数目。
8.根据权利要求6所述的选择性执行跟踪系统,其中所述跟踪控制器包括:
在代码单元的入口点处的所述可执行代码中的外部高计数确保代码,所述高计数确保代码被配置为:在执行时将所述距离变量设置为不小于所述高计数阈值的值,其中所述代码单元包括以下中的至少一项:线程、函数、例程、协程、异常处理器、中断处理器;
在对所述代码单元内的虚拟方法进行调用之前的所述可执行代码中的低计数确保代码,所述低计数确保代码被配置为:在执行时将所述距离变量设置为不大于非零低计数阈值的非零值,所述低计数阈值小于所述高计数阈值;以及
在所述虚拟方法的第一实现中的所述可执行代码中的内部高计数确保代码,被配置为在执行时将所述距离变量设置为不小于所述高计数阈值的值;以及
其中所述虚拟方法的第二实现不具有设置所述距离变量的任何代码。
9.根据权利要求6所述的选择性执行跟踪系统,其中所述跟踪控制器包括异常处理器中的高计数确保代码,所述高计数确保代码被配置为在执行时将所述距离变量设置为不小于所述高计数阈值的值。
10.一种计算机实现的选择性执行跟踪方法,所述方法使用距离变量,所述距离变量的值指示在计算性成本上与禁用跟踪的相对距离,所述方法包括:
在可执行代码中的第一位置处嵌入非零高计数确保代码,所述非零高计数确保代码被配置为在执行时将距离变量设置为不小于高计数阈值的值;
将递减机制与所述可执行代码相关联,所述递减机制被配置为随着所述可执行代码执行而递减所述距离变量;
将执行跟踪器连接到所述可执行代码;
将所述跟踪控制器配置为:当所述距离变量达到停止跟踪值时,禁用所述执行跟踪器的跟踪;以及
将所述跟踪控制器配置为:当所述距离变量不同于所述停止跟踪值时,在所述可执行代码的执行的至少部分期间启用所述执行跟踪器的跟踪。
11.根据权利要求10所述的计算机实现的选择性执行跟踪方法,还包括在所述可执行代码中的第二位置处嵌入低计数确保代码,所述低计数确保代码被配置为在执行时将所述距离变量设置为不大于非零低计数阈值的非零值,所述低计数阈值小于所述高计数阈值。
12.根据权利要求11所述的计算机实现的选择性执行跟踪方法,其中以下标准至少之一被满足:
被配置为禁用所述执行跟踪器的跟踪的跟踪禁用器中指令的数目大于所述低计数阈值;
被配置为禁用所述执行跟踪器的跟踪的所述跟踪禁用器中指令的数目大于所述第二位置处的所述距离变量的所述值;
在所述第二位置处调用所述跟踪禁用器以禁用所述执行跟踪器的跟踪的计算性成本大于执行从所述第二位置开始的M个指令的序列的计算性成本,其中M等于所述第二位置处的所述距离变量的所述值;
所述第二位置处的所述距离变量的所述值不大于所述可执行代码中每个例程的指令的平均指令数目;
所述低计数阈值不大于所述可执行代码中每个例程的所述平均指令数目;
对未被指定用于跟踪的例程进行跟踪的统计性执行成本小于在所述第二位置处调用所述跟踪禁用器以禁用所述例程的跟踪的计算性成本。
13.根据权利要求10所述的计算机实现的选择性执行跟踪方法,其中将所述执行跟踪器连接到所述可执行代码包括:在所述可执行代码中安装对所述执行跟踪器的回调,所述回调被配置为在执行时确定是否执行以下中的一项或多项:继续记录、改变所述距离变量值、停止记录。
14.一种配置有代码的计算机可读存储介质,所述代码在由计算机处理器执行时执行选择性执行跟踪方法,所述方法包括:
在代码单元的入口点处,将距离变量设置为不小于非零高计数阈值的值,所述距离变量测量在计算性成本上与禁用跟踪的相对距离;
结合将所述距离变量设置为不小于所述高计数阈值的值,进行调用,如果跟踪尚未被启用,则所述调用支持执行跟踪器最多跟踪所述距离变量的值数目的指令,并且如果跟踪已经被启用,则使跟踪继续被启用;
在所述代码单元的出口处,将所述距离变量设置为小于所述高计数阈值的非零低计数阈值;
随着所述计算机处理器执行包含所述代码单元的计算机过程的指令,自动递减所述距离变量;
当所述距离变量的所述值为正并且所述执行跟踪器被启用时,所述执行跟踪器跟踪所述计算机过程的执行;以及
响应于所述距离变量的所述值达到零,禁用对所述计算机过程的所述执行的跟踪。
15.根据权利要求14所述的计算机可读存储介质,其中所述选择性执行跟踪方法包括:
基于以下标准中的至少一项来标识所指定的例程,所述所指定的例程即被指定用于跟踪的例程:所述例程的作者、所述例程被编写的时间、所述例程是否被标记为机密、所述例程是否是运行时的部分、所述例程是否是所指定的库的部分、所述例程是否是所指定的命名空间的部分、所述例程是否具有所指定的参数、所述例程是否是即时编译器的部分、所述例程是否是垃圾收集器的部分、所述例程是否是内核的部分、所述例程的名称、包含所述例程的模块的名称、所述例程的直接调用者、或所述例程的间接调用者;以及
至少对所述所指定的例程进行跟踪。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/965,026 | 2018-04-27 | ||
US15/965,026 US10747645B2 (en) | 2018-04-27 | 2018-04-27 | Selectively tracing portions of computer process execution |
PCT/US2019/028422 WO2019209664A1 (en) | 2018-04-27 | 2019-04-22 | Selectively tracing portions of computer process execution |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112041823A true CN112041823A (zh) | 2020-12-04 |
Family
ID=66655416
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980028633.4A Pending CN112041823A (zh) | 2018-04-27 | 2019-04-22 | 计算机过程执行的选择性跟踪部分 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10747645B2 (zh) |
EP (1) | EP3785127B1 (zh) |
CN (1) | CN112041823A (zh) |
WO (1) | WO2019209664A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112506803A (zh) * | 2021-01-09 | 2021-03-16 | 杭银消费金融股份有限公司 | 大数据测试方法及系统 |
CN114398179A (zh) * | 2022-01-14 | 2022-04-26 | 北京思明启创科技有限公司 | 一种跟踪标识的获取方法、装置、服务器及存储介质 |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10740219B2 (en) | 2018-04-27 | 2020-08-11 | Workman Nydegger | Selectively tracing portions of computer process execution |
US10698792B2 (en) * | 2018-05-02 | 2020-06-30 | Microsoft Technology Licensing, Llc | Execution control with cross-level trace mapping |
US11237946B2 (en) * | 2018-05-03 | 2022-02-01 | Sap Se | Error finder tool |
US11169904B2 (en) * | 2018-11-30 | 2021-11-09 | International Business Machines Corporation | Automatically initiating tracing of program code based on statistical analysis |
US11074155B2 (en) * | 2019-04-04 | 2021-07-27 | International Business Machines Corporation | Generating representative microbenchmarks |
US11314624B2 (en) | 2019-09-24 | 2022-04-26 | Microsoft Technology Licensing, Llc | Reducing trace recording overheads with targeted recording via partial snapshots |
CN111625422B (zh) * | 2020-05-27 | 2023-07-18 | 抖音视界有限公司 | 线程监控方法、装置、电子设备及计算机可读存储介质 |
US11494284B2 (en) * | 2020-07-15 | 2022-11-08 | Metawork Corporation | Dynamic configuration trace capture technique |
US11544222B2 (en) * | 2020-12-11 | 2023-01-03 | Fidelity Information Services, Llc | Systems and methods for data tracing |
US11580006B2 (en) * | 2021-02-01 | 2023-02-14 | Raytheon Company | Annotated deterministic trace abstraction for advanced dynamic program analysis |
CN113111001B (zh) * | 2021-04-29 | 2023-10-24 | 苏州大学 | 一种嵌入式终端远程软件调试方法 |
US12019507B2 (en) * | 2022-05-19 | 2024-06-25 | Applied Materials, Inc. | Guardbands in substrate processing systems |
US20240073122A1 (en) * | 2022-08-31 | 2024-02-29 | Cisco Technology, Inc. | On-demand hardware resource allocation to debug multicast network at high scale |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3707725A (en) * | 1970-06-19 | 1972-12-26 | Ibm | Program execution tracing system improvements |
US4205370A (en) * | 1975-04-16 | 1980-05-27 | Honeywell Information Systems Inc. | Trace method and apparatus for use in a data processing system |
CN1614555A (zh) * | 2003-11-06 | 2005-05-11 | 国际商业机器公司 | 用于自主硬件辅助的线程栈跟踪的装置与方法 |
WO2005073859A2 (fr) * | 2003-12-31 | 2005-08-11 | Trusted Logic | Procede de controle d'integrite d'execution de programmes par verification d'empreintes de traces d'execution |
CN101515248A (zh) * | 2008-02-21 | 2009-08-26 | 国际商业机器公司 | 面向对象程序的跟踪方法和系统 |
CN104081361A (zh) * | 2012-02-03 | 2014-10-01 | 苹果公司 | 动态编程语言的基于跟踪器的运行时优化 |
US20140366007A1 (en) * | 2013-06-06 | 2014-12-11 | Microsoft Corporation | Debugging native code by transitioning from execution in native mode to execution in interpreted mode |
US20160070636A1 (en) * | 2014-09-04 | 2016-03-10 | Home Box Office, Inc. | Conditional wrapper for program object |
Family Cites Families (96)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08287162A (ja) * | 1995-02-14 | 1996-11-01 | Toshiba Corp | ワークフローシステム |
US5754839A (en) * | 1995-08-28 | 1998-05-19 | Motorola, Inc. | Apparatus and method for implementing watchpoints and breakpoints in a data processing system |
US6161216A (en) * | 1998-04-29 | 2000-12-12 | Emc Corporation | Source code debugging tool |
US6189141B1 (en) * | 1998-05-04 | 2001-02-13 | Hewlett-Packard Company | Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control |
US6351844B1 (en) * | 1998-11-05 | 2002-02-26 | Hewlett-Packard Company | Method for selecting active code traces for translation in a caching dynamic translator |
GB2348304B (en) | 1999-03-24 | 2003-07-09 | Ibm | Optimising Device Driver Debug Tracing |
JP2001034504A (ja) * | 1999-07-19 | 2001-02-09 | Mitsubishi Electric Corp | ソースレベルデバッガ |
US7058928B2 (en) | 1999-12-23 | 2006-06-06 | Identify Software Ltd. | System and method for conditional tracing of computer programs |
US8312435B2 (en) * | 2000-12-26 | 2012-11-13 | Identify Software Ltd. (IL) | System and method for conditional tracing of computer programs |
US7047521B2 (en) * | 2001-06-07 | 2006-05-16 | Lynoxworks, Inc. | Dynamic instrumentation event trace system and methods |
US7143394B1 (en) * | 2001-12-21 | 2006-11-28 | Emc Corporation | Analyzing software behavior |
US7178132B2 (en) * | 2002-10-23 | 2007-02-13 | Microsoft Corporation | Forward walking through binary code to determine offsets for stack walking |
US7194664B1 (en) * | 2003-09-08 | 2007-03-20 | Poon Fung | Method for tracing application execution path in a distributed data processing system |
US7287245B2 (en) * | 2003-09-17 | 2007-10-23 | Faraday Technology Corp. | Method for real-time instruction information tracing |
US7389494B1 (en) * | 2003-11-14 | 2008-06-17 | Sun Microsystems, Inc. | Mechanism for statically defined trace points with minimal disabled probe effect |
US7827539B1 (en) * | 2004-06-25 | 2010-11-02 | Identify Software Ltd. | System and method for automated tuning of program execution tracing |
US20060046854A1 (en) | 2004-08-31 | 2006-03-02 | Microsoft Corporation | Method and apparatus for developing an electronic game using automatic user feedback |
US7698697B2 (en) * | 2005-03-03 | 2010-04-13 | International Business Machines Corporation | Transforming code to expose glacial constants to a compiler |
US7657875B2 (en) * | 2005-04-12 | 2010-02-02 | International Business Machines Corporation | System and method for collecting a plurality of metrics in a single profiling run of computer code |
US7312736B2 (en) * | 2005-05-16 | 2007-12-25 | Texas Instruments Incorporated | Trading off visibility for volume of data when profiling memory events |
US7716650B2 (en) | 2005-06-01 | 2010-05-11 | Microsoft Corporation | Non-destructive debugging for add-ins |
US20070011492A1 (en) * | 2005-07-05 | 2007-01-11 | Arm Limited | Generation of trace data |
US8694621B2 (en) * | 2005-08-19 | 2014-04-08 | Riverbed Technology, Inc. | Capture, analysis, and visualization of concurrent system and network behavior of an application |
US7676811B2 (en) | 2006-03-23 | 2010-03-09 | Microsoft Corporation | Ensuring thread affinity for interprocess communication in a managed code environment |
WO2007145903A2 (en) * | 2006-06-05 | 2007-12-21 | Acumem Ab | System for and method of capturing application characteristics data from a computer system and modeling target system |
US20080126828A1 (en) * | 2006-06-07 | 2008-05-29 | Janice Marie Girouard | Dynamic enablement and customization of tracing information in a data processing system |
US8079019B2 (en) | 2007-11-21 | 2011-12-13 | Replay Solutions, Inc. | Advancing and rewinding a replayed program execution |
US7908580B2 (en) | 2006-09-07 | 2011-03-15 | Microsoft Corporation | Connecting an integrated development environment with an application instance |
US20080127055A1 (en) | 2006-09-07 | 2008-05-29 | Microsoft Corporation | Application proxy |
US8370609B1 (en) * | 2006-09-27 | 2013-02-05 | Oracle America, Inc. | Data cache rollbacks for failed speculative traces with memory operations |
US7689870B2 (en) * | 2006-11-17 | 2010-03-30 | International Business Machines Corporation | Efficient and flexible trace trigger handling for non-concurrent events |
US8108839B2 (en) * | 2006-11-30 | 2012-01-31 | International Business Machines Corporation | Method and apparatus for tracing execution of computer programming code using dynamic trace enablement |
US8141051B2 (en) * | 2006-12-29 | 2012-03-20 | Intel Corporation | Methods and apparatus to collect runtime trace data associated with application performance |
KR101358750B1 (ko) * | 2007-01-22 | 2014-02-06 | 삼성전자주식회사 | 관계형 데이터베이스를 이용한 프로그램 트레이스 방법 |
GB2446831B (en) * | 2007-02-22 | 2011-06-15 | Advanced Risc Mach Ltd | Selective disabling of diagnostic functions within a data processing system |
WO2009022239A2 (en) * | 2007-03-26 | 2009-02-19 | Acumem Ab | System for and method of capturing performance characteristics data from a computer system and modeling target system performance |
US8490073B2 (en) * | 2007-03-30 | 2013-07-16 | International Business Machines Corporation | Controlling tracing within compiled code |
US8091073B2 (en) * | 2007-06-05 | 2012-01-03 | International Business Machines Corporation | Scaling instruction intervals to identify collection points for representative instruction traces |
US20090006506A1 (en) * | 2007-06-28 | 2009-01-01 | Nokia Corportion | Method and system for garbage collection of native resources |
US8291381B2 (en) | 2007-09-27 | 2012-10-16 | Microsoft Corporation | Call stack parsing in multiple runtime environments |
US8219975B2 (en) | 2007-10-26 | 2012-07-10 | Microsoft Corporation | Real-time analysis of performance data of a video game |
US8832682B2 (en) * | 2008-03-28 | 2014-09-09 | Vmware, Inc. | Trace collection for a virtual machine |
US9223677B2 (en) * | 2008-06-11 | 2015-12-29 | Arm Limited | Generation of trace data in a multi-processor system |
US8495587B2 (en) * | 2009-01-13 | 2013-07-23 | International Business Machines Corporation | Method, apparatus or software for selectively activating a trace function |
US8042007B1 (en) * | 2009-08-27 | 2011-10-18 | Xilinx, Inc. | Trace module for integrated circuit devices |
US8429454B2 (en) | 2009-12-16 | 2013-04-23 | Microsoft Corporation | Coordination of error reporting among multiple managed runtimes in the same process |
EP2553582A1 (en) * | 2010-03-26 | 2013-02-06 | Software Diagnostics Technology GmbH | A method for automatically generating a trace data set for a software system, a computer system, and a computer program product |
US8656369B2 (en) * | 2010-05-24 | 2014-02-18 | International Business Machines Corporation | Tracing flow of data in a distributed computing application |
US8453123B2 (en) * | 2010-07-16 | 2013-05-28 | International Business Machines Corporation | Time-based trace facility |
US8561033B2 (en) * | 2010-07-30 | 2013-10-15 | International Business Machines Corporation | Selective branch-triggered trace generation apparatus and method |
US8719799B2 (en) * | 2011-03-07 | 2014-05-06 | International Business Machines Corporation | Measuring coupling between coverage tasks and use thereof |
US8799719B2 (en) * | 2011-05-19 | 2014-08-05 | International Business Machines Corporation | On demand tracing of application code execution |
US8972955B2 (en) | 2011-05-27 | 2015-03-03 | Microsoft Technology Licensing Llc | Reducing network trips for remote expression evaluation |
US8572438B2 (en) | 2011-06-24 | 2013-10-29 | Microsoft Corporation | N-way runtime interoperative debugging |
US8756461B1 (en) * | 2011-07-22 | 2014-06-17 | Juniper Networks, Inc. | Dynamic tracing of thread execution within an operating system kernel |
US9645913B2 (en) * | 2011-08-03 | 2017-05-09 | Daniel Geist | Method and apparatus for debugging programs |
US8918764B2 (en) * | 2011-09-21 | 2014-12-23 | International Business Machines Corporation | Selective trace facility |
US9262298B2 (en) | 2012-02-16 | 2016-02-16 | Microsoft Technology Licensing, Llc | Debugging object abstractions |
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 |
US9710357B2 (en) | 2012-08-04 | 2017-07-18 | Microsoft Technology Licensing, Llc | Function evaluation using lightweight process snapshots |
US8909990B2 (en) | 2012-08-04 | 2014-12-09 | Microsoft Corporation | Historical software diagnostics using lightweight process snapshots |
US9047400B2 (en) * | 2012-08-29 | 2015-06-02 | Freescale Semiconductor, Inc. | Data processor device for handling a watchpoint and method thereof |
US9135145B2 (en) | 2013-01-28 | 2015-09-15 | Rackspace Us, Inc. | Methods and systems of distributed tracing |
US20130283102A1 (en) * | 2013-02-12 | 2013-10-24 | Concurix Corporation | Deployment of Profile Models with a Monitoring Agent |
US8843901B2 (en) * | 2013-02-12 | 2014-09-23 | Concurix Corporation | Cost analysis for selecting trace objectives |
US20130283281A1 (en) * | 2013-02-12 | 2013-10-24 | Concurix Corporation | Deploying Trace Objectives using Cost Analyses |
US8924941B2 (en) * | 2013-02-12 | 2014-12-30 | Concurix Corporation | Optimization analysis using similar frequencies |
US8977532B2 (en) | 2013-02-22 | 2015-03-10 | Microsoft Technology Licensing, Llc | Estimating time remaining for an operation |
US9336121B2 (en) * | 2013-03-15 | 2016-05-10 | International Business Machines Corporation | Capture and display of historical run-time execution traces in a code editor |
US20140317604A1 (en) * | 2013-04-20 | 2014-10-23 | Concurix Corporation | Real Time Analysis of Tracer Summaries to Change Tracer Behavior |
US9292415B2 (en) * | 2013-09-04 | 2016-03-22 | Microsoft Technology Licensing, Llc | Module specific tracing in a shared module environment |
EP3069241B1 (en) * | 2013-11-13 | 2018-08-15 | Microsoft Technology Licensing, LLC | Application execution path tracing with configurable origin definition |
US10289411B2 (en) | 2013-11-18 | 2019-05-14 | Microsoft Technology Licensing, Llc | Diagnosing production applications |
CN104142858B (zh) * | 2013-11-29 | 2016-09-28 | 腾讯科技(深圳)有限公司 | 阻塞任务调度方法及装置 |
US10325099B2 (en) | 2013-12-08 | 2019-06-18 | Microsoft Technology Licensing, Llc | Managing sensitive production data |
US9239774B2 (en) | 2014-01-15 | 2016-01-19 | Microsoft Technology Licensing, Llc | Classification of JavaScript code for debugging using just my code |
US9424163B2 (en) | 2014-01-15 | 2016-08-23 | Microsoft Technology Licensing, Llc | Exception and debugging behaviors for JavaScript debugging using just my code |
US9703681B2 (en) | 2014-05-29 | 2017-07-11 | Microsoft Technology Licensing, Llc | Performance optimization tip presentation during debugging |
US9378117B2 (en) * | 2014-05-30 | 2016-06-28 | Apple Inc. | Queue debugging using stored backtrace information |
US9208060B1 (en) | 2014-05-30 | 2015-12-08 | Microsoft Technology Licensing, Llc | Emulation-based expression evaluation for diagnostic tools |
US9875173B2 (en) * | 2014-06-30 | 2018-01-23 | Microsoft Technology Licensing, Llc | Time travel debugging in managed runtime |
US9356986B2 (en) * | 2014-08-08 | 2016-05-31 | Sas Institute Inc. | Distributed stream processing |
US10019341B2 (en) * | 2014-09-25 | 2018-07-10 | Intel Corporation | Using hardware performance counters to detect stale memory objects |
US9612939B2 (en) | 2014-10-29 | 2017-04-04 | Microsoft Technology Licensing, Llc. | Diagnostic workflow for production debugging |
US9632915B2 (en) | 2014-10-29 | 2017-04-25 | Microsoft Technology Licensing, Llc. | Historical control flow visualization in production diagnostics |
US9792161B2 (en) * | 2014-11-25 | 2017-10-17 | The Board Of Trustees Of The University Of Illinois | Maximizing concurrency bug detection in multithreaded software programs |
GB2536871A (en) * | 2015-03-04 | 2016-10-05 | Advanced Risc Mach Ltd | An apparatus and method to generate trace data in response to transactional execution |
US9996448B2 (en) * | 2016-02-25 | 2018-06-12 | Red Hat Israel Ltd | Breakpoint insertion into kernel pages |
US10013329B2 (en) * | 2016-04-28 | 2018-07-03 | International Business Machines Corporation | Dynamic tracing using ranking and rating |
US10474557B2 (en) * | 2016-07-19 | 2019-11-12 | Sap Se | Source code profiling for line-level latency and energy consumption estimation |
US10031834B2 (en) | 2016-08-31 | 2018-07-24 | Microsoft Technology Licensing, Llc | Cache-based tracing for time travel debugging and analysis |
US10042737B2 (en) | 2016-08-31 | 2018-08-07 | Microsoft Technology Licensing, Llc | Program tracing for time travel debugging and analysis |
US10296436B2 (en) * | 2016-09-08 | 2019-05-21 | International Business Machines Corporation | Adjusting trace points based on overhead analysis |
US10565087B2 (en) * | 2017-08-03 | 2020-02-18 | Microsoft Technology Licensing, Llc | Tentative execution of code in a debugger |
US10445211B2 (en) * | 2017-08-28 | 2019-10-15 | Microsoft Technology Licensing, Llc | Logging trace data for program code execution at an instruction level |
US10740219B2 (en) | 2018-04-27 | 2020-08-11 | Workman Nydegger | Selectively tracing portions of computer process execution |
-
2018
- 2018-04-27 US US15/965,026 patent/US10747645B2/en active Active
-
2019
- 2019-04-22 EP EP19726779.2A patent/EP3785127B1/en active Active
- 2019-04-22 CN CN201980028633.4A patent/CN112041823A/zh active Pending
- 2019-04-22 WO PCT/US2019/028422 patent/WO2019209664A1/en active Application Filing
-
2020
- 2020-07-07 US US16/922,887 patent/US11249881B2/en active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3707725A (en) * | 1970-06-19 | 1972-12-26 | Ibm | Program execution tracing system improvements |
US4205370A (en) * | 1975-04-16 | 1980-05-27 | Honeywell Information Systems Inc. | Trace method and apparatus for use in a data processing system |
CN1614555A (zh) * | 2003-11-06 | 2005-05-11 | 国际商业机器公司 | 用于自主硬件辅助的线程栈跟踪的装置与方法 |
WO2005073859A2 (fr) * | 2003-12-31 | 2005-08-11 | Trusted Logic | Procede de controle d'integrite d'execution de programmes par verification d'empreintes de traces d'execution |
CN101515248A (zh) * | 2008-02-21 | 2009-08-26 | 国际商业机器公司 | 面向对象程序的跟踪方法和系统 |
CN104081361A (zh) * | 2012-02-03 | 2014-10-01 | 苹果公司 | 动态编程语言的基于跟踪器的运行时优化 |
US20140366007A1 (en) * | 2013-06-06 | 2014-12-11 | Microsoft Corporation | Debugging native code by transitioning from execution in native mode to execution in interpreted mode |
US20160070636A1 (en) * | 2014-09-04 | 2016-03-10 | Home Box Office, Inc. | Conditional wrapper for program object |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112506803A (zh) * | 2021-01-09 | 2021-03-16 | 杭银消费金融股份有限公司 | 大数据测试方法及系统 |
CN114398179A (zh) * | 2022-01-14 | 2022-04-26 | 北京思明启创科技有限公司 | 一种跟踪标识的获取方法、装置、服务器及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP3785127A1 (en) | 2021-03-03 |
US10747645B2 (en) | 2020-08-18 |
US20200334129A1 (en) | 2020-10-22 |
US11249881B2 (en) | 2022-02-15 |
WO2019209664A1 (en) | 2019-10-31 |
EP3785127B1 (en) | 2024-05-29 |
US20190332519A1 (en) | 2019-10-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11249881B2 (en) | Selectively tracing portions of computer process execution | |
EP3788490B1 (en) | Execution control with cross-level trace mapping | |
EP3785125B1 (en) | Selectively tracing portions of computer process execution | |
US10541042B2 (en) | Level-crossing memory trace inspection queries | |
Patil et al. | Pinplay: a framework for deterministic replay and reproducible analysis of parallel programs | |
US8732674B1 (en) | Revertable managed execution image instrumentation | |
JP2019537782A (ja) | 垂直統合インストルメント化およびトレース再構成のためのシステム、方法およびデバイス | |
WO2018072493A1 (zh) | 编译方法和编译系统 | |
US10169199B2 (en) | Automatic model-specific debugger extensions | |
CN110741354B (zh) | 呈现代码实体调用之间的差异 | |
Hu et al. | Automatically verifying and reproducing event-based races in android apps | |
KR20130101037A (ko) | 사용자 정의 유형을 위한 컴파일 타임 경계 검사 | |
US20060277371A1 (en) | System and method to instrument references to shared memory | |
US10452516B2 (en) | Replaying time-travel traces relying on processor undefined behavior | |
Watson | Writing high-performance. NET code | |
Brais et al. | Alleria: An advanced memory access profiling framework | |
Arafa | Time-aware dynamic binary instrumentation | |
Liao | TAI: threaded asynchronous I/O library for performance and portability |
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 |