首页> 中国专利> 增强软件的软件调用栈的可视化的方法、设备和系统

增强软件的软件调用栈的可视化的方法、设备和系统

摘要

公开了一种用于增强软件调用栈的可视化的方法、设备和系统。根据本发明的方法包括步骤:获得用于描述所述软件的软件架构的软件架构信息;解析所述软件架构信息以生成一组模块对象,其中所述模块对象与所述软件的软件模块相对应;获得所述软件调用栈的调用对象,其中所述调用对象对应于所述软件的运行中执行的方法或函数;将所述模块对象的调用接口与所述调用对象进行比较;以及根据比较结果,将模块对象的对应信息关联到所述软件调用栈的调用对象。通过使用本发明,能够将软件产品的架构信息结合到软件产品的调用栈的可视化中,使得用户能够应用其对软件产品架构的了解来帮助搜索和定位感兴趣模块的执行信息。

著录项

  • 公开/公告号CN102486731A

    专利类型发明专利

  • 公开/公告日2012-06-06

    原文格式PDF

  • 申请/专利权人 国际商业机器公司;

    申请/专利号CN200910225835.6

  • 发明设计人 沈华品;林鸿昌;孙剑桥;陈沁悦;

    申请日2009-11-30

  • 分类号

  • 代理机构中国国际贸易促进委员会专利商标事务所;

  • 代理人鲍进

  • 地址 美国纽约

  • 入库时间 2023-12-18 05:25:47

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-12-09

    授权

    授权

  • 2012-07-25

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20091130

    实质审查的生效

  • 2012-06-06

    公开

    公开

说明书

技术领域

本发明涉及软件行为的可视化技术,更具体而言,涉及一种用于 增强软件的软件调用栈的可视化的方法、设备和系统。

背景技术

信息可视化(Visualization)技术是利用计算机图形学和图像处 理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处 理的技术。通常,开发人员具有对于在图形用户界面(GUI)上可视 化所需信息和工具的工具支持。

在软件性能分析中分析软件调用栈是常用且非常有用的手段。这 里“软件调用栈”是指对于软件执行过程中软件行为的记录。开发人 员通常通过能够可视化软件调用栈的图形用户界面来浏览和分析软件 调用栈。软件调用栈可视化的输入来自于系统中Profiling(采样)工 具的输出。Profiling技术被开发用于提供程序实际执行时的相关信息。 Profiling工具捕获在软件运行过程中的调用信息——诸如特定方法/ 函数是否被调用、调用特定方法/函数的次数、调用者和被调用者之间 的关系、花费在执行特定方法/函数上的时间等——并且产生作为明文 文本输出的数据文件,诸如文本文件或二进制文件。Profiling工具能 够帮助用户分析并发现软件程序运行的瓶颈,找到耗时所在,从而最 终实现程序的优化。但是,Profiling工具的输出主要记录软件程序在 代码级别的行为,例如,有多少工作线程以及详细的数据流和控制流 (诸如,调用信息)等等。

现有技术中已经存在解析Profiling工具输出的软件调用栈的数据 文件并还原软件调用栈以生成软件调用栈可视化的工具。“解析”用 于基于软件调用栈的数据文件生成一组调用对象,这里软件调用栈中 的一个“调用对象”指的是一个软件在其运行中执行的一个方法或函 数。“还原”用于识别出代码级别的所有的调用对象之间的调用关系。 图1示出了利用一个现有软件调用栈可视化工具获得的软件调用栈可 视化的一部分的屏幕截图。但是,现有软件调用栈可视化工具具有如 下缺陷:

1.在现有软件调用栈的可视化中对软件调用栈进行浏览和定位非 常耗时

软件调用栈的信息非常庞杂,数据量巨大。在软件调用栈中,从 应用的开始点到特定调用,可能要深入数千级。如果到达的调用不是 感兴趣的那个调用,则用户需要从另一分支重新开始并深入。这么一 遍又一遍地重复,直到定位性能问题为止。这甚至可能使用户浏览数 万至数十万级调用栈,甚至更多。

2.软件的所有信息都被堆叠到代码级别中

软件调用栈仅仅涉及到代码级别的软件行为。它不能呈现高层次 的软件设计和软件架构信息,而这些信息在分析软件的性能时可能会 有很大帮助。

