首页> 中国专利> 调试期间的性能优化提示呈现

调试期间的性能优化提示呈现

摘要

给出以下帮助:以通过在调试器内部提供关于程序的性能的容易忽略但准确的提示来帮助在初始开发期间优化程序的性能,同时程序的特征仍被实现和/或调试,而不干扰那个开发。正在调试器中调试的软件程序的原始性能信息是通过将测得的调试开销或其他诊断开销从该原始性能信息中移除来调整的。在测量开销时考虑的一些因素包括暂停、上下文切换、调试版本存在还是发行版本存在、边界检查、功能评估和调用栈分析。调试器被增强为将经调整的程序性能测量紧靠相应的源代码显示在图形用户界面中。增强的调试器更新经调整的程序性能测量值,并在开发者在整个源代码中移动时,保持其屏幕位置为当前的,从而在请求之际提供更详细的性能信息。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-04-17

    授权

    授权

  • 2017-03-22

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20150522

    实质审查的生效

  • 2017-02-22

    公开

    公开

说明书

背景

了解软件程序性能问题的起因可涉及在例如样本计数、所采样的项以及与各样本潜在相关的假象方面分析大型数据集合。性能优化通常是用户驱动的操作,在该操作期间,应用性能的全局视图被呈现给用户。例如,剖析器工具可告知用户被剖析程序的执行持续了X毫秒,或者Y盘I/O操作被执行,或者Z千字节的存储器被该程序分配。用户在呈现的性能数据中挖掘,调用要呈现的其他数据,并且最终手动地标识出可能正引起感知的性能问题的代码区域。对程序的源代码以及性能起因的细节的熟悉被推定,或者至少是有帮助的。

概述

一些实施例涉及以下技术问题:在最初开发期间优化程序的性能,同时仍实现和/或调试该程序的特征,而不会干扰该开发。一些实施例在调试器内部提供关于程序的性能的易于忽略的提示,使得实现程序的特征的开发者可在开发期间在期望的情况下作出性能优化,而不会从主开发流程转移注意力,并且不需要掌握性能细节或剖析器的难懂之处。

一些实施例自动获得正在调试器中调试的软件程序的原始性能信息。此原始信息可向开发者提供关于性能问题的非常粗略的指示,但是该原始信息通常由于诸如调试器中运行的效果、将发行代码与调试代码混合的效果、在调试期间开发者动作的效果、或线程活动影响之类的性能细节而被歪曲。一些实施例从原始性能信息的至少一部分中自动移除测得的诊断开销,由此产生至少一个经调整的程序性能测量。经调整的程序性能测量使用在视觉上与几行相关源代码(即其相应的可执行代码最新近对所考虑的程序性能有贡献的源代码)相关联的视觉表示被自动显示在调试器图形用户界面中。

在一些实施例中,剖析器获得软件程序的原始性能信息。调试器提供在软件程序中设置或清除用户指定的断点的命令。调试开销移除代码产生针对该该软件程序的至少一个经调整的程序性能测量。由剖析器获得的原始性能信息至少部分地通过将测得的调试开销从该原始性能信息中移除来调整。调试器被增强为将经调整的程序性能测量紧靠相应的源代码显示在图形用户界面中。经增强的调试器更新经调整的程序性能测量值,并在开发者移动经过源代码时保持其屏幕位置为当前的。

所给出的示例只是说明性的。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。相反地,提供本概述是为了以简化的形式介绍将在以下具体实施方式中进一步描述的一些技术概念。本发明由权利要求书限定,在本概述与权利要求书有冲突的情况下,应该以权利要求书为准。

附图简述

将参考附图给出更具体的描述。这些附图只示出了选定的方面,且因此不完全确定覆盖或范围。

图1是解说具有至少一个处理器和至少一个存储器和操作环境中可能存在于多个网络节点上的其他项的计算机系统并且还示出经配置的存储介质(而不仅仅是信号)实施例的框图,该至少一个处理器和至少一个存储器在用于调试和性能剖析的软件的控制下彼此交互;

图2是解说示例体系结构中的性能提示提供的各方面的框图;

图3是解说示例体系结构(诸如图2的体系结构或另一体系结构)中的一些性能测量的框图;

图4是解说示例体系结构(诸如图2的体系结构或另一体系结构)中的调试器图形用户界面(“GUI”)的各方面的框图;

图5和6共同示出解说某个过程的步骤和经配置的存储介质实施例的流程图;

图7是解说根据一些实施例的源代码窗口中的经调整程序性能测量的视觉表示的局部屏幕截图;

图8是解说图7中示出的视觉表示的补充形式的局部屏幕截图;

图9是解说根据一些实施例的源代码窗口中的相应经调整程序性能测量的两个视觉表示的局部屏幕截图;以及

图10是解说源代码窗口中的源代码并且还示出根据一些实施例的调试器GUI中的其他项的一般化屏幕截图。

描述

首字母缩略词

一些首字母缩略词在以下被定义,但是其他首字母缩略词可在本文中的其他地方定义或不要求被本领域技术人员理解的定义。

ALU:算术与逻辑单元

API:应用程序接口

CD:压缩光盘

CPU:中央处理单元

DVD:数字多用盘或数字视频光盘

FPGA:现场可编程门阵列

FPU:浮点处理单元

GPU:图形处理单元

GUI:图形用户界面

IDE:集成开发环境,有时也称为“交互式开发环境”

RAM:随机存取存储器

ROM:只读存储器

作为示例使用的源代码

本公开的各部分包含源代码列表;这些在说明书文本和图7到9中出现。本公开中包括源代码列表以帮助描述包括被显示在源代码附近的视觉表示的一些实施例;源代码因其自己的特定内容而没有被包括。即,源代码列表没有作为源代码集合的一部分被呈现,源代码集合如果被编译,将随后实现性能提示显示、开销移除、程序性能测量调整或所要求保护的实施例的其他特征。说明书中以及图7到9中示出的源代码由此与图10中的源代码描绘相似,其包含点和划,而不是数字字母文本。源代码不旨在本身为必要材料,或者通过引用位于本公开文档外部的必要材料而用作援引。由此,不应反对在附图或说明书文本中以其当前形式包括这些源代码列表,也不反对以图10所解说的形式用点和划描绘来替换任何这样的源代码。

示例的性质

以下给出的示例仅仅是说明性的,并不旨在完全标识所要求保护的主题的关键特征或必要特征,它们也不旨在用于限制所要求保护的主题的范围。

此处描述的某些示例可以在较宽泛的上下文中查看。例如,诸如计算资源使用、调试、图形用户接口、性能优化、性能剖析和用户体验之类的概念可与特定示例相关。然而,并不能从宽泛上下文的可用性中得出此处对抽象概念寻求专有权;它们并不是专有的。相反,本公开聚焦于提供适当具体的示例,其技术效果完全或部分地解决特定技术问题。涉及计算资源使用、调试、图形用户界面、性能优化、性能剖析和/或用户体验的其他介质、系统和方法在本范围之外。因此,在对本发明的正确理解下,也避免了模糊性、抽象性、缺少技术性和附带的证据问题。

本文描述的实施例的技术特征对于本领域技术人员而言将显而易见,并且对于各种关注的读者而言也以各种方式显而易见。首先,一些示例包括诸如调试器断点、计算资源使用测量、源代码呈现和可执行代码执行之类的技术方面。第二,一些示例包括诸如到调试器的接口和程序性能剖析器之类的技术组件。第三,一些示例所提供的技术效果包括当调试器接收正被调试的程序或从其取得控制时,程序性能测量(例如,计算资源使用)在调试期间在一个或多个点处的呈现。第四,一些示例包括诸如性能呈现提示、用于性能提示呈现的阈值、性能提示的代码权定位、以及在一个或多个性能提示的新集合被显示时先前的提示从显示中的移除之类的技术适配。第五,一些示例通过在调试期间呈现程序性能优化提示并通过剖析工具提供到更详细的信息的直接导航,同时使得在调试器会话内性能提示对开发者不醒目来修改调试器或集成开发环境的技术功能。技术结果包括更高效执行的程序优化(因为优化可在所考虑的代码在其开发者面前并且在开发者的头脑中对该代码的理解为新鲜时被作出)以及更高度优化的代码(因为原本由于实现起来太过麻烦而被跳过或者作为可能性被忽略的优化被执行了)。

术语

对示例性示例作出参考,并且在本文中将使用特定语言来描述这些示例性示例。但是,相关技术领域的且拥有本公开内容的技术人员将想到的对此处所示出的特征的更改和进一步的修改以及对此处的特定示例所示的抽象原理的其他技术应用,都应该被视为在权利要求的范围内。

