调试和诊断系统允许动态代码生成,该动态代码生成将代码插入生产应用以标识使得在预定义条件被满足的情况下快照被拍摄的快照点或断点。快照点与生产应用的源代码中的位置相关联并包括必须被满足以创建生产应用的快照的条件语句。快照点被用来生成收集计划,收集计划被提供给运行生产应用的服务器。服务器基于收集计划重写生产应用的代码,以插入在条件语句满足时创建快照的指令。
【技术实现步骤摘要】
【国外来华专利技术】背景传统的软件诊断工具(诸如调试器、剖析器以及存储器诊断工具)通常对实况的、正在运行的进程或保存的、重量进程状态(诸如进程转储文件或历史轨迹)进行操作。实况的进程提供关于进程如何达到其当前状态的很少的历史上下文或不提供关于进程如何达到其当前状态的历史上下文。在冗长的同时,创建和分析进程转储文件是极其重量且耗时的。用于诊断运行在生产环境中的应用中的逻辑问题的大部分当前最新工艺使用轨迹语句或动态跟踪。例如,轨迹语句,诸如打印调试,监视指示进程的执行的流的打印语句。动态跟踪,诸如微软在保持生产进程停止时实时收集数据。另一方法是允许诊断解释,诸如微软iDNA。所有这些当前的方法具有缺点。如果现有跟踪不够,那么跟踪需要修改代码。这样的修改需要重构并重新部署应用。对于跟踪,仅开发者实际上添加到跟踪的数据可见。由于跟踪实时运行而所涉及的线程在数据被收集时不能执行真正工作,跟踪语句趋向于很小且仅收集少量比特的信息。低影响的方法,诸如跟踪和在可被收集的数据方面非常受限,因为收集必须实时发生,其可能对目标进程有很大影响并可能降低吞吐量和性能。经解释模型,诸如微软公司的TimeTravelTracing(iDNA),有巨大影响,使得它们不适合在生产环境中诊断问题。不侵略性且不破坏性地收集诊断数据是重要的。在生产环境中,诊断工具应当对生产进程和系统具有很少影响或不具有影响。使用现有的方案来对进程状态数据进行收集可能以不期望的方式影响进程和系统。概述提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。本专利技术的各实施例允许用户研究服务器进程上的问题而不停止该进程。用户可标识进程代码中在特定条件下可在那里收集大量数据的点。用户可设立用于数据收集的点,并在每个点处定义数据收集的条件。代替实况调试该进程,所收集的数据被导出到可被上传到服务器的文件或收集计划。监视实用程序消费收集计划并注入使得进程的快照被创建的代码。监视实用程序修改被分析的函数的IL(中间语言),使得条件执行并确定何时创建进程的快照。在条件满足时,快照创建整个进程的副本,包括存储器空间、模块列表等等。用户可随后使用快照副本来检查任何变量的值。一旦快照被创建,用户可向它们附连调试器并以类似于崩溃转储的方式来分析它们。可替换地,收集器进程可被用于从快照挖掘数据。通过创建多个快照,用户获得了随时间在进程中发生了什么的历史图片。例如,用户可通过在不同位置拍摄若干快照来模拟步进。用户通过分析逐快照的改变来诊断生产应用。本专利技术的各实施例允许动态代码生成,其将代码插入生产应用以标识在预定义条件满足的情况下使得快照被拍摄的快照点或断点。附图为了进一步阐明本专利技术的各实施例的以上和其他优点和特征,将参考附图来呈现本专利技术的各实施例的更具体的描述。可以理解,这些附图只描绘本专利技术的典型实施例,因此将不被认为是对其范围的限制。本专利技术将通过使用附图用附加特征和细节来描述和解释,附图中:图1示出用快照的历史调试。图2示出根据一个实施例的轻量进程快照。图3是示出根据一个实施例的使用收集器进程的诊断的流程图。图4是系统的框图,其中生产应用在数据中心或分布式网络中的服务器上运行。图5示出了集成开发环境(IDE),其中开发者已经为所涉及的应用打开了一个项目。图6示出了收集计划XML文件内的快照点的示例定义。图7是用于分析生产进程而不停止或影响进程的系统的框图。图8图示了适当的计算和联网环境的示例。详细描述本专利技术的各实施例通过允许开发者定义数据应当在哪里被捕捉以及在什么情况下它应当被获得来允许诊断生产应用。这些诊断点在本文中也被称为“快照点(snappoint)”。每个快照点导致进程的整个副本在存储器内被创建。在本文中被称为“快照”的这些副本可在一个实施例中使用极为高效的机制来创建,该机制包括操作系统中的写时复制语义以及捕捉其它小的重要数据结构,诸如线程列表、模块列表、以及线程上下文。不同操作系统可结合其它机制来创建进程的快速副本。每个快照花费大约10ms来创建。其它因初始进程页面发生故障的快照花费随时间分摊。然而,对于大多数具有常规数据位置的应用,从页面故障恢复的花费是极小的。一旦快照(或一系列快照)被创建,诸如调试器的诊断工具可附连到快照以检查。替代地,诊断收集器进程可在快照上运行并调用它想要的任何数据。使用快照,收集不受限制,因为它不在生产中的实况服务器进程中实时执行。使用多个快照,开发者可看见应用随时间的状态,就好像它们是实况调试一样,而不会影响实况生产进程的可用性。此外,使用高级条件,诸如使得每个快照点针对专门选择的web请求来执行,开发者可确保快照点逻辑相关(甚至在立即处理许多web请求的所加载的生产服务器上)。快照与目标进程在其上运行的操作系统合作来被创建。相比于要求诊断工具亲自生成快照,这允许快照被快得多地并使用较少的系统资源来被创建。在一个实施例中,操作系统的存储器映射机制和写时复制(copy-on-write)被用于在目标进程的地址空间中映射到新的快照进程。进程快照可以是使用页表复制和写时复制操作的对正在执行的进程的克隆。进程快照可通过其它方式被创建,诸如通过在目标进程上反射或复制目标进程的存储器地址。如果原始进程被允许运行,则新的存储器页副本在进程向每页进行写时被创建。这可对原始进程的性能具有一些最小影响,但是它必须仅在当某页被实际写入时创建实际页。在一些实施例中,进程状态可被诊断工具复制。例如,进程快照机制可能不对模块列表或线程列表进行快照,但是诊断工具可快速地创建模块列表或线程列表的快照并不以复制进程堆或栈所需要的方式来消耗资源。快照模型在调试会话期间启用历史调试的模式。随着时间的被调试进程的快照允许用户查看被调试进程的状态,就好像其在快照被摄取时所存在的那样。用户可控制何时快照被摄取或调试器可在某个预定的触发或事件后自动地摄取快照。系统的物理和逻辑资源是对一次可为进程创建的快照的数量的唯一限制。这使得调试会话一次具有存在于系统中的多个快照成为可能。图1示出用快照的历史调试。调试器进程101被用于调试被调试进程102。调试器进程101具有允许用户分析被调试进程的组件的用户界面。例如,用户界面可以提供示出调用栈103、模本文档来自技高网...
【技术保护点】
一种分析正在执行的进程的方法,所述方法包括:访问开发者机器上正在执行的进程的源代码;在所述源代码中定义一个或多个快照点;生成包括有关一个或多个快照点的信息的收集计划;将收集计划发送到运行正在执行的进程的生产服务器;以及修改所述生产服务器上的正在执行的进程的代码,以包括当一个或多个快照点的条件被满足时从正在执行的进程中创建快照的指令。
【技术特征摘要】
【国外来华专利技术】2013.11.18 US 14/083,1571.一种分析正在执行的进程的方法,所述方法包括:
访问开发者机器上正在执行的进程的源代码;
在所述源代码中定义一个或多个快照点;
生成包括有关一个或多个快照点的信息的收集计划;
将收集计划发送到运行正在执行的进程的生产服务器;以及
修改所述生产服务器上的正在执行的进程的代码,以包括当一个或多个快
照点的条件被满足时从正在执行的进程中创建快照的指令。
2.如权利要求1所述的方法,其特征在于,进一步包括:
在快照点条件被满足时生成快照;
将诊断工具与所述快照相关联;以及
使用所述诊断工具从所述快照中收集数据,而不影响所述正在执行的进
程。
3.如权利要求1所述的方法,其特征在于,使用集成开发环境(IDE)或
开发者机器上的编辑器来访问所述源代码。
4.如权利要求1所述的方法,其特征在于,所述源代码中的所述一个或多
个快照点被定义为断点。
5.如权利要求1所述的方法,其特征在于,所述快照点被定义为所述源代
码中的位置以及一个或多个条件语句。
6.如权利要求1所述的方法,其特征在于,通过使用所述生产服务器上的
剖析器API来修改所述正在执行的进程的所述代码。
7.如权利要求1所述的方法,其特征在于,通过所述生产服务器上的中间
语言(IL)-重写来修改所述正在执行的进程的所述代码。
8.如权利要求1所述的方法,其特征在于,通过将机器代码注入所述生产
服务器上的本机代码中来修改所述正在执行的进程的所述代码。
9.如权利要求1所述的方法,其特征在于,所述正在执行的进程的所述代
码运行在经解释的环境中,所述方法还包括:
由解释器评估快照点条件;...
【专利技术属性】
技术研发人员:J·戴维斯,
申请(专利权)人:微软技术许可有限责任公司,
类型:发明
国别省市:美国;US
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。