在本领域中通常以结构化的方式设计软件。软件架构师常常将软 件设计成一组模块的组合。这些模块及模块之间的交互通常被定义为 软件架构。有关这些模块及模块之间的交互的信息通常被定义为软件 架构信息。软件架构在软件设计阶段完成,并且可以被相关人员获得。 图2是示出一个现有软件的软件架构的示例性框图,其中一个方框代 表一个模块,不同模块之间的重叠表示模块之间具有调用关系。

通常可以在软件设计阶段中完成所有模块定义。例如,模块可以 被定义为执行某一功能的代码单元。当软件运行时,软件的各个模块 协作以作为一个整体完成功能或服务。如果软件具有性能问题,则很 可能是由于在某些模块中存在瓶颈。所以在多数情况下,性能分析关 心的仅仅是一部分软件调用栈。该部分软件调用栈可以被映射到软件 架构中的一个或多个模块。

现有技术已经进行了如下尝试来解决在现有软件调用栈可视化工 具中存在的上述问题:

1.使用基于关键词或表达式的搜索,其提供基于关键词搜索调用 栈的功能

2.通过预先定义的度量或阈值来分组和过滤,其提供基于正则表 达式或阈值的过滤功能

使用这种搜索技术的例子之一是Visual Performance Analyzer(VPA,可视性能分析器)(其详细描述可以从网址 http://www.alphaworks.ibm.com/tech/vpa处获得)。图3示出了使用 VPA可视化窗口提供的查询界面的屏幕截图。

这些手段虽然有用,但是所起作用非常有限。这些手段仅仅涉及 到软件调用栈本身,并且软件的所有信息仍然被堆叠在代码级别中。 通过这些手段用户仍然不能在浏览和定位软件调用栈中应用其对于软 件架构的了解。

因此,需要一种能够增强软件的软件调用栈的可视化的方式,使 得用户能够在可视化和分析软件调用栈的同时应用其对软件产品架构 的了解来帮助搜索和定位感兴趣模块的执行信息。

发明内容

考虑到现有技术中存在的上述问题,本发明提供了一种用于增强 软件调用栈的可视化的方法、设备和系统。根据本发明的所述软件调 用栈的可视化结合有软件架构信息。根据本发明实现的软件调用栈的 可视化能够帮助用户应用其对软件产品架构的了解,从而加速对软件 调用栈的浏览并且帮助定位性能瓶颈。

本发明可以以包括方法、设备或系统的多种方式实施。下面讨论 本发明的几个实施例。

作为一种用于增强软件的软件调用栈的可视化的方法,本发明的 一个实施例至少包括下列操作:获得用于描述所述软件的软件架构的 软件架构信息;解析所述软件架构信息以生成一组模块对象,其中所 述模块对象与所述软件的软件模块相对应;获得所述软件调用栈的调 用对象,其中所述调用对象对应于所述软件的运行中执行的方法或函 数;将所述模块对象的调用接口与所述调用对象进行比较;以及根据 比较结果,将模块对象的对应信息关联到所述软件调用栈的调用对象。

作为一种用于增强软件的软件调用栈的可视化的设备,本发明的 一个实施例至少包括:用于获得用于描述所述软件的软件架构的软件 架构信息的装置;用于解析所述软件架构信息以生成一组模块对象的 装置,其中所述模块对象与所述软件的软件模块相对应;用于获得所 述软件调用栈的调用对象的装置,其中所述调用对象对应于所述软件 的运行中执行的方法或函数;用于将所述模块对象的调用接口与所述 调用对象进行比较的装置;以及用于根据比较结果,将模块对象的对 应信息关联到所述软件调用栈的调用对象的装置。

作为一种用于增强软件的软件调用栈的可视化的系统,本发明的 一个实施例至少包括上述设备。

本发明的其中一个实施例至少提供了以下优点之一:

1.对于软件行为的新视点

-检视设计层面上软件模块之间的调用关系;以及

-检视分到软件的各个模块的CPU和存储资源的使用情况

2.浏览调用栈的新方法(按照软件模块的类别浏览调用栈)

3.定位调用栈的一部分的新方法(按照软件模块进行过滤)

4.使得软件架构师、软件开发人员和性能分析师能够协作描述特 定软件的架构。

附图说明

图1示出了利用一个现有软件调用栈可视化工具获得的软件调用 栈可视化的一部分的屏幕截图。

图2是示出一个现有软件的软件架构的示例性框图。

图3示出了使用VPA可视化窗口提供的查询界面的屏幕截 图。

图4是示出了根据本发明的一个实施例的用于增强软件调用栈的 可视化的方法的流程图。

图5是示出了作为例子的一个软件的软件架构的示意性模块结构 图。

图6是示出了根据本发明的另一个实施例的优选的用于增强软件 调用栈的可视化的方法的流程图。

图7是示出了根据本发明的另一个实施例的优选的用于响应于用 户输入进行增强软件调用栈的可视化的方法的流程图。

图8是示出了根据本发明的一个实施例的用于增强软件调用栈的 可视化的设备的示例性框图。

图9示出了使用根据本发明的软件调用栈可视化窗口提供的查询 界面的屏幕截图。

图10示出了使用根据本发明的增强的软件调用栈可视化而获得 的各个软件模块对系统资源的使用情况的直方图。

图11示出了使用根据本发明的增强的软件调用栈可视化而获得 的各个软件模块之间的调用关系的示意图。

图12示出了根据本发明的一个实施例的使用描述文件的属性生 成的示例性标签。

具体实施方式

现在将以具体的、示例性实施例描述本发明。应该理解,本发明 不限于所披露的示例性实施例。还应该理解,目前所披露的增强软件 调用栈的可视化的方法、设备和系统的每一个特征并非都是实现所附 权利要求任一具体权项要求保护的发明必不可少的。描述设备的多个 元件和特征是为了使本发明完全能够得以实施。还应该理解的是,在 本说明书中,在表示或者描述处理或方法之处,方法的步骤可以按照 任何顺序执行或者同时执行,除非从上下文中显然可以看出一个步骤 依赖于先前执行的另一步骤。

本发明提供了用于增强软件调用栈的可视化的方法、设备和系统。 具体而言,根据本发明的一个实施例的技术方案获得用于描述所述软 件的软件架构的软件架构信息;解析所述软件架构信息以生成一组模 块对象,其中所述模块对象与所述软件的软件模块相对应;获得所述 软件调用栈的调用对象,其中所述调用对象对应于所述软件的运行中 执行的方法或函数;将所述模块对象的调用接口与所述调用对象进行 比较;以及根据比较结果,将模块对象的对应信息关联到所述软件调 用栈的调用对象。

在一个可替换实施例中,本发明也可以首先如现有技术中那样生 成软件调用栈的可视化。然后根据用于请求填充的用户输入再如上述 那样将软件架构信息关联到软件调用栈的可视化。

在一个实施例中,本发明提供了一种对于软件架构进行格式化描 述的格式。在另一个实施例中,软件调用栈的调用对象是通过解析软 件调用栈的数据文件获得的。在另一个实施例中,软件调用栈的调用 对象是从软件调用栈的可视化中获得的。在另一个实施例中,所述填 充是通过把当前匹配的模块对象的属性写入到内存中的另一地址处并 建立从匹配的调用对象指向该另一地址的链接、或将属性写入与调用 对象相邻的地址,例如将属性写入与对应的调用对象的存储地址相邻 的偶地址或奇地址、将属性作为对应的调用对象的参数之一、或者任 何可以将模块对象的属性与对应的调用对象关联起来的方式来实现 的。在再一个实施例中,模块对象的属性包括模块名称、模块的调用 接口、该模块的前驱模块(即,调用该模块的另一模块)。在再一个 实施例中,描述文件也具有属性,所述属性包括所述描述文件的版本、 作者以及所描述的软件的版本、名称等。本发明通过提供上述属性可 以建造描述文件库以存储和共享对不同软件架构的描述文件。

图4是示出了根据本发明的一个实施例的用于增强软件调用栈的 可视化的方法的流程图。

根据本发明的处理过程开始于步骤401。然后过程前进到步骤 403。

在步骤403,获得用于描述一个软件的软件架构的软件架构信息。 然后过程前进到步骤405。

如上所述,软件架构在软件设计阶段就已经确定了,相关技术人 员可以从软件设计中获得软件架构信息。但是,这些与本发明并不密 切相关。在本发明的一个实施例中,所述软件架构信息采用使用预定 格式结构化描述软件架构的描述文件的形式。

在步骤405,解析所述软件架构信息以生成所述软件的一组模块 对象。模块对象与软件模块相对应,通常为一一对应。然后过程前进 到步骤407。

以下示出了作为例子的一个模块对象。在这个示例性实现方式中, 模块对象为通过解析软件架构信息而生成的存储在内存中的多组数 据。在这种实现方式中,一个模块对象为一组数据,包括模块名称、 该模块的前驱模块、以及该模块的调用接口。

0x0001     WWW Security

0x0003     Dogear Access

0x0005     I:com/ibm/ws/security/web/FormLoginExte

       nsionProcessor.handleRequest(ServletRequest,

       ServletResponse)void

在另一种实现方式中,软件架构信息被解析为多个软件程序中的 类对象,每个类对象指向存储一组信息的首地址,例如,指向0x0001。 当然,本领域技术人员还可以设想出其它的实现方式,只有能够找到 各个软件模块的信息就可以,并且这些实现方式都在本发明的保护范 围之内。

在步骤407,获得软件调用栈的调用对象。然后过程前进到步骤 409。

以下示出了作为例子的软件调用栈的一个调用对象。如前所述, 调用栈中的一个调用对象指的是一个软件在其运行中执行的一个方法 或函数。

void  FormLoginExtensionProcessor.handleRequest (ServletRequest,ServletResponse)

该方法是web应用容器(web container)中安全控制模块的一个 接口调用方法。该调用接口具有两个参数,即,ServletRequest和 ServletResponse。程序调用该调用接口后,将进入到安全控制模块中, 具体执行安全控制模块的功能,并将执行结果写入到参数 ServletResponse中。

在步骤409,将所述模块对象的调用接口与所述调用对象进行比 较。然后过程前进到步骤411。

在步骤411,根据比较结果,将模块对象的对应信息关联到软件 调用栈的调用对象。然后过程前进到步骤413。

在步骤413,过程结束。

本发明提供了一种用于结构化地描述软件架构的格式,本发明提 供该格式是基于如下假设:软件的架构可以被图示为一组模块。根据 本发明的用于描述软件架构的格式被定义为通用且平台无关的,这意 味着该格式可以应用于不同类型的软件,即使该软件是使用不同技术 以架构方式构造的。按照该格式,对软件架构的描述可以由不同人员 ——包括软件架构师、开发人员、和性能分析师——来定义和重用。

根据本发明的格式被设计成包括软件的各个模块之间的关系,用 于描述当各个模块一起协作时这些模块之间的调用关系。根据本发明 的一个优选实施例,该格式仅描述一个模块被其它模块调用的关系, 也就是说,仅描述直接调用该模块的前驱模块。这种格式与软件代码 的执行顺序一致,便于用户实现。在另一实施例中,该格式能够描述 一个模块对其它模块调用的关系,也就是说,仅描述该模块直接调用 的后继模块。在再一个实施例中,该格式也可以包括冗余调用关系信 息。也就是说,除了描述一个模块(作为被调用者)被其它模块调用 的关系之外,该格式还描述该模块(作为调用者)对其它模块调用的 关系。

此外,根据本发明的格式还被设计成包括各个模块的特征。每个 模块都具有某些特征,诸如模块名称、供调用的调用接口等等。对于 一个模块,该格式通过模块名称和通过其可以调用模块的功能的调用 接口来描述模块的特征。

在本文中,将模块之间的调用关系、模块的特征等称为模块的属 性。根据本发明的格式使用模块的各个属性来定义模块。

对于可以表示为一组模块的软件架构,根据本发明的一个实施例 的用于结构化描述软件架构的格式被表示如下所示:

Arch→ArchModules→ArchModule→Entries→Entry

该格式首先定义软件架构,然后定义包括在架构中的一个或多个 模块,再然后定义一个或多个模块中的每一个模块,再然后定义每一 个模块包括的一个或多个调用接口,最后定义一个或多个调用接口中 的每一个调用接口。

以下示出了使用XML语言编写的描述根据本发明的格式的文件。 该文件如下定义:

       <?xml version=″1.0″encoding=″UTF-8″?>

       <xs:schema                       xmlns:xs=″http://www.w3.org/2001/XMLSchema″

   elementFormDefault=″qualified″>

         <xs:element name=″Arch″>

           <xs:complexType>

             <xs:sequence>

               <xs:element maxOccurs=″1″minOccurs=″0″   ref=″ModuleList″

use=″required″/>

             </xs:sequence>

           <xs:attribute name=″version″type=″xs:string″use=″required″/>

             <xs:attribute name=″author″type=″xs:string″use=″required″/>

           <xs:attribute name=″software″type=″xs:string″use=″required″/>

             <xs:attribute          name=″software-version″          type=″xs:string″

use=″required″/>

           </xs:complexType>

         </xs:element>

         <xs:element name=″ModuleList″>

           <xs:complexType>

             <xs:sequence>

               <xs:element         maxOccurs=″unbounded″     minOccurs=″1″

ref=″Module″/>

            </xs:sequence>

          </xs:complexType>

        </xs:element>

        <xs:element name=″Module″>

          <xs:complexType>

            <xs:sequence>

              <xs:element minOccurs=″1″ref=″Entries″/>

             </xs:sequence>

            </xs:complexType>

           <xs:attribute name=″name″type=″xs:string″use=″required″/>

            <xs:attribute name=″prev″type=″xs:string″use=″requried″/>

          </xs:element>

          <xs:element name=″Entries″>

            <xs:complexType>

              <xs:sequence>

                <xs:element maxOccurs=″unbounded″minOccurs=″1″ref=″Entry″/>

              </xs:sequence>

            </xs:complexType>

          </xs:element>

  <xs:element name=″Entry″>

    <xs:complexType>

      <xs:attribute name=″name″type=″xs:string″use=″required″/>

    </xs:complexType>

  </xs:element>

</xs:schema>

在上述文件中,第1行是XML的声明语句开头,在之前不能有 任何形式的字符,其中Version表示XML的版本号;encoding表示 文档的编码方式,默认是“UTF-8”。

第2行声明“http://www.w3.org/2001/XMLSchema”是一个XML 文件格式的描述。

前两行是XML文件所需的声明性语句。

第3-13行定义了元素“Arch”,其最少出现1次,引用Modulelist, 具有以下4个属性:版本、作者、软件、和软件版本,这些属性都用 字符串表示。

第14-20行定义了元素“Modulelist”,其最多出现未限定次, 最少出现1次,引用Module。

第21-29行定义了元素“Module”,其最多出现未限定次,最 少出现0次,引用Entries,具有以下2个属性:名称、和前一模块, 这些属性都用字符串表示。

第30-36行定义了元素“Entries”,其最多出现未限定次,最 少出现1次,引用Entry。

第37-41行定义了元素“Entry”,其具有1个属性:名称,该 属性都用字符串表示。

图5是示出了作为例子的一个软件的软件架构的示意性模块结构 图。以下以一个软件,在此称之为“WWW”,的软件架构为例,示 出了使用根据本发明的格式对该软件架构进行结构化描述的描述文 件。WWW软件的软件架构由一系列模块组成,如图5所示。使用本 发明的格式用XML编写的其软件架构的描述文件如下所示:

     <?xml version=″1.0″encoding=″UTF-8″?>

     <Arch     version=″0.1″    author=″linhc″  software=″Lotus  Connection″

software-version=″7.1″>

     <ModuleList>

     <Module name=″Lotus Connection″prev=″WWW″>

     <Entries>

      <Entry

name=″I:com/ibm/lconn/core/web/auth/LCUserDataConstraintFilter.doFilter(Servlet

Request,ServletResponse,FilterChain)void″/>

      <Entry

name=″I:com/ibm/lconn/core/web/auth/LCBasicAuthFilter.doFilter(ServletRequest,

ServletResponse,FilterChain)void″/>

       </Entries>

       </Module>

     <Module name=″WWW Servlet″prev=″Lotus Connection″>

     <Entries>

       <Entry

name=″I:com/ibm/ws/webcontainer/servlet/ServletWrapper.service(ServletRequest,

ServletResponse)void″/>

       </Entries>

       </Module>

     <Module name=″Dogear Access″prev=″WWW″>

     <Entries>

       <Entry

name=″I:com/ibm/dogear/filter/auth/DogearAuthFilter.doFilter(ServletRequest,

ServletResponse,FilterChain)void″/>

       <Entry

name=″I:com/ibm/dogear/filter/Utf8CharEncodingFilter.doFilter(ServletRequest,

ServletResponse,FilterChain)void″/>

       <Entry

name=″I:com/ibm/dogear/filter/auth/DogearPrivateAccessFilter.doFilter(ServletReque

st,ServletResponse,FilterChain)void″/>

       <Entry

name=″I:com/ibm/dogear/filter/stats/RequestStatisticsFilter.doFilter(ServletRequest,

ServletResponse,FilterChain)void″/>

       </Entries>

       </Module>

     <Module name=″WWW Security″prev=″Dogear Access″>

     <Entries>

       <Entry

name=″I:com/ibm/ws/security/web/FormLoginExtensionProcessor.handleRequest(Ser

vletRequest,ServletResponse)void″/>

       </Entries>

       </Module>

       </ModuleList>

       </Arch>

在上述文件中,第1行是XML的声明语句开头。

第2行定义了本描述文件的名称为“Arch”,作者是“linhc”, 本描述文件描述的软件的名称是“Lotus Connection”,软件版本是 “7.1”。

第3行定义了模块列表。

第4行定义了模块列表的第一个模块的名称是“WWW Thread Pool”。

第5行定义了模块的调用接口。

第6行定义了模块的调用接口之一的名称是 “I:com/ibm/ws/wswebcontainer/WebContainer.handleRequest(IReq uest,IResponse)void”。

第9行定义了模块列表的第二个模块的名称是“WWW container”,其前驱模块的名称是“WWW Thread Pool”。

在上述文件的后续部分中,以类似方式对各个模块的属性进行了 描述。

在本发明的另一个实施例中,使用上述格式产生的软件架构的描 述文件自身也具有一些属性,诸如描述文件的版本、描述文件的作者 以及描述文件所描述软件的版本、描述文件所描述软件的名称等。利 用这些属性,还能够构造不同软件架构的描述文件的库。在该描述文 件库中,可以使用某些社会性计算(Social Computing)技术来实现 描述文件的共享和协作。

下面结合附图给出本发明的优选实施例,但是这里给出的具体描 述并非意欲将本发明限于这种特殊的方式,而意欲包括所有的修改、 变型和等同等等。

图6是示出了根据本发明的另一个实施例的优选的用于增强软件 调用栈的可视化的方法的流程图。

根据本发明的处理过程开始于步骤601。然后过程前进到步骤 603。

在步骤603,解析软件架构的描述文件以生成一组模块对象。模 块对象与软件模块相对应。这里,描述文件是使用根据本发明的一个 优选实施例的格式对软件架构进行结构化描述的文件。所述描述文件 可以是用户自己预先生成的,或者从其它用户那里获得的,但是这与 本发明并不密切相关。然后过程前进到步骤605。

在步骤605,将解析软件调用栈的数据文件而获得的一个调用对 象与各个模块对象的调用接口进行比较。然后过程前进到步骤407。

如前所述,软件调用栈的数据文件是从现有的Profiling工具输出 的明文文本文件。

在步骤607,确定二者是否匹配。如果匹配,过程前进到步骤609。 如果不匹配,过程前进到步骤611。

这里,“匹配”指的是字符串之间的严格匹配。当然,还可以使 用其它匹配方法,只有能够确定调用对象和模块对象的调用接口指示 同一方法或函数即可。

在步骤609,将匹配的模块对象的属性填充到该调用对象,并将 匹配的模块对象标识为系统中的当前匹配的模块对象。然后过程前进 到步骤613。

在本文中,术语“填充”是指将匹配模块对象的属性与进行比较 的对应调用对象相关联,使得由该对应调用对象可以获得其所属的模 块对象的属性。在一个实施例中,所述填充是通过把匹配的模块对象 的属性写入到内存中的另一地址处并建立从对应的调用对象指向该另 一地址的链接来实现的。在另一实施例中,使匹配模块对象的属性成 为对应的调用对象的参数之一。例如,模块对象的属性为A,而对应 的调用对象为B(C,D),那么所述填充是实现了B(C,D)→B(C,D,A)。 在再一实施例中,所述填充是将匹配模块对象的属性写入与对应的调 用对象相邻的地址,例如模块对象的属性和对应的调用对象的存储地 址分别为相邻的偶地址和奇地址等。当然也可以使用本领域技术人员 设想到的其它方法,只要能够使得由对应的方法/函数可以获得其所属 的模块对象的属性即可。

在步骤611,将当前匹配的模块对象的属性填充到进行比较的调 用对象。由于该进行比较的调用对象与各个模块对象的调用接口都不 匹配,这被认为是该调用对象仍在与系统中被标识为当前匹配的模块 对象相对应的模块中运行,因此,当前模块对象的属性没有发生改变。 因此,将系统中存储的当前匹配的模块对象的属性填充到该调用对象 中。然后过程前进到步骤613。

在步骤613,确定是否还从软件调用栈的数据文件中解析出另一 个调用对象。如果还有其它的调用对象,则返回到步骤605。如果没 有,过程前进到步骤615。

在步骤615,过程结束。

图7是示出了根据本发明的另一个实施例的优选的用于响应于用 户输入进行增强软件调用栈的可视化的方法的流程图。

根据本发明的处理过程开始于步骤701。然后过程前进到步骤 703。

在步骤703,使用现有技术中的软件调用栈的可视化工具,由软 件调用栈的数据文件生成软件调用栈的可视化。然后过程前进到步骤 705。

在步骤705,确定是否收到对于将软件架构信息关联到软件调用 栈的可视化中的用户请求。如果接收到,则过程前进到步骤707。如 果没有接收到,则过程前进到步骤719。

在步骤707,解析软件架构的描述文件以生成一组模块对象。模 块对象与软件模块相对应。然后过程前进到步骤709。

在步骤709,将从软件调用栈的可视化中获得的一个调用对象与 各个模块对象的调用接口进行比较。然后过程前进到步骤711。

在步骤711,确定二者是否匹配。如果匹配,过程前进到步骤713。 如果不匹配,过程前进到步骤715。

在步骤713,将匹配的模块对象的属性填充到进行比较的调用对 象,并将匹配的模块对象标识为当前匹配的模块对象。然后过程前进 到步骤717。

在步骤715,将当前匹配的模块对象的属性填充到进行比较的调 用对象。然后过程前进到步骤717。

在步骤717,确定是否还从软件调用栈的可视化中获得另一调用 对象。如果还有其它的调用对象,则返回到步骤709。如果没有,过 程前进到步骤719。

在步骤719,过程结束。

当然,根据本发明的方法不必按照所示出的执行顺序执行。例如, 在图7中,步骤707也可以在步骤705或步骤703之前执行。

图8是示出了根据本发明的一个实施例的用于增强软件调用栈的 可视化的设备的示例性框图。该设备包括软件调用栈可视化引擎801 和解析器803。

软件调用栈可视化引擎801接收Profiling工具输出的软件调用栈 的数据文件作为输入。软件调用栈可视化引擎801具有传统的软件调 用栈可视化工具的功能,即,解析接收到的软件调用栈的数据文件并 还原软件调用栈以生成软件调用栈可视化。

软件调用栈可视化引擎801还接收来自解析器803的输出作为另 一输入。

解析器803接收软件架构信息。在本实施例中,该软件架构信息 具有软件架构的描述文件的形式。所述描述文件是使用根据本发明的 上述格式生成的。所述描述文件可以使用XML编写,但是本发明不 限于此。所述描述文件也可以使用任何其它可以被解析的语言来编写。 解析器803将接收到的描述文件解析成一组模块对象。

根据本发明的软件调用栈可视化引擎801还包括比较模块805和 关联模块807。比较模块805将软件调用栈可视化引擎801从软件调 用栈的数据文件解析出的每个调用对象与从解析器803接收的各个模 块对象的调用接口进行比较,并将比较结果,即匹配还是不匹配告知 关联模块807。

关联模块807根据从比较模块805接收的比较结果,将相应的软 件架构信息关联到软件调用栈的可视化。如果接收到的比较结果指示 匹配,则关联模块807将匹配的模块对象的属性填充到进行比较的调 用对象中,并将匹配的模块对象标识为系统中的当前匹配的模块对象。 如果接收到的比较结果指示不匹配,则关联模块807将系统中的当前 匹配的模块对象的属性填充到进行比较的调用对象中。

在另一个实施例中,除了软件调用栈可视化引擎801还可以接收 用于请求填充的用户输入和比较单元805从软件调用栈的可视化中获 得调用对象之外,该设备中包括的各单元和各单元的功能都与上述实 施例的相同。如果根据该实施例的软件调用栈可视化引擎801没有接 收到用户输入,则使用传统的软件调用栈可视化功能由软件调用栈的 数据文件产生软件调用栈的可视化,而不考虑来自解析器803的任何 输入。如果根据该实施例的软件调用栈可视化引擎801接收到用户输 入,则按照针对上述实施例所描述的方式,将来自解析器803的一组 模块对象的属性填充到对应的调用对象。

在再一个实施例中,除了解析器803也接收用户输入之外,该设 备中包括的各单元和各单元的功能都与上述另一个实施例的相同。如 果解析器803没有接收到用户输入,则不解析软件架构的描述文件, 从而不给软件调用栈可视化引擎801提供任何输入。如果接收到用户 输入,则将软件架构的描述文件解析成一组模块对象,并将其输出给 软件调用栈可视化引擎801。这样能够减少对于系统资源的使用。

以上例子仅仅示出了将软件架构信息结合到软件调用栈的可视化 中的优选方式,本领域技术人员可以据此设想出其它的实现方式,但 是都在本发明的保护范围之内。

图9示出了使用根据本发明的软件调用栈可视化窗口提供的查询 界面的屏幕截图。图9示出的可视化还是基于图5所示的软件架构。 从图9所示的屏幕截图上可以看出,能够按照软件模块来浏览、过滤、 或定位软件调用栈。此外,还可以如图9所示,以不同的颜色来突出 显示不同软件模块的调用栈。用不同颜色突出显示仅仅是示例性的, 本领域技术人员可以据此设想出其它的可视地区别不同模块的调用栈 的方式,但是都在本发明的保护范围之内。

图10示出了使用根据本发明的增强的软件调用栈可视化而获得 的各个软件模块对系统资源的使用情况的直方图。本发明可以在解析 和还原每个调用的方法/函数的同时,针对每个调用的方法/函数,确 定其属于哪个模块,并针对该模块累加其中的每个方法/函数使用的基 本CPU周期或字节(这是用于执行调用实体自身的消耗),从而形成 如图10所示的直方图。

图11示出了使用根据本发明的增强的软件调用栈可视化而获得 的各个软件模块之间的调用关系的示意图。在现有技术中,仅仅可以 生成各个方法/函数之间的调用关系,如图11中的虚线所示。但是不 清楚各个调用的方法/函数属于哪个软件模块以及各个软件模块之间 的调用关系。

由于根据本发明的软件调用栈的可视化具有了软件模块的知识, 就可以显示各个软件模块包括那些调用的方法/函数以及软件模块之 间的调用关系。在图11所示的调用图形可视化中,同一软件模块的所 有方法/函数被分组到一个矩形框——诸如1101、1103、1105所示— —中,一个矩形框代表一个软件模块。软件模块之间的调用被标识为 实线。在图11中矩形框的左上角上的文本是模块的名称。矩形框中的 各个小方框代表其调用接口,小方框中的文本是调用接口的名称。

此外,通过使用根据本发明的格式来生成对于软件架构进行结构 化描述的描述文件,可以建造描述文件库以存储和共享对不同软件架 构的描述。该描述文件库使得软件生命周期或软件开发团体中的不同 人员贡献其对于软件架构的描述。由于不同人员具有不同知识,对软 件理解的不同深度,共享的描述文件库使得能够协作并因而提供对软 件架构更深刻的描述。描述文件库能够维护和管理不同人员所贡献的 描述文件,按照其属性:描述文件的作者、描述文件的版本、描述文 件描述的软件的名称、描述文件描述的软件的版本对描述文件进行分 类并将其保存到库中。

此外,可以将描述文件的某些属性用作为标签。随着描述文件库 的增长,能够使用现有技术工具构造用于描述文件的标签以便图示出 描述文件的热点和协作趋势。这种方式可以帮助和引导对于描述文件 的贡献。图12示出了根据本发明的一个实施例的使用描述文件的属性 生成的示例性标签。

应该理解,以上出于说明清楚的目的参照不同功能部件和处理器 对本发明的实施例进行了描述。显然,在不偏离本发明的条件下,可 在不同功能部件或处理器之间使用任何合适的功能分布。例如,所示 出的由分立单元或处理器执行的功能可由同一单元或处理器执行。因 此,仅将针对具体功能部件的描述视为是对用于提供所述功能的合适 装置的描述,而不表示严格的逻辑或物理结构或组织。

此外,在权利要求中特征的顺序并不表示特征起作用的任何特定 顺序,特别是在方法权利要求中各步骤的顺序并不表示一定按照该顺 序执行这些步骤。而是,这些步骤可采用任何合适的顺序执行。

本发明通过使用本发明的实施例的详细说明被描述,这些实施例 作为例子被提供,并且不打算限制本发明的范围。所描述的实施例包 括不同的特性,不是所有的这些特性在本发明的所有的实施例中都是 需要的。本发明的某些实施例仅仅利用某些特性或特性的可能的组合。 所描述的本发明的实施例的变例和包括在描述的实施例中指出的特性 的不同的组合的本发明的实施例是本领域技术人员将会设想到的。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号