在本公开中阐明了各术语的含义,因此应该在仔细关注这些阐明的情况下阅读权利要求书。给出了具体示例,但是相关领域的技术人员将理解其他示例也可落在所使用的术语的含义范围内以及落在一个或多个权利要求的范围内。各术语不一定需要具有与它们在一般使用中(尤其在非技术使用中)或在特定行业使用中、或在特定字典或一组字典的使用中所具有的意义相同的意义。参考标记被添加在后续文件以及附图中,但这些参考标记并不是理解本公开所必须的。发明人声明并行使他们对他们自己的词典的权利。所引用的术语被显式定义,但在隐式定义术语时不使用引用标记。这里可在具体实施方式中和/或在申请文件的别处显式地或隐式地定义术语。

如此处所使用的,“计算机系统”可包括例如一个或多个服务器、主板、处理节点、个人计算机(便携式或非便携式)、个人数字助理、智能电话、蜂窝或移动电话、至少具有处理器和存储器的其他移动设备、和/或提供至少部分地由指令来控制的一个或多个处理器的其他设备。指令可以采用存储器中的固件或其他软件和/或专用电路的形式。具体而言,虽然可发生许多示例在工作站或膝上型计算机上运行,但是其他示例可在其他计算设备上运行,并且任何一个或多个这样的设备都可以是给定示例的一部分。

“多线程化”计算机系统是支持多个执行线程的计算机系统。术语“线程”应被理解为包括能够或经历调度(以及可能同步)的任何代码,并且也可以另一名称来为人所知,如“任务”、“进程”或“协同例程”等。线程可以并行地、按顺序、或以并行执行(例如,多处理)和顺序执行(例如,时间分片)的组合来运行。在各种配置中都已设计了多线程化环境。执行线程可以并行地运行,或者线程可以被组织为并行执行,但是实际上轮流按顺序执行。例如,多线程化可以通过在多处理环境中在不同核上运行不同线程、通过对单个处理器核上的不同线程进行时间分片、或者通过时间分片和多处理器线程化的某种组合来实现。线程上下文切换可以例如由内核的线程调度器、由用户空间信号、或由用户空间和内核操作的组合来发起。线程可以轮流对共享数据进行操作,或者例如每一线程都可以对其自己的数据进行操作。

“逻辑处理器”或“处理器”是单个独立硬件线程处理单元,如同时多线程实现中的核。作为另一示例,每核运行两个线程的超线程四核芯片具有8个逻辑处理器。逻辑处理器包括硬件。术语“逻辑”被用来防止给定芯片具有至多一个处理器的错误结论;“逻辑处理器”和“处理器”在此可互换地使用。处理器可以是通用的,或者它们可被定制用于特定用途,例如图形处理、信号处理、浮点算术处理、加密、I/O处理等等。

“多处理器”计算机系统是具有多个逻辑处理器的计算机系统。多处理器环境存在于各种配置中。在一给定配置中,所有处理器可在功能上相同,而在另一配置中,由于具有不同的硬件能力、不同的软件分配或两者,某些处理器可与其他处理器不同。取决于配置,处理器可在单个总线上紧密地彼此耦合,或它们可松散地耦合。在某些配置中,处理器共享一中央存储器,在某些配置中,它们各自具有自己的本地存储器,在某些配置中,存在共享和本地存储器两者。

“内核”包括操作系统、系统管理程序、虚拟机、BIOS代码、以及类似的硬件接口软件。

“代码”指的是处理器指令、数据(包括常量、变量、以及数据结构)、或指令和数据两者。

“程序”在本文中被广泛地使用以包括应用、内核、驱动程序、中断处理程序、库、以及程序员(也被成为开发者)编写的其他代码。

如此处所使用的“包括”允许附加元素(即,包括意味着包含),除非另外指明。“由...构成”意味着基本上由...构成或完全由...构成。当X中的非Y部分(如果有的话)可以被自由更改、移除和/或添加而不在考虑所述权利要求时更改所要求保护的示例的功能时,X基本上由Y构成。

“进程”在此有时被用作计算科学领域的术语,并且在该技术意义上涵盖资源使用者,即例如协同例程、线程、任务、中断处理程序、应用进程、内科进程、过程和对象方法。“进程”在此还可被用作本领域的专利法术语,例如,在描述与系统权利要求或制品(经配置的存储介质权利要求)相对的过程权利要求时。类似地,“方法”在此有时被用作计算科学领域内的技术术语(一种“例程”)并且还被用作本领域的专利法术语(“过程”)。技术人员将理解在特定实例中旨在是什么含义,并且还将理解给定所要求保护的过程或方法(在专利法的意义上)有时可使用一个或多个过程或方法(在计算科学意义上)来实现。

“自动地”指的是使用自动化(例如,由用于这里所讨论的特定操作和技术效果的软件配置的通用计算硬件),与没有自动化相对。具体而言,“自动”执行的步骤在理论上或在一个人的意识中不是用手执行的,但这些步骤可由人类来启动或由人类来交互式地引导。自动化步骤使用机器执行的以获得在没有由此提供的技术交互的情况下将不会实现的一个或多个技术效果。

“在计算上”同样指的是使用计算设备(至少是处理器加上存储器),且排除了仅通过人类思考或仅通过单独的人类动作而获得结果。例如,用纸和笔作算术不是如本文所理解的在计算上作算术。计算结果更快、更宽泛、更深、更准确、更一致、更全面和/或以其他方式提供超出单独的人类表现范围的技术效果。“计算步骤”是通过计算执行的步骤。然而,“自动地”和“在计算上”都不一定意味着“立即”。“在计算上”和“自动地”在此可互换地使用。

“抢先式”意味着没有来自用户的直接请求。的确,用户甚至可能直到已经向该用户呈现一示例中的抢先式步骤的结果才意识到该步骤是可能的。除非另外指明,否则此处描述的任何计算和/或自动化步骤都可以被抢先完成。

贯穿本文,对任选复数“(诸)”的使用意味着一个或多个所指示的特征存在。例如,“(诸)处理器”意味着“一个或多个处理器”或等效于“至少一个处理器”。

贯穿本文,除非另外明确表明,否则对过程中的某一步骤的任何引用都假定该步骤可直接由所关注的一方执行和/或由该方通过介入机制和/或介入实体而间接地执行,且仍然在该步骤的范围内。也就是说,除非直接执行是被明确表明的要求,否则并不要求由关注方对步骤的直接执行。例如,涉及感兴趣的一方对目的地或其他主题执行的动作的步骤可涉及由某一其他方进行的干预动作,诸如转发、复制、上传、下载、编码、解码、压缩、解压、加密、解密、认证、调用等,但仍被理解为由感兴趣的一方直接执行。

在参考数据或指令时,要理解这些项配置了计算机可读存储器和/或计算机可读存储介质,从而将其变换为特定物品,而非简单地存在于纸张上、人的头脑中、或仅仅作为例如线路上的传播的信号。除非在权利要求中另外指明,否则权利要求不涵盖信号本身。发明人的当前意图是美国寻求保护的权利要求中没有一个权利要求涉及或者将涉及纯传播信号或信号本身。出于美国专利审查的目的,存储器或其它计算机可读存储介质不是美国专利商标局(USPTO)对In re Nuijten案例的解释下的可授予专利的主题的范围之外的传播信号或载波。

此外,尽管明显相反,但将理解一方面的(a)计算机可读存储介质和计算机可读存储器,和另一方面的(b)也被称为信号介质的传输介质之间的清楚区别。传输介质是传播信号或载波计算机可读介质。相反,计算机可读存储介质和计算机可读存储器不是传播信号或载波计算机可读介质。除非另外声明,否则“计算机可读介质”意味着计算机可读存储介质,而不是传播信号本身。

本文中的一“实施例”是一示例。术语“实施例”与“本发明”不是可互换。各实施例可自由地共享或借用各方面来创建其他实施例(产生的结果是可操作的),即使所产生的方面组合本身在本文中没有被明确描述。要求每个以及每次许可的组合被显式地描述对于本领域的技术人员而言不是不要的,并且将会与表明到专利说明书是针对本领域的技术人员而写的策略相反。关于从即使少量的可组合特征中得出的可能组合的数量的正规组合性计算和非正规通用直觉也将指示针对本文描述的各方面存在大量的方面组合。因此,要求对每个以及每次组合的显式详述将与要求专利说明书简洁且要求读者具有本技术领域的知识的策略相反。

操作环境

参考图1,用于一个实施例的操作环境100可包括计算机系统102。计算机系统102可以是多处理器计算机系统,或者也可以不是。操作环境可包括给定计算机系统中的一个或多个机器,它们可以群集的、客户机-服务器联网的、和/或对等联网的。个体机器是一计算机系统,且一组协同操作的机器也是计算机系统。给定计算机系统102可以例如用应用被配置用于最终用户、用于管理员、作为服务器、作为分布式处理节点、和/或以其他方式配置。

人类用户104可以经由键入的文本、触摸、语音、移动、计算机视觉、姿势和/或其它形式的I/O,通过使用显示器、键盘和其它外围设备106来与计算机系统102交互。用户界面可支持实施例和一个或多个人类用户之间的交互。用户界面可包括命令行界面、图形用户界面(GUI)、自然用户界面(NUI)、语音命令界面和/或其它界面呈现。用户界面可以在本地台式计算机或例如智能电话上生成,或者它可以从web服务器生成并被发送到客户机。用户界面可被生成为服务的一部分并且它可以与诸如社交网络服务等其它服务集成。给定操作环境包括支持这些不同的用户界面生成选项和使用的设备和基础结构。

例如,自然用户界面(NUI)操作可使用例如语音识别、触摸和指示笔识别、屏幕上和屏幕附近的姿势识别、空中姿势、头部和眼睛跟踪、话音和语音、视觉、触摸、姿势、和/或机器智能的那些方法。NUI技术的一些示例包括触敏显示、话音和语音识别、意图和目的理解、使用深度相机(如立体相机系统、红外相机系统、RGB相机系统、以及这些的组合)的运动姿势检测、使用加速度计/陀螺仪的运动姿势检测、面部识别、3D显示、头部、眼睛和注视跟踪、浸入式增强现实和虚拟现实系统,所有这些都提供更自然的接口,以及用于使用电场传感电极(脑电仪和相关工具)的传感大脑活动的技术。

作为另一示例,游戏可以驻留在Microsoft XBOX(微软公司的商标)服务器上。游戏可从控制台购买或者整体或部分在服务器上、在控制台上、或在两者上执行。多个用户可以使用标准控制器、空中姿势、语音或使用诸如智能电话或平板等附随设备来与该游戏交互。给定操作环境包括支持这些不同的使用情形的设备和基础结构。

系统管理员、开发人员、工程技术人员、以及最终用户各自都是特定类型的用户104。代表一个或多个人操作的自动化代理、脚本、回放软件等也可以是用户104。在某些实施例中,存储设备和/或联网设备可以被认为是外围设备。图1中未示出的其他计算机系统可以按各技术方式与计算机系统102进行交互,或者例如通过网络接口设备使用到网络108的一个或多个连接与另一系统实施例进行交互。

计算机系统102包括至少一个逻辑处理器110。计算机系统102与其他合适的系统一样,还包括一个或多个计算机可读存储介质112。介质112可以是不同的物理类型。介质112可以是易失性存储器、非易失性存储器、被安装就位的介质、可移动介质、磁介质、光学介质、固态介质和/或其他类型的物理可持续介质(而不仅仅是传播信号)。具体而言,诸如便携式(即外置)硬盘驱动器、CD、DVD、记忆棒、或其他可移动非易失性存储器介质之类的经配置的介质114在被插入或以其他方式安装时可以在功能上变为计算机系统的技术部分,从而使其内容可被访问以供与处理器110交互并由处理器110使用。可移动的经配置的介质114是计算机可读存储介质112的示例。计算机可读存储介质112的某些其他示例包括内置RAM、ROM、硬盘、以及其他不能被用户104轻松地移走的存储器存储设备。为了符合当前美国专利要求,计算机可读介质、计算机可读存储介质和计算机可读存储器都不是信号本身。

介质114用可由处理器110执行的指令116来配置;“可执行”在此以宽泛的意义被使用以包括机器代码、可解释代码、字节码和/或在例如虚拟机上运行的代码。介质114还被配置有数据118,该数据通过指令116的执行被创建、修改、引用和/或以别的方式用于技术效果。指令116和数据118配置它们所驻留的存储器或其它存储介质114;当该存储器或其它计算机可读存储介质是给定计算机系统的功能部分时,指令116和数据118还配置该计算机系统。在某些实施例中,数据118的一部分代表了诸如产品特征、清单、物理测量值、设定、图像、读数、目标、卷等等之类的现实世界的项。这一数据还通过备份、还原、提交、中止、重新格式化和/或其它技术操作来变换。

尽管一实施例可被描述为被实现为由计算设备(例如通用计算机、蜂窝电话、或游戏控制台)中的一个或多个处理器执行的软件指令,但这一描述并非意味着穷尽所有可能的实施例。技术人员将会理解还可经常整体地或部分地直接用硬件逻辑来实现相同或相似功能,以提供相同或相似的技术效果。作为对软件实现的替换或补充,本文描述的技术功能可以至少部分地由一个或多个硬件逻辑组件来执行。作为示例并且不排除其它实现,一实施例可包括硬件逻辑组件,诸如现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统组件(SOC)、复杂可编程逻辑器件(CPLD)和类似组件。一实施例的组件可基于它们的输入、输出和/或它们的技术效果来被分组成各个交互功能模块。

在一些环境100中,一个或多个原始调试器120、调试器GUI 122、剖析器124和/或其他工具126具有其行为根据本文中描述的改变和增强中的一些或全部被修改的代码。诸如编译器128之类的软件开发工具126还通过产生程序130源代码132和/或将程序130源代码132变换成线程134和/或其他可执行代码136来帮助软件开发。代码132、136以及其他项可各自部分或全部驻留于一个或多个硬件介质112中,由此配置那些介质以实现超出所有硬件-软件合作操作中固有的“正常”(即,最小公分母)交互的技术效果。除了处理器110(CPU、ALU、FPU和/或GPU)、存储器/存储介质、(诸)显示器138、(诸)键盘140和(诸)电池之外,操作环境100还可包括其它硬件,诸如总线、电源、有线和无线网络接口卡和加速度计,这些硬件的各自操作在此被描述为并非已经对技术人员显而易见。CPU是中央处理单元、ALU是算术和逻辑单元、FPU是浮点处理单元而GPU是图形处理单元。

调试器120是用于对其他程序130进行测试和调试的计算机程序,所述其他程序被称为被调试程序程序或简称为“被调试程序”。源级调试器120示出调试期间的开发者104被调试程序源代码132。调试器120一般向软件开发者104提供对被调试程序执行的一些控制,诸如暂停执行以检查被调试程序的变量和其他内部状态信息,逐行地在被调试程序代码中步进,以及设置断点以在指定条件在被调试程序内发生时停止被调试程序执行。一些调试器120还允许开发者104在调试期间通过设置变量来修改被调试程序的内部状态,而不是仅仅观察该内部状态。

剖析器124是用于获得关于程序130执行的原始性能信息142的计算机程序。原始信息142是关于计算资源的使用的尚未在什么对那个使用有贡献或没有贡献的基础上被过滤、分割或因子分解的数据。例如,所花费的处理器周期的数目是关于处理器110使用的原始信息,而通过滤除操作系统代码的处理器使用而获得的数据将不是原始信息。

给定操作环境100可包括向开发者提供一组协调的软件开发工具的集成开发环境(IDE)144,其向开发者提供一组经协调的软件开发工具126,诸如编译器、源代码编辑器、剖析器、调试器等。具体而言,对于一些实施例,合适的操作环境中的一些包括或帮助创建被配置成支持程序开发的Visual开发环境(微软公司的商标)。一些合适的操作环境包括环境(Oracle America有限公司的商标),并且一些操作环境包括利用诸如C++或C#(“C-Sharp”)等语言的环境,但本文的教导适用于各种各样的程序设计语言、程序设计模型、以及程序,以及本质上适用于软件开发领域之外的使用内联的技术努力。

技术人员将认识到此处在“操作环境”下呈现的上述各方面和其它方面还可形成给定实施例的一部分。本文的标题不旨在提供将特征严格地归类成实施例和非实施例特征类别。

在附图中以轮廓形式示出了一个或多个项来强调它们不一定是所示操作环境或所有实施例的一部分,但是可以与此处讨论的操作环境或一些实施例中的各项互操作。未采用轮廓形式的项在任何附图或任何实施例中也不一定是必需的。具体而言,图1是为了方便而提供的;在图1中包括一项目不暗示该项目或对该项目的描述使用在本发明之前是已知的。

系统

图2示出了适合与一些实施例一起使用的体系结构的各方面。调试器120包括在代码132、136中步进以及执行包括设置和清除断点228在内的其他熟悉的动作的命令226。在调试期间,随着被调试程序130的各部分在断点之间执行,原始性能信息被递增地收集。原始性能信息142可包括至少部分由调试器、剖析器或另一诊断工具126引起的开销。这样的开销的至少一部分可由代码222基于一个或多个基础224来估计、计算、预计或以其他方式测量。具体地,一些实施例包括测得的诊断开销202,这些测得的诊断开销202归因于一个或多个诊断工具126的,并且一些实施例包括测得的调试器开销204,这些测得的调试器开销204归因于调试器120。调试器120是诊断工具的一个示例但不是唯一的示例,且由此调试器开销204是诊断开销202的一个示例但不是唯一的示例。例如,诊断开销202还可包括归因于剖析器124的开销。

将测得的开销从原始性能数据中移除提供对程序130性能208的经调整的测量206。移除在一些实施例中是使用开销移除代码216来执行的。一些实施例直接显示、传送和/或以其他方式提供一个或多个这样的经调整测量206的视觉表示210。一些实施例将一个或多个经调整的测量206在调试器GUI 122的源代码窗口内显示在经调整的测量206所涉及的源代码132的行212附近。在该上下文中,“附近”的一个示例指在指定数目214的行内,例如在同一行上(在距离零处)、在紧接在前的行上(在距离1处)或者在五行的距离内。“附近”的另一示例指在四行的距离内并以此类推一直向下到零距离,即在同一行212上。在一些实施例中,通过显示代码220显示视觉表示210和其他性能提示218,诸如解释文本和到附加性能信息的链接。

图3解说经调整程序性能测量206的一些示例。每一经调整程序性能测量206都具有一个或多个底层原始性能信息片段142。一种或多种给定种类的原始数据142和一种或多种种类的经调整数据206之间的对应关系要么在本文中被清楚地描述,要么是一对一的,并且据此参考标记应当被理解。

例如,对于储存器使用,参考标记302指代特定于程序130的本机代码部分304的存储器使用并且至少部分地基于关于存储器112的使用的原始信息142的经调整的程序性能测量206。类似地,参考标记306指代特定于程序130的受管理代码部分308的存储器使用并且至少部分基于地关于存储器112的使用的原始信息142的经调整的程序性能测量206。

根据图3,参考标记310指代特定于程序130的在特定处理器110上执行的程序130的代码136的存储器使用的经调整的程序性能测量206,并且使用310至少部分地基于关于存储器112的使用的原始信息142。参考标记314指代特定于程序130对堆312、112存储器的使用的经调整的程序性能测量206,并且堆使用314至少部分地基于关于堆312(其为一种存储器112)的使用的原始信息142。

根据图3,参考标记316指代特定于程序130对一个或多个处理器110的使用,并且至少部分地基于关于处理器使用的原始信息142的经调整的程序性能测量206。参考标记318指代特定于在程序130的执行期间在一个或多个处理器110中的低级事件,并且至少部分地基于关于处理器事件的原始信息142的一个或多个经调整的程序性能测量206,所述处理器事件诸如高速缓存未命中、分支误预测、流水线停顿、读/写危险和/或执行的指令的数目。

根据图3,参考标记320指代作为归属于程序130的运行时间,并且至少部分地基于关于在该程序的执行期间在两个时间点之间的运行时间的原始信息142的经调整的程序性能测量206。在其中归属于程序130的代码不在运行的那些点之间的周期将被移除,例如在测量流逝的运行时间320时。

根据图3,参考标记322指代作为归属于程序130的帧率,并且至少部分地基于关于在该程序的执行期间在两个时间点之间的帧率的原始信息142的经调整的程序性能测量206。

根据图3,参考标记324指代特定于在程序130的程序期间的线程活动,并且至少部分地基于关于活动事件的原始信息142(诸如上下文切换的数目、上下文切换的持续时间、I/O绑定周期的持续时间、主要或唯一地被用来实现上下文切换的存储器量、就绪线程事件的数目以及其他上下文切换数据)的一个或多个经调整的程序性能测量206。一些实施例利用与上下文切换和就绪线程事件有关的附加线程活动信息142,诸如涉及哪些线程、发生线程的时戳(相对于其他事件)、以及所涉及的线程上的调用栈。在原始线程事件中,持续时间、计数和其他度量324可从该信息142中被推导出。

根据图3,参考标记328指代特定于对归属于程序130的存储子系统326的使用,并且至少部分地基于关于在该程序的执行期间在两个时间点之间对存储子系统326的使用的原始信息142的经调整的程序性能测量206。非易失性存储子系统326是存储器112的示例。在一些情况下,存储子系统326被实现为外围设备106,而在一些情况下,它被内置为系统102的集成部分。

根据图3,参考标记332指代特定于对归属于程序130的网络108接口330的使用,并且至少部分地基于关于在该程序的执行期间在两个时间点之间对网络接口330的使用的原始信息142的经调整的程序性能测量206。

根据图3,参考标记334和336分别指代特定于对经采样的统一加权资源的使用或对归属于程序130的经采样的比例加权资源的使用的经调整的程序性能测量206。每一者都至少部分地基于关于在该程序的执行期间对所考虑的资源338的使用的原始信息142。资源338可以是任何计算资源,例如特定存储器112或全部存储器112,特定处理器110或全部处理器110,特定外围设备106或全部外围设备106,特定执行构造(诸如,线程134),所消耗的电功率,或者任何其他硬件、软件或其他计算资源。

图4解说示例调试器GUI 122的一些方面。GUI内容被组织在一个或多个窗口402和/或其他显示区域428中,一般包括以具有至少一个字体尺寸406的文本显示源代码132中的各行212的至少一个源代码窗口。例如字体尺寸、窗口尺寸、底层内容和用户设置确定针对给定项(诸如,一行源代码或者经调整的性能测量206(在增强的调试器中)的文本视觉表示210)显示的字母数字字符410的数目408。其他调试器窗口402可显示调用链、调用频率和关于一个或多个调用栈416的其他信息414。其他调试器窗口402可显示例如执行结果、变量值和错误消息。控件418允许用户104将程序130加载到调试器120中,显示420和设置和清除断点228,在源代码中步进以执行可执行代码136的相应部分,以及执行本文中描述或者传统调试器的用户104熟悉的其他动作。断点228、源代码行212、视觉表示210和其他所显示的项可被选择422,如通过突出显示、动画、色彩改变、确认请求或所选功能的执行所指示424的。作出选择422可部分地通过在屏幕上的GUI122中移动光标426来执行。在一些实施例中,熟悉的光标(例如,垂直线段、箭头、手)以及光标移动工具(例如,鼠标、笔、跟踪垫、箭头按键、跳格键)被使用。

在一些示例中,诸如人类用户I/O设备(屏幕、键盘、鼠标、图形输入板、话筒、扬声器、运动传感器等等)之类的外围设备106将可以存在以在操作上与一个或多个处理器110和存储器进行通信。软件进程可以是用户。

在一些示例中,系统102包括通过网络108连接的多个计算机。网络接口设备可以使用例如诸如分组交换网络接口卡、无线收发机或电话网络接口之类的组件提供对网络的接入,并可存在于给定计算机系统102中。然而,一示例也可以通过直接存储器存取、可移动非易失性介质、或其他信息存储-检索和/或传输方法来传递技术数据和/或技术指令,或者,计算机系统中的一示例可以在不与其他计算机系统进行通信的情况下操作。

一些示例在“云”计算环境和/或“云”存储环境中操作,其中计算服务不是自有的,而是按需提供的。例如,原始性能信息可从云中的一个或多个机器收集,并且随后被显示在云中的另一机器上。

一些实施例包括具有处理器110以及在操作上与处理器通信的存储器112的计算机系统。剖析器124驻留在存储器中,并且具有在通过处理器执行之际获得软件程序130的原始性能信息142的代码。调试开销移除代码216在通过处理器110执行之际产生软件程序130的至少一个经调整的程序性能测量206。这至少部分地通过从由剖析器124取得的原始性能信息142的至少一部分中移除测得的调试开销204来完成。驻留在存储器中的增强的调试器120具有图形用户界面122,该图形用户界面122在通过处理器执行之际提供用于在软件程序130中设置或清除用户指定的断点228的命令226。调试器120也是测得的调试开销204中的至少一部分的来源。增强的调试器还具有代码220,代码220在通过处理器110执行之际将经调整的程序性能测量206显示在调试器的图形用户界面122中。

在一些示例中,调试开销移除代码216包括以下中的至少一者:用于基于一起指示在调试器中软件程序的执行何时被暂停的暂停开始时间520和暂停停止时间522来测量调试开销的代码;用于基于在调试器中有多少调试上下文切换536在软件程序的执行时段期间发生来测量调试开销的代码;或用于基于软件程序的至少一部分中的调试版本存在542来测量调试开销的代码。

在一些示例中,系统102的特征还在于以下方式中的至少一者:经调整的程序性能测量206被显示在调试器图形用户界面中的显示区域428中,显示区域428在经调整的程序性能测量所涉及的源代码文本的0到5个水平文本行212的距离内;或者经调整的程序性能测量206被显示在调试器图形用户界面的源代码窗口402中并且被显示在经调整的程序性能测量所涉及的源代码文本的右边。

在一些示例中,系统102的特征还在于以下方式中的至少一者:所显示的经调整的程序性能测量206、210不遮挡或隐藏该软件程序在调试器的显示区域428中的任何源代码132;所显示的经调整的程序性能测量不遮挡或隐藏用于启动或暂停该软件程序在调试器中的执行的任何用户界面控件418;或者所显示的经调整的程序性能测量不遮挡或隐藏用于在调试器中设置或清除断点的任何用户界面控件418。

在一些示例中,系统102的特征还在于以下方式中的至少一者:所显示的经调整的程序性能测量206、210以不大于用于在调试器中显示源代码文本的字体尺寸的文本尺寸406显示文本;所显示的经调整的程序性能测量206、210对于所显示的每个计算资源使用使用少于二十个字符410的文本;当针对后续源代码文本行212的另一经调整的程序性能测量值被显示时,为给定源代码文本行212显示的经调整的程序性能测量值被取消显示;或者所显示的经调整程序性能测量210由符合以下句法594的文本组成:<整数>[空白空间]<时间单位>,其中<时间单位>表示以下中的至少一者:诸毫秒、一秒的几分之一、诸秒、或诸处理器周期。

在一些示例中,当(a)软件程序的源代码被显示在调试器中,以及(b)经调整的程序性能测量超过预定义的阈值509时,经调整的程序性能测量206被默认地显示在增强的调试器120中。

过程

图5和图6共同地在流程图500中示出一些过程实施例。各附图中示出或以其他方式公开的技术过程可以在某些实施例中自动执行,例如在脚本的控制下或以其他方式需要极少或不需要同时的实况用户输入。除非另外指明,否则过程也可以部分自动地且部分手动地执行。在一给定实施例中,可以重复过程的零个或更多个所示出的步骤,有可能利用不同的参数或数据来操作。一实施例中的各步骤也可按与图5和6中列出的从上到下次序不同的次序来完成。步骤可以串行地、以部分重叠的方式、或完全并行地执行。遍历流程图500以指出在过程中执行的步骤的次序可以在过程的一次执行与该过程的另一次执行之间不同。流程图遍历次序也可以在一个过程实施例与另一过程实施例之间不同。各步骤还可以被省略、组合、重命名、重组、或以其他方式偏离所示出的流程,只要所执行的过程是可操作的,并符合至少一个权利要求。

此处提供了帮助示出该技术的各方面的示例,但是在本文内给出的示例并未描述所有可能的实施例。实施例不仅限于此处所提供的具体实现、布置、显示、特征、方法或情形。给定实施例可包括例如附加的或不同的技术特征、机制、和/或数据结构,并可以以别的方式偏离此处所提供的示例。

在一些示例中,供在软件开发中使用的计算过程包括自动获得502正在具有图形用户界面的调试器中调试的软件程序的原始性能信息142;从原始性能信息的至少一部分中自动移除504测得的诊断开销,由此产生至少一个经调整的程序性能测量;以及,在调试器图形用户界面中自动显示508经调整的程序性能测量的视觉表示以及其相应的可执行代码最新近对依据经调整的程序性能测量测得的程序性能有贡献的至少某数目的源代码行,并且该数目在从1到4的范围内。移除506调试开销是移除504诊断开销的特殊情况,在该特殊情况中,移除的开销归因于调试器。

在一些示例中,原始性能信息142包括510以下程序性能测量中的至少一者的原始值:软件程序的本机代码部分的存储器使用、软件程序的受管理代码部分的存储器使用、特定处理器(例如,CPU、FPU、GPU)的存储器使用、分配的堆存储器使用、处理器使用(例如,CPU利用率、FPU利用率、GPU利用率)、低级处理器事件(例如,高速缓存未命中、分支误预测、流水线停顿、读/写危险、执行的指令的数目)、流逝的应用代码运行时间、帧率、线程活动、非易失性存储子系统使用、网络接口使用、电功率使用、外围设备使用、分配的资源使用、经采样的统一加权资源使用、或经采样的比例加权资源使用。

在一些示例中,该过程包括响应于软件程序的各部分在调试器中的执行516而在调试器的源代码窗口中提供512经调整的程序性能测量的经更新514的视觉表示210。

在一些示例中,移除504测得的诊断开销包括确认518指示在调试器中软件程序的执行何时被暂停的暂停开始时间520和暂停停止时间522,以及从针对软件程序计算的运行时间中移除524暂停的时间526。

在一些示例中,移除504测得的诊断开销包括确认518指示在调试器中软件程序的执行516何时被暂停的暂停开始时间520和暂停停止时间522,以及从针对软件程序计算的资源使用中移除528在暂停的时间期间对计算资源338的使用532。

在一些示例中,移除504测得的诊断开销包括分配表示在调试器中在软件程序130的执行时段期间发生了多少调试上下文切换536的上下文切换536计数538,以及基于上下文切换计数调整530原始程序性能测量。

在一些示例中,移除504测得的诊断开销包括基于关于软件程序的至少一部分中的调试版本存在542的统计信息来调整540原始程序性能测量。

在一些示例中,移除504测得的诊断开销包括基于关于软件程序的至少一部分中的发行版本存在546的统计信息来调整544原始程序性能测量。

在一些示例中,移除504测得的诊断开销包括基于软件程序的至少一部分中的数组边界检查码存在550来调整548原始程序性能测量。

在一些示例中,移除504测得的诊断开销包括基于关于调试版本中的函数被调用了多少次的信息544以及关于在软件程序的执行期间发行版本中的函数被调用了多少次的信息554来调整552原始程序性能测量。

在一些示例中,移除504测得的诊断开销包括基于软件程序的一部分为调试版本而非发行版本的计算出的概率558来调整556原始程序性能测量。

在一些示例中,移除504测得的诊断开销包括基于软件程序的一部分为发行版本而非调试版本的计算出的概率562来调整560原始程序性能测量。

在一些示例中,移除504测得的诊断开销包括基于将软件程序的一部分分类为调试版本的调用栈分析566来调整564原始程序性能测量。在一些示例中,移除504测得的诊断开销包括基于将软件程序的一部分分类为发行版本的调用栈分析566来调整564原始程序性能测量。

在一些示例中,移除504测得的诊断开销包括基于来自诊断工具而非调试器的开销503来调整568原始程序性能测量。

在一些示例中,移除504测得的诊断开销包括基于调试器功能评估(funceval)开销572来调整原始程序性能测量。

在一些示例中,显示步骤508显示针对软件程序的执行部分的经调整的程序性能测量的视觉表示,其中该执行部分的边界与源代码窗口中显示的一行源代码文本对应,并且其中经调整的程序性能的视觉表示的至少一部分被显示574在一显示区域中,该显示区域在源代码文本的0到3水平文本行距离内。

在一些示例中,视觉表示210具有到附加程序性能信息511的链接576,并且该过程进一步包括接收578用户对视觉表示的选择422;以及随后显示513该附加程序性能信息的至少一部分。

在一些示例中,接收578对视觉表示的选择422包括确定580选择模式505。这包括以下中的至少一者:确定用户已点击了该视觉表示;确定用户已在触敏显示屏138上触摸了该视觉表示;确定用户光标426正悬停在该视觉表示上方;或者确定用户已至少部分地使用键盘140选择了该视觉表示。

在一些示例中,显示步骤508显示经调整的程序性能测量的视觉表示,该视觉表示是容易忽略的,因为其具有以下特性中的至少三者:该视觉表示不遮挡或隐藏(即,避免582遮挡)该软件程序在调试器中的任何源代码,除非该视觉表示被选择;该视觉表示不遮挡或隐藏(即,避免582遮挡)用于启动或暂停该软件程序在调试器中的执行的任何用户界面控件;该视觉表示不遮挡或隐藏(即,避免582遮挡)用于在调试器中设置或清除断点的任何用户界面控件;该视觉表示以不大于586用于在调试器中显示源代码文本的字体尺寸的字体尺寸显示584文本;根据视觉表示句法594进行显示592;该视觉表示对每个经调整的程序性能测量使用588不小于二十个字符的文本的限制590,除非该视觉表示被选择来显示附加信息;避免596需要表示选择,因为对视觉表示的选择不是在调试器中启动或暂停软件程序的执行所必需的,和/或对视觉表示的选择不是在调试器中设置或清除断点所必需的。

在一些示例中,视觉表示210用作598用于提供附加程序性能信息511的工具提示501。GUI中的工具提示501例如通过悬停在项上和/或通过右击鼠标按钮来激活。为了避免混淆,注意虽然性能提示218可使用工具提示501来实现,但简单文本格式、链接和其他性能提示218实现也在本文中被示教。

经配置的介质

一些实施例包括经配置的计算机可读存储介质112。介质112可包括盘(磁盘、光盘,或其他)、RAM、EEPROM或其他ROM、和/或其他可配置存储器,特别包括计算机可读介质(而不仅仅是传播信号)。经配置的存储介质可以特别地是诸如CD、DVD或闪存之类的可移动存储介质114。可以是可移动或不可移动并且可以是易失性或非易失性的通用存储器可被配置成使用诸如经调整的性能测量206、视觉表示210、开销移除代码216、开销测量代码222和/或性能提示显示代码220之类的数据118和指令116形式的项来从可移动介质114和/或诸如网络连接等另一源进行读取来形成经配置的介质的实施例。经配置的介质112能够使计算机系统执行本文所述的技术过程步骤。如此,图1到10帮助示出了经配置的存储介质实施例和过程实施例,以及系统和过程实施例。具体而言,图5和/或图6中示出的各过程步骤中的任一步骤或本文以其他方式教导的任一步骤可被用来帮助配置存储介质来形成经配置的介质实施例。

其他示例

下面提供了额外的细节和设计考虑。如同此处的其他示例,在给定示例中,所描述的特征可以单独地使用和/或组合地使用,或根本不使用。

技术人员将理解实现细节可涉及诸如特定用户界面元素、API和特定示例程序之类的特定代码,且因此不必出现在本文中公开的技术的每个示例中。技术人员还将理解,在讨论细节中使用的程序标识符和一些其他术语是因实现而异的,且如此不必涉及每个示例。尽管如此,虽然它们不一定需要出现在这里,但是提供了这些细节,因为它们通过提供上下文可以帮助一些读者,和/或可以示出此处所讨论的技术的许多可能的实现中的一些。

关于本文中陈述的特定参数,技术人员将理解本文中示出的特定数目可从一个实现到另一实现改变,或者甚至通过调节代码或更改可配置值在给定实现内改变。在那个意义上,这些参数值在测试确定可实现的准确性级别后遭受改变的占位符。例如,选择的默认阈值可被向上调整,更大的最小值阈值可被施加,四舍五入可被引入以移除不存在的隐含精确性级别,数据呈现本身可被略微调节以使得它是近似值的事实更清楚等等。

示例的上下文讨论

以下示例是从提供本技术的某种概览及其的一些上下文的微软文档中导出的。在本文中,该讨论从Dev14讨论文档中导出。Dev14涉及由微软公司实现的Visual 软件程序的2014年6月的发行(Visual Studio是微软公司的标记)。Visual 程序和/或其文档的各方面与在此描述的示例的各方面相一致或将一致或以其它方式示出这些方面。然而,将理解,Visual文档和/或实现选择不一定要约束这样的示例的范围,且同样Visual和/或其文档也可包含位于这样的示例的范围之外的特征。还要理解,本文中的讨论是部分作为对未必是本领域技术人员的读者的帮助的一部分来提供的,并且因此可能包含和/或省略了其下面的引述没有被阉割要求来支持本公开的细节。

理解性能问题的起因可涉及对大数据集合的分析。这通常是用户驱动的操作,其中应用性能的全局视图被呈现给用户,并且其被预期遍历数据进行挖掘并标识导致该性能问题的代码区域(例如,行和函数)。相对较小集合的用户可对该“全局的自顶而下”的分析感到舒服,因为该分析通常需要学习对惯于代码优先开发和调试方法的许多开发者而言不了解的性能分析技术。由于这些工具的被感知到的深奥特性以及学习如何剖析和应用性能分析技术所需的时间资本,如今的性能分析工具被相对较小集合的有倾向的开发者使用,并且在各应用中性能问题未被解决。本文中描述的一些示例寻求通过使得性能分析工具成为正常的代码优先调试体验的一部分来降低启动性能分析工具所花的时间,并且通过在用户遍历其代码进行调试时向用户显露相关和上下文性能信息来教开发者如何进行性能分析。

该技术的一些示例的一些技术方面包括以下:

●在用户104正在调试程序130时,性能和历史诊断数据142被收集和分析。

●在用户通过增强的调试器120在代码中步进时,在编辑器中紧靠用户步进经过的(诸)代码行显示性能提示218。(性能提示218可使用工具提示501来实现,但简单文本、链接和其他性能提示218实现在本文中也被示教)。

●性能提示218是易于忽略的,并且示出向用户指示与其步进经过的(诸)代码行有关的潜在性能问题的度量206和其他信息511(被标记为性能提示)。

●性能提示中示出的度量206被调整,使得来自调试的开销和调试版本在可能的情况下被移除。

●用户可点击一些性能提示以查看性能信息的更详细的细分511,并按需迭代地打开更多细节511以便理解性能问题的起因。

●用户可打开附加性能分析工具126,以便获得更有用的性能提示,并在对性能提示采取行动时获得更详细的性能信息细分。

●用户可继续用增强的调试器120来控制程序执行以设置断点228,以及按需在代码中步进以触发进一步的性能提示,并收集关于其代码的特定部分的上下文性能信息。

在一些示例中,当用户开始调试程序时,对那个程序启动性能数据收集和分析。在一些示例中,数据收集和分析的级别可由用户通过各种调试工具配置选项来配置,以便平衡对该应用的性能分析的运行时影响。

当用户通过诸如命中515断点228、步进517经过代码、或以其他方式将控制传递给调试器(可能通过超级管理程序或操作系统)之类的手段命中其应用中的中断状态时,调试器通过将关于当前和最近的中断状态的一组信息提供给性能分析引擎230来检查519与自最近的中断状态以来已执行的(诸)代码行有关的任何性能提示。这样的信息511可包括但不限于中断状态的指令指针、函数调用栈、线程id、局部变量和高精度时戳。

性能分析引擎230使用该信息来将调试动作与收集的性能数据的全局集合相关,并标识与用户的代码相关的潜在性能问题。一个示例性能分析引擎230对与用户的调试动作相关的数据运行一组规则,并检测满足在该规则集合中提出的准则的潜在性能问题。性能分析引擎230还可提供用户可采取的一组动作,并为每一性能提示存储进一步性能数据,以便使得用户能够在期望的情况下获得更详细的细分。

在一些示例中,性能分析引擎230可测量521通过使得调试器被附连并使用应用的调试版本而引入的调试开销。测量521调试开销的方法包括但不限于本文中讨论的方法。

至少部分地通过测量518该过程被调试器暂停时的开始/停止时间、移除524暂停的时间以计算应用的运行时间、以及从性能分析中移除应用的暂停时间期间的过程活动来测量521调试开销。

至少部分地通过经由测量调试上下文切换的数目来测量在应用的运行时间期间调试器上下文切换536的影响(导致调试暂停的)、以及基于统计模型将标准权重施加530到每一上下文切换来测量521调试开销。统计模型可通过在性能实验室中的离线性能分析测量或通过在目标机器上运行测试来生成。

至少部分地通过测量由代码的调试版本542引起的资源利用率来测量521调试开销,其中代码的调试版本引入被运行的额外代码或实现同一功能但用于调试目的的不同方法。在该情况下,针对统计CPU采样、分配剖析或其他资源属性收集的调用栈416可相对于可使得该调用栈有资格调试或没有资格调试的规则集合来运行。类似于Windows性能分析器中的栈标签特征,与已知函数名匹配的规则集合或者函数调用模式可被用来对栈进行分类566。附加地,关于哪些模块是调试版本以及哪些模块是零售版本的信息任选地与其他历史信息组合可在规则集合不充足时,提供关于哪些调用栈416可能是调试开销的提示。栈上的在调试模块中的函数的数目和位置可被用来分配560栈是调试开销的概率。可从CPU时间、流逝的时间、存储器使用、网络使用、磁盘使用、或可向用户示出的其他“资源利用率度量”中减去540被标记为调试开销的调用栈。替换地,它们可被用作用于确定当调试器没有被附连时,我们对测得的性能问题将是应用的发行版本的性能问题具有多少信心的“置信因子”。

例如,数组边界检查存在于调试版本中,并且通常可将显著的开销添加到在具有小主体的循环中对大数据集合进行操作的代码。在该情况下,与数组边界检查550有关的函数可被组织成调试开销,并且与边界检查相关联的栈可被移除548。

例如,如果调用栈的90%为连续的调试调用区域,则该调用栈可被认为有25%的概率为调试栈,并且因此这样的栈的25%应当从总资源计算中被折扣掉。使用的实际数目将取决于在典型的应用程序130上运行的各种测试。

例如,对于CPU使用的90%的情况,如果栈(在CPU上运行的实际指令)的顶部在作为模块的调试版本的一部分的函数中,则在给定在典型的设备应用中大多数时间花在系统代码中的情况下,它可被认为具有50%的可能为调试开销。

例如,如果CPU使用的90%在作为经优化的代码的系统二进制代码中,并且对该应用的检测告诉我们该代码仅被调用了一次,则非常不可能该代码为调试开销。

例如,如果CPU使用的90%在早期被观察到由于调试器被附连而没有被CLR JIT优化的函数中,则那个CPU使用的80%可被认为是调试开销。

在一些示例中,增强的调试器将以微小且易于忽略的性能提示218的形式在编辑器中示出508检测到的潜在性能问题,使得用户104不被惹恼,而改为倾向于在其在代码中步进时保留提示218被显示508。如果进一步信息511可用,则调试器将允许用户对性能提示采取行动(例如,点击)。如果用户点击性能提示,则向用户呈现适合于性能提示的内容的用户界面511。呈现的用户界面可向用户示出被收集的关于性能问题的相关和详细信息,或者用户可采取以便得到更详细的信息的(诸)下一步骤。诸下一步骤包括打开更多数据集合和分析或到更多用户界面的链接,从而用户可打开性能问题的细分。

存储器问题示例

本章节考虑重点围绕诊断存储器112问题的性能提示设计的一个示例。然而,存在许多其他示例,包括对诸如CPU使用、对外部服务调用的等待等(其也是可能的)一个或多个其他计算资源338的聚焦。其使用可通过本文中描述的方式来分析的计算资源338包括例如软件程序的本机代码部分的存储器使用、软件程序的受管代码部分的存储器使用、分配堆存储器使用、处理器使用、线程活动、非易失性存储子系统使用、网络接口使用、电功率使用、外围设备使用、分配资源使用、经采样的统一加权资源使用或经采样的比例加权资源使用。对存储器和硬盘控件是分配资源的许多可能示例中的两个示例。对CPU、图形处理器、数字协处理器或另一处理器进行采样并给予每一样本相同的权重是对统一加权资源使用334进行采样的一示例。对ROM访问、硬盘访问和其他(与RAM接入相比)相对较长的操作的持续时间进行采样是对比例加权资源使用336进行采样的一些示例。

在一个示例中,如图7所示,用户104步进517经过代码行212并看见前一代码行花费了1247ms来执行。这是比用户所预期的更多的执行时间,并使得用户倾向于通过追踪性能提示来找出更多信息。如图8所示,悬停在该1247ms提示218上提供附加信息,包括以下语句:“自调试中的最后中断起流逝了大致1247ms的程序时间。该过程用了CPU在那个时间中的约25ms。”

在另一示例中,如图9所示,用户104步进517经过代码行212并看见前一代码行花费了1247ms来执行并被分配了44MB的存储器。这是比用户所预期的更多的存储器,并使得用户倾向于通过追踪性能提示来找出更多信息。如果性能引擎(例如,剖析器)尚未收集详细的存储器分配信息,则将例如通过诸如“打开分配跟踪以查看由该代码行分配的存储器的细分”之类的显示语句向用户呈现将此打开的选项。该语句将包括在打开分配跟踪时要使用的可点击链接。

然而,在结合图9所示出的示例中,分配跟踪已经被打开。因此,在点击+44MB性能提示后,用户被呈现储存器分配的详细细分511,并且能够点击“更多细节……”来在该系统的总存储器状态和其他性能测量的上下文中查看这些分配。点击更多细节,(在本示例中)用户看见信息511,信息511包括随时间应用130的总存储器使用,并且在一些实现中包括诸如CPU使用之类的其他度量。这将允许用户104在总体程序的性能特性的上下文中测量这一性能问题有多严重。

关于性能提示的附加观察

在一些示例中,增强的调试器将精细地示出在步进517期间以及在某些情况下为在特定点之间运行时在代码编辑器中执行代码花了多久。开发者104评估性能的一种方式是在调试器中步进通过代码,并且获得关于在调试器中在两个点之间运行516花了多久的“直觉”。当需求上升为确切地测量执行代码花了多久时,许多开发者使用“System.Diagnostics.Stopwatch(系统.诊断.秒表)”或其他系统时钟来对情形花了多久进行计时。事实是集成开发环境144的许多用户仅寻找实际资源使用的数量级上的近似,以决定其代码“足够好”还是需要改进。不幸地是,当代码需要改善时,许多开发者不太可能转至可用的剖析工具,因为他们不知道这些剖析工具,或者他们感到这些剖析工具对于其目的而言太过复杂,因此这些开发者通常将通过在调试器中限制该问题来继续迭代地调试该问题。附加地,调试器给出精细粒度的执行控制,从而允许在该应用中的两个准确点之间的剖析。

为了适合于开发者的此工作流,本文中描述的种类的增强的调试器可在调试器用户界面122中提供性能提示218,该性能提示218将向开发者示出在中断之间执行代码花了多久。附加地,当开发者有兴趣调查什么对特定情形的执行时间有贡献时,调试器将允许剖析器124在调试时在后台运行,并且收集的数据511将可通过性能提示访问。

在调试时在编辑器中示出性能数据将有助于开发者在整个开发生存期中都考虑性能,这将降低逃避到生产的性能问题的数目。

在实现本文中示教的一个或多个示例时作出的一些决定可包括决定何时以及什么计时数据将在调试时在编辑器中被示出,以及决定什么扩展性机制将被考虑来允许将来的功能集成。一些实现将允许开发者明白当在调试器中步进经过各代码行时执行各函数花了多久,允许开发者明白在同一调用栈的两个点之间执行花了多久,允许开发者在调试时收集除计时信息以外的性能数据,允许开发者在调试时检查除计时信息以外的性能数据,允许/消费性能提示默认值的项目专用配置,和/或在工具->选项中创建“统一的”配置以支持与调试器的性能工具集成。

当开发者处于中断状态,并随后运行到下一中断状态时,将在编辑器中向其示出一提示,该提示显示被调试程序花了多久来执行那个代码路径。例如,在图7的屏幕截图中,开发者已步进经过了行73,并且因此当前停留在行75上。

如图7所示,在一些实施例中,代码行212的右侧被选为性能提示位,即使该性能提示位可随着某人从一行移动到后续行而从左向右移动位置,因为可信的早期可用性测试指示用户104喜欢右侧,因为在用户不关心右侧示出508了什么的情况下,右侧是容易忽略的。附加地,右侧定位提供了用附加信息(例如,网络请求、数据库查询等)来扩展提示的灵活性,而没有与源代码冲突的担心。这样的冲突将降低对该特征的用户满意度。

在一些示例中,如果被调试程序的流逝时间超过预定义的阈值(诸如,以下定义的阈值或者用户定义的阈值),并且在调试器下的“运行操作”满足某些准则,则计时信息210将被显示给用户。

一个准则是该操作是任何“步进”操作(步进经过、步进进入、步进跳出)。然而,在一些情况下,调试器120必需进行显著数目的单步操作以正确地执行“步进进入”(例如,在最差的情况下从脚本步进到本机指令可导致~100单步操作)。尽管每一步对被调试程序具有很小的影响,但较大的数目将组合以形成显著的影响204。所以在一些示例中,如果调试器具有三十个以上的内部“停止”操作(内部意指IDE不会影响处于中断状态的调试器),则性能提示不将被示出,因为该数据将可能是无意义的。

一个准则是用户从中断状态运行到断点或者执行“运行到光标处”,并且指令指针源自的同一方法在该调用栈上。即,

●其中停止的方法与“运行操作”源自的方法相同;或者

●用户处于嵌套调用,并且测量了从起点运行到那个点花费了多久;或

●该方法在循环中(例如,经由计时器或onrender事件)被回调,并且用户正在测量该调用之间流逝的时间。例如,用户在其“MainPage.onrender()”方法的结束处停止,用户在“MainPage.onrender()”方法的第一行上设置了断点并按下F5。当用户命中断点时,用户将看到在运行时再次回调该同一方法之前流逝了多少时间。

●对于源示例,参见本文中的性能提示示例行为章节。

一个准则是提示218将通过以下约束基于调用栈被示出:

不将存在调用栈以上多远处的深度限制,一些示例将搜索该运行源自的方法(提示将仅在与调用栈窗口相同的节奏上触发调用栈走查——参见数据呈现章节以得到细节)。尽管调用栈走查可能是昂贵的,但大多数用户已经使得调用栈窗口打开,或者使得调用帧向下移动,这无论如何都会导致栈走查。

如果该运行源自的方法在异步调用栈(不仅仅是物理栈)上,则一些示例也将示出提示。

在一些示例中,一个准则是提示将示出508,而不管任何线程ID考虑;尝试通过异步编程示出线程ID的成本可能是高的。如其当今所存在的那样,用户已必需用断点228处理此(或者绕过此),并且这可如当今一样用断点过滤器或线程/任务冻结来绕过。然而,其他示例将示出线程ID。

在一些示例,提示218将被显示508,除非假设当前调用栈满足可应用准则。

这样的准则旨在帮助开发者104获得针对编码路径的有意义的度量,这些度量在应用130的流动方面逻辑地相关。一些实现尝试通过不示出从应用的角度来说可能无意义的性能信息(例如,在对不同ASP.NET或其他web页面的请求之间流逝了多长时间,或诸如按钮点击之类的不同用户姿势)来避免使开发者混淆。但是即使示出了对同一web页面的各页面请求之间流逝的时间可在调试情形上引入用于检测该方法实例何时已被退出的额外性能开销,一些示例最初留给开发者来确定在这样的情况下这些开发者是否对该数据感兴趣。

在一些示例中,显示508的时间将是发生的总流逝(或系统)时间。工具提示将包含由该过程在帮助将开发者引导到正确的工具的那个时间期间消耗的CPU时间(进程时间)。如果模块在流逝的时间期间加载,则调试器将从所流逝的时间中过滤掉该进程在其执行工作(例如加载符号)时被停止的时间。

性能提示示例行为

以下的一些说明性情形参考以下示例源代码132;行号在沿着左手侧的列中被示出。

情形1。用户处于中断状态,且指令指针在行3上。用户在行28上设置断点。用户按下F5,并命中该断点。如果所流逝的时间超过阈值,则性能提示将被示出508,因为MainPage_Loaded在该调用栈上。

情形2。用户处于中断状态,且指令指针在行4上。用户执行步进经过,并在行5上停止。如果所流逝的时间超过阈值,则性能提示将被示出508,因为用户在该运行源自的同一方法中。

情形3。用户处于中断状态,且指令指针在行3上。用户在行20上设置断点。用户按下F5,并且行20上的断点被命中。如果所流逝的时间超过阈值,则性能提示将被示出508,因为MainPage_Loaded在异步调用栈上。

情形4。用户处于中断状态,且指令指针在行3上。用户按下5,并且应用如预期地加载。用户在行20上设置断点。用户点击btnLoadPictures按钮,并且行20上的断点被命中。性能提示不将被示出508,因为该运行源自MainPage_Loaded,并且当应用中断时,MainPage_Loaded不在该调用栈上。

数据呈现

在一些实现中,当在调试器下运行时存在要向开发者示出的性能数据206、218和/或511时,在中断发生时,这些数据将与指令指针一起在编辑器中当前行212的右边被示出。如果用户在处于中断状态时手动地改变指令指针位置(例如,拖动该位置,或者进行设置下一语句),则提示218不将改变位置,它将保持在原始位置。

一种方法是在步进经过的情况下,将提示218(例如,文本表示210)放置在这些提示218所适用于的行的右边。然而,一些示例使用以上示出的放置,因为其实现对总之针对“要运行的”操作的当前行的支持,性能提示在该位置更显著,并且在期望的情况下它可在其他版本中移动。

在一个实现中,性能提示218将在200ms的持续时间内淡化。在一些情况下,将在代码行的末端的右边绘制15像素;如果用户具有已经存在于该行上的锁定的数据提示,则性能提示将在该锁定的数据提示的右边出现,并且如果用户尝试将数据提示锁定在具有性能提示的行上,则该数据提示将锁定在性能提示218的右边。在一些实现中,性能提示将至少部分地以“<以毫秒为单位的时间>ms”的形式被呈现。时间将总是以毫秒的形式呈现以保持一致性,并且大数字将使用场所专用格式(例如,1000在欧洲将呈现为1,000,并且在使用.而非,的场所将呈现为1.000)。在一些实现中,当IDE再次进入“运行”状态时,性能提示将消失,这意味着当黄色的指令指针箭头示出时,性能提示将始终示出,并且当黄色的指令指针箭头消失时,性能提示将消失。在一些实现中,性能提示218将在与调试器中发生的UI更新的其余部分(查看窗口、调用栈窗口—当前有150ms的延迟)相同的节奏上被绘制以避免在用户“快速步进”时引入附加的性能开销。在一些实现中,性能提示将无法被移动或关闭。在一些实现中,当用户悬停在性能提示上时,将以“在调试中,自上一个中断起,流逝了约_____ms的总程序时间。该进程在那个时间使用了约__ms的CPU”的形式594给予用户解释该数据意味着什么的工具提示。

字体和色彩

在一些实现中,增强的调试器将重新使用由现有工具126所定义的字体和色彩设置。作为具体的非限制示例,一些示例使用由微软的工具(微软公司的标记)定义的字体和色彩设置,但以工具->选项->通用->字体和色彩中创建其自己的画笔和输入,题为具有以下设置的“性能提示”。

·字体尺寸:8(默认编辑器字体尺寸-2)

·字体:Calibri

·提示文本:

ο亮度:#FF999999

ο暗度:#FF999999

ο蓝色:#FF999999

ο高对比度(HC):System.GrayText(系统.灰度文本)

·被悬停的文本:

ο亮度:#FF0E70C0

ο暗度:#FF0097FB

ο蓝色:#FF0E70C0

οHC:System.HotTrack(系统.热轨迹)

注意:由于这些可被配置为字体和色彩中可用的设置,因此当用户改变其编辑器配置时,这些设置不将改变,用户需要在字体和色彩中更新这些设置。

阈值和可配置性

该配置对话的目的是允许可发现和可使用的形式的具有提示218的用户体验(例如与依赖于注册表项相反)。出于该原因,一些实现将重新使用IDE中已经存在的现有“性能和诊断”页。

在一些示例中,性能提示可在项目系统内定义,并且可在每个项目(或每个解决方案)的基础上被配置,其中特定项目类型可定义对于那个项目类型有意义的目标(例如,DirectX C++应用将一般具有与ASP.NET应用非常不同的目标)。附加地,一些在调试器和剖析器集成之间提供统一的“配置”叙述。

在一些示例中,流逝的时间的默认阈值将为15ms。这意味着如果被调试程序130在各中断操作之间运行小于15ms,则性能提示不将被示出508。在一些情况下,将存在两个配置选项被添加以允许用户控制性能提示。一个配置选项是启用/禁用性能提示的复选框。另一配置选项是允许用户定义以毫秒为单位的阈值的文本框。小于1的值将不被接受。如果用户输入小于1的值,则工具将示出错误消息“1是所允许的最小值”。不强加所接受的最大值。在一些版本中,这些设置将被添加到工具->选项->性能工具->性能和诊断选项页;它们将处于“性能提示”组中。禁用“在调试时显示性能提示”将禁用所有子选项的复选框(对于此体验,这仅是流逝时间阈值)。

可扩展性

一些实现将使得剖析数据511能够被集成到将向开发者示出在那个时间期间发生了什么的体验。为了允许这个,将按各种方式实现性能指示符。在一种方法中,工具扩展可添加如该体验中定义的定时提示之类的附加指示符提示。例如,将性能提示添加到显示存储器信息中。互补用户界面可被示为来自在被点击时将出现的指示符提示。

遥测术

作为实现性能提示218的一部分,考虑以下问题可以是有帮助的。正被显示的性能提示的时间百分比是什么(性能提示被显示的时间#/量化停止事件的总数)?被显示在性能提示中的时间是什么?在性能提示被启用的情况下调试器启动的数目相对在性能提示被禁用的情况下调试器启动的数目是什么。

关于将性能时间写到输出窗口,作为调试器输出窗口的附加或替换,一些示例还提供可在诊断中枢中获得的“调试日志”。

关于用户104可在给定时间在给定程序130的屏幕138上看见的性能提示218的数目,一种方法将保持有限数目的提示(大于1)可见以构建小的热路径。在其他示例中,在某个时间(在当前时间)仅一个性能提示被示出508。附加性能提示的风险是当将新的元数据添加到编辑器时,顾客可能由于其发现该新的元数据在视觉上是嘈杂的而将其关闭。

一些示例给予用户104移动或隐藏显示的提示的能力,或给予用户在编辑器中关闭或移动提示的能力。一些示例给予用户定制时间单位如何被显示(或基于最小专用阈值来自动进行调整)的能力。在其中各调用可花费非常长的时间的情形中,用户可想要选择以比毫秒更大的单位显示时间的能力(例如,web服务开发者可想要考虑秒而不是毫秒)。

结语

虽然具体示例在此处被明确描述为进程、已配置的介质、或系统,但是将领会,对一种类型的示例的讨论也一般性地延伸到其他示例类型。例如,对各进程的描述也有助于描述已配置的介质,并且有助于描述系统和制成品的技术效果和操作。对一个示例的限制也不一定适用于另一个实施例。具体而言,进程不一定仅限于在讨论诸如已配置的存储器之类的系统或产品时呈现的数据结构和方案。

本文对具有某一特征X的示例的引用以及本文别处对具有某一特征Y的示例的应用不从具有特征X和特征Y两者的本公开的示例中排除,除非这一排除在此被明确指明。术语“示例”在此仅仅被用作“过程、系统、制品、经配置的计算机可读介质和/或此处如以与适用法律一致的方式应用的教导的其它示例”的更方便的形式。因此,给定“示例”在该示例与至少一个权利要求一致的情况下可包括此处所公开的特征的任何组合。

不是阐述的每一术语都需要在每一示例中存在。虽然一些可能性在此处通过具体示例示出,但是各示例可能偏离这些示例。例如,一示例的具体技术效果或技术特征可以被省略、重命名、以不同的方式分组、重复、不同地以硬件和/或软件实例化,或是在两个或更多示例中出现的效果或特征的混合。在一些示例中,在一个位置示出的功能也可以在不同位置被提供;技术人员认识到在给定实现中功能模块能够以各种方式定义,而不必从作为一个整体来看的交互模块的集合中省略所需技术效果

如此处所使用的,诸如“一”和“该”等术语包括了所指示的项或步骤中的一个或多个。具体而言,在权利要求书中,对一个项的引用一般表示至少一个这样的项存在,并且对一个步骤的引用表示执行该步骤的至少一个实例。

标题仅是为了方便;关于给定话题的信息可在其标题指示该话题的章节之外被寻找到。

所提出的所有权利要求都是本说明书的一部分。

尽管在上文中描述了示例性示例,但本领域普通技术人员将明白,可作出多种修改而不背离权利要求书中阐明的原理和概念,且这些修改不需要涵盖整个抽象概念。尽管用结构特征和/或过程动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于权利要求书上面所描述的具体特征或动作。不一定在给定定义或示例中标识的每一个手段或方面或技术效果都在每个示例存在或使用。相反,所描述的具体特征和动作以及效果是作为供当实现权利要求书时考虑的示例来公开的。

无法包围整个抽象概念但落入权利要求的等效技术方案的意义和范围内的所有改变都在法律所准许的最大程度内被包含在其范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号