调用路径查找器的制作方法

文档序号:17824928发布日期:2019-06-05 22:34阅读:283来源:国知局
调用路径查找器的制作方法

复杂的大规模软件产品或软件开发环境越来越可能要求进行开发或维护的程序员阅读不熟悉的代码。在这种情况下,追踪函数之间的控制流程可能是有挑战性且耗费时间的。



技术实现要素:

在本文所讨论的解决方案的某些实施例中涉及一种生成用于代码库的函数调用图表的方法,该方法包括:通过函数签名来识别代码库中的函数;将所识别的特定函数表示为函数调用图表中的第一节点;对于特定函数,基于特定函数的函数签名,识别调用目标(call-to)函数、调用源(call-from)函数、继承父函数以及继承子函数、以及与该特定函数相关联的基本类;基于所识别的调用目标函数和调用源函数向第一节点添加第一子节点;对于特定函数中的基本类方法的接口调用,基于基本类方法的覆写的实现向第一节点添加第二子节点;对于至少一个所添加的第二子节点,确定包括所添加的特定覆写的实现的第一源代码文件和包括特定函数的第二源代码文件是否共享至少一个公共二进制文件;以及响应于确定第一源代码文件和第二源代码文件不共享公共二进制文件,从第一节点删除所添加的第二子节点。

在某些实施例中,该方法包括识别第一节点与所添加的第二子节点之间的图表边以便后续排名。在某些实施例中,该方法包括减小函数调用图表的存储器占用。

在某些实施例中,减小存储器占用包括将散列函数应用于每个函数签名并将散列函数的结果存储为函数签名的表示。

在某些实施例中,确定包括所添加的特定覆写的实现的第一源代码文件和包括特定函数的第二源代码文件是否共享至少一个公共二进制文件包括:识别与该特定函数相关联的依赖性;对用于所识别的依赖性的测试二进制文件生成第一Bloom滤波器,生成Bloom滤波器包括基于所识别的依赖性的数目来改变第一生成的Bloom滤波器的尺寸;以及将第一生成的Bloom滤波器应用于特定二进制文件以便确定该特定二进制文件是否包括所述特定函数。

在某些实施例中,确定包括所添加的特定覆写的实现的第一源代码文件和包括特定函数的第二源代码文件是否共享至少一个公共二进制文件还包括:将第二生成的Bloom滤波器应用于所述特定二进制文件以便确定该特定二进制文件是否包括所添加的特定实现;以及响应于所述特定二进制文件通过了第一生成的Bloom滤波器和第二生成的Bloom滤波器两者而确定第一源代码文件和第二源代码文件将所述特定二进制文件作为公共二进制文件来共享。

在某些实施例中,所述方法还包括基于使用第二源代码文件编译或生成的代码库的二进制文件来生成Bloom滤波器;以及将生成的Bloom滤波器添加到第一节点。

在某些实施例中,确定包括所添加的特定覆写的实现的第一源代码文件和包括特定函数的第二源代码文件是否共享至少一个公共二进制文件包括:将第一节点的Bloom滤波器应用于第一源代码文件。

在某些实施例中,通过使用第二源代码文件编译或生成的代码库的二进制文件的数量来确定Bloom滤波器的尺寸,使得频繁使用的源代码文件与较大尺寸的bloom滤波器相关联。

在本文所讨论的解决方案的某些实施例中涉及一种确定代码库中的两个函数之间的可能调用路径的方法,该方法包括:接收源函数和目标函数作为输入;在函数调用图表中识别与源函数相关联的起始节点和与目标函数相关联的末端节点;搜索起始节点与末端节点之间的函数调用图表中的可能路径,所述搜索包括对沿着搜索路径的每个节点针对由起始节点和末端节点共享的公共依赖性列表评估节点;对具有包括在公共依赖性列表中的依赖性的所评估的节点,将该评估的节点包括在可能路径中并搜索函数调用图表中所评估的节点的任何子节点与起始节点或末端节点之间的所有可能路径;对不具有包括在公共依赖性列表中的依赖性的所评估的节点,将所评估的节点从任何可能路径中排除;将起始节点与末端节点之间的所有可能路径分类以作为所述搜索和评估步骤的结果;以及返回所分类的可能路径中的至少一个作为可能调用路径。

在某些实施例中,将所有可能路径分类包括:将所述所有可能路径从最短到最长排序;从所排序的路径之中识别完全在单个代码库内的那些路径;对所排序的路径应用权值因数,使得所述所有可能路径基于路径长度和权值因数而从最可能到最不可能来排序,该权值因数包括将完全在单个代码库内的那些路径指示为更有可能;以及在所述应用权值因数之后返回至少最有可能的路径作为可能调用路径。

在某些实施例中,应用权值因数包括基于从先前的函数执行而生成的历史追踪数据来生成权值因数,使得由历史追踪数据所指示的函数调用路径与将那些路径指示为更有可能的权值因数相关联。

在某些实施例中,应用权值因数包括应用基于类的权值因数,使得包括共同使用的对象类的调用路径将被指示为更有可能。

在某些实施例中,搜索可能路径包括搜索所有可能路径。在某些实施例中,搜索可能路径包括执行从起始节点和末端节点两者开始的双向搜索。

在本文所讨论的解决方案的某些实施例中涉及一种表示用于代码库的函数调用图表的数据结构,该图表包括:多个图表节点,每个图表节点表示代码库内的可调用函数,来自所述多个图表节点之中的第一图表节点包括唯一识别代码库内的可调用函数的函数签名;第一图表节点绝对路径识别文件系统内的包括可调用函数的数据文件的绝对位置;识别第一图表节点的子节点的信息,识别子节点的所述信息包括识别与子节点相关联的子函数的子函数签名的表示和与子节点相关联的子节点种类,其中,与子节点相关联的所述子函数签名表示连接第一图表节点和子节点的图表边;以及其中,所述子节点种类包括直接调用种类和实例调用种类中的一个,实例调用种类指示所述子节点表示在可调用函数中调用的基本类方法的覆写的实现。

在某些实施例中,识别子节点的信息还包括指示与子节点相关联的子函数是否是远程过程调用函数的标志。

在某些实施例中,函数签名以散列形式包括在第一图表节点中,该散列形式在介质中占用较少数据存储空间。

在某些实施例中,子节点包括:子函数签名,其唯一识别代码库内的子函数;子节点绝对路径,其识别文件系统内的包括子函数的数据文件的绝对位置;识别图表节点的连接节点的信息,识别连接节点的所述信息包括调用源函数签名的表示,该调用源函数签名识别调用由子节点所表示的子函数的调用源函数,其中,与连接节点相关联的调用源函数签名表示连接子节点和连接节点的图表边。

在某些实施例中,第一图表节点是子节点的连接节点。

本文所述的解决方案、技术以及系统的实施例可包括一种系统,该系统包括:处理器和在其上具有实现的指令的处理器可读存储器,该指令被配置成促使所述处理器执行上述步骤或操作中的某些或全部,和/或创建上述数据结构中的一个或多个的表示。

本文所述的解决方案、技术以及系统的实施例可包括在其上具有实现的指令的瞬时或非瞬时计算机可读介质,该指令促使计算机执行上述步骤中的某些或全部,和/或创建上述数据结构中的一个或多个的表示。

根据下文给出的详细描述,所讨论的系统和方法的进一步适用范围将变得显而易见。然而,应理解的是本详细描述和具体示例虽然指示了系统和方法的实施例,但仅仅是以举例说明的方式给出的,因为根据本详细描述,本文公开的概念的精神和范围内的各种改变和修改对于本领域的技术人员而言将变得显而易见。

附图说明

根据下面在本文中给出的详细描述和仅仅以举例说明的方式给出且因此并非限制性的附图,将更全面地理解所讨论的系统和方法。

图1a示出了表示如本文所述的函数调用图表生成操作的实施例的框图;

图1b示出了表示如本文所述的共享二进制识别操作的实施例的框图;

图1c示出了表示如本文所述的函数调用图表的一部分的实施例的框图;

图2示出了表示如本文所述的图表节点的实施例的框图;

图3示出了表示如本文所述的图表搜索和调用路径生成操作的实施例的框图;

图4示出了表示如本文所述的调用路径分类或排序操作的实施例的框图;以及

图5示出了表示被布置成执行本文所述的图表生成和调用路径识别操作中的某些或全部的计算设备的实施例的框图。

在详细描述的过程中将详细地描述附图。

具体实现

以下详细描述参考附图。不同图中的相同附图标记识别相同或类似元件。并且,以下详细描述并不限制所讨论的概念。替代地,由所附权利要求及其等价物来定义本文所讨论的概念的范围。

复杂的大规模软件产品或软件开发环境可能要求进行开发和/或维护的程序员阅读不熟悉的代码。在这种情况下,追踪功能之间的控制流程可能是有挑战性且耗费时间的。能够找到代码库中的任何两个函数之间的一个或多个可能路径的调用路径查找器可简化理解代码的过程,并允许更快捷且更容易的软件开发和维护。

可通过创建且然后查询图表或树形数据结构来实现用于特定代码库的调用路径查找器的实施例。在某些实施例中,这种图表可包括作为图表节点的代码库的每个函数,其中连接节点表示从或者可以从该函数调用的所有其它可能函数和/或函数实例。此外,连接节点还可表示调用源函数,调用源函数是调用或能够调用由特定节点所表示的函数的函数和/或函数实例。

在单片代码库中,例如,可以将这种图表构建为一个或多个数据库表格中的分类密钥映射表。每个图表节点可包括识别由节点所表示的特定函数的唯一签名,诸如函数签名。为了考虑对代码库的更新和改变,可以每隔一定间隔(例如每夜)重构和/或更新这种图表。

在涉及到面向对象的技术的实施例中,输入和输出函数调用的静态分析可不捕捉由诸如函数重载或覆写的事件引起的细微之处或变化。在某些实施例中,函数可进行对基本类的方法或函数的接口调用。在某些情况下,这可以是对基本类的实例的调用。在其它情况下,这可以是对基本类方法的重载实例的调用。在意图考虑重载函数的某些实施例中,可将到给定节点的连接的数目扩展成包括作为子节点或连接节点的基本类方法的每个负载实现。

在图1a中示出了用于单片代码库的图表构造过程的实施例。在所示的本实施例中,代码库中的每个函数可具有函数签名。这可以是唯一识别代码库内的函数的数字、字符串或其它信息片。在某些实施例中,可为作为图表构造过程的一部分的函数生成这种函数签名。在某些实施例中,用于代码库或开发环境的源管理策略或实践可要求每个函数和/或每个类与可用作函数签名的一部分或全部的唯一标识符相关联。

函数签名的示例可包括诸如Java的面向对象编程程序设计语言的类签名。函数签名的另一示例可包括根据用于特定类的源代码文件的目录路径、类名以及类内的函数名所创建的名。其它实施例可利用其它技术来创建将用作函数签名的唯一标识符。

可生成或读取函数签名1001,并且可将签名所识别的函数添加到图表以作为节点1070。在某些实施例中,将函数添加到图表以作为节点1070可包括解析或者另外遍历函数以识别调用目标或调用源函数1200。

调用目标函数是从或者能够从添加函数内调用的那些函数。这种调用目标函数可使其函数签名被包括为表示添加函数的节点的子节点或连接节点。在某些实施例中,还可基于函数签名来识别调用源函数,调用源函数为调用或者可调用添加函数的那些函数。

在某些实施例中,可将代码库的所有函数签名存储在一个或多个数据库表格中。在某些实施例中,可将该签名存储在分类字符串表中以便于数据查找。在某些实施例中,函数签名可指示或充当用以访问调用目标函数、调用源函数以及用于特定函数的任何相关继承信息的密钥。在这种实施例中,扫描这种数据库表格可提供用于特定函数的调用目标数据和调用源数据。

在其它实施例中,可在图表构造期间递归地生成调用源信息。在这种实施例中,识别特定节点中的调用源函数可使得该特定节点能够被识别为用于表示调用源函数的节点的调用目标节点。在某些这种实施例中,可在一个或多个数据库表格中动态地创建主调用目标表格或数据结构或主调用源表格或数据结构,以作为图表生成过程的一部分。在某些实施例中,所有图表节点可包括调用目标值以促进宽度优先搜索。在某些实施例中,所有图表节点可包括调用源值以促进宽度优先搜索。

在某些面向对象实施例中,添加的函数可包括对基本类方法的接口调用1010。对基本类的方法或函数的这种接口调用1010在某些情况下可以是对基本类的实例的调用。在其它情况下,这种接口调用1010可以是对基本类方法的重载实例的调用。由于在静态分析背景下不能容易地确定接口调用1010是否是针对重载实例,所以图表构造方法的某些实施例可将基本类方法的每个覆写实现添加为表示函数的节点的调用目标子节点或连接节点1020。

在某些实施例中,这种继承扩展可促使图表中的节点和连接的数目变得不可管理地大。在某些实施例中,这种继承扩展可添加意味着不可能或者以其他方式不太可能(例如误肯定)的图表边的子节点或连接节点。

在某些实施例中,可将函数连同任何潜在子节点1020一起添加到调用图表1090。可以对各种调用路径以这种方式构建图表1050,其中每个图表节点与诸如Bloom滤波器的滤波器相关联。可基于为函数所共用的二进制文件来创建用于给定调用源函数/调用目标函数对的Bloom滤波器1040。

在某些实施例中,可基于为代码库内的编译而编译或指示的每个二进制文件来创建Bloom滤波器。在某些实施例中,可基于诸如版本控制工具的实用工具来创建这种Bloom滤波器,该实用工具识别了哪些源代码文件和哪些源代码文件版本将被编译成应用程序或程序的特定版本。特定Bloom滤波器的长度或数据尺寸在某些实施例中可基于包括在表示所编译的应用程序或程序的特定二进制文件中的源代码文件和/或函数的数目而改变。

在某些实施例中,图表构造过程可读取代码库内的每个函数。在某些这种实施例中,一旦图表构造过程指示了所有函数已被读取1060并被添加到图表1090,则其可前进至减小所创建的图表的存储器占用1080。存储器占用减小的实施例可包括采用如上文所讨论的散列函数签名和可变长度的Bloom滤波器。

在某些实施例中,可将构造的调用图表存储在诸如闪存的易失性存储器或快速存取存储器中,以允许对图表的更快速访问和遍历。在某些这种实施例中,可根据对误肯定结果的期望容忍度来改变Bloom滤波器的长度或数据尺寸。在某些实施例中,改变Bloom滤波器的尺寸以允许有0.01%的误肯定结果,可允许有数据质量与数据尺寸之间的良好平衡。在采用基于函数的Bloom滤波器的实施例中,其文件以更多二进制文件方式存在的函数可获得较大尺寸的Bloom滤波器。

在图1b中描绘了用以找到调用路径的公共二进制文件识别过程的实施例的示例。从诸如Bloom滤波器的二进制文件滤波器1100以及图表中的起始节点1170和末端节点1180开始,可使用滤波器1110来评估与起始节点和末端节点相关联的函数签名。如果函数签名所识别的函数未被指示为包括在滤波器所表示的二进制文件中1130,则用于该Bloom滤波器的滤波过程停止,并且可发起用于后续一组二进制文件的滤波过程。

如果由函数签名识别的函数被指示为包括在Bloom滤波器中所表示的二进制文件中1120,则可使用同一滤波器来评估作为子节点或连接节点添加的基本类方法的每个覆写实现1140。通过滤波器的基本类方法的每个覆写实现被确定为包括在二进制文件中1150,并且仍作为函数调用路径中的潜在节点。未通过滤波器的基本类方法的每个覆写实现被确定为不具有与调用(调用源)函数1160共用的该二进制文件1160,并且因此不是函数调用路径中的潜在节点。

在其它实施例中,可对具有为了考虑继承扩展而添加的子或节点连接节点的每个图表节点/函数签名创建Bloom滤波器。在这种实施例中,可基于诸如版本控制工具的实用工具来创建该Bloom滤波器,该实用工具识别了哪些源代码文件和哪些源代码文件版本将被编译成应用程序或程序的特定版本。用于基于由图表节点的函数签名所识别的函数的特定一组二进制文件的Bloom滤波器可包括关于每个二进制文件中的所有函数的信息,在每个二进制文件中存在识别的函数。在这种实施例中,Bloom滤波器可允许直接评估作为子节点或连接节点添加的基本类方法的每个覆写实现1140,因为Bloom滤波器将对于包括在起始和末端节点中所表示的函数的二进制文件,是特定的。

在图1c中描绘了示例性函数调用图表或图表部分的实施例。在所示的实施例中,描绘了从更新请求函数1500的函数调用路径。在类Client中调用的更新请求函数1500可调用类Server中的更新请求处理函数1510。更新请求处理程序函数1510可调用请求确认函数1520、请求处理函数1530以及响应设置函数1540。类Action的请求处理函数1530可分别地由类Action1、Action2以及Action3中的请求处理函数1550、1560、1570覆写。用短划线来指示这些连接,因为在某些实施例中,必须在运行时间分析期间而不是通过静态分析在图表内对其进行分辨。Action2请求处理函数1560可调用对其本身进行回调的递归计算函数1580。在所示的实施例中,每个函数表示图表节点。

在图2中示出了如本文所讨论的表示函数调用图表的节点的数据结构的实施例。在所示的实施例中,图表节点2010可包括指示函数签名20200的信息,函数签名20200识别节点所表示的特定函数。图表节点2010还可包括指示源文件的绝对路径的信息,该源文件包括函数签名20190所识别的函数。这种绝对路径20190可包括关于特定文件位置的信息,该特定文件位置为一个或多个具体存储设备或装配存储的设备的特定存储位置中的数据的绝对物理位置和虚拟或逻辑文件系统中的目录中的一者或两者。

图表节点2010的实施例还可包括表示Bloom滤波器20210的信息,Bloom滤波器20210基于图表节点所识别的函数被编译成的所有二进制文件。如上文所讨论的,这种Bloom滤波器可基于故障容忍度的期望或可接收水平而改变长度。在其中误肯定(或漏判)结果不被容忍或者以其他方式不可接受的某些实施例中,可采用不同类型的滤波器。

图表节点2010的实施例还可包括子节点或连接节点列表。虽然被列为子节点,但这种节点表示了从图表节点到其它节点的连接,并且不另外指示父图表节点和子图表节点之间的特征或数据的分级结构或传递或通用性。所示的示例性图表节点2010包括潜在的任意数目的子节点20100、20130、20160。可根据各子节点20100、20130、20160的函数签名在图表节点2010中识别每个子节点20100、20130、20160。在其中每个函数具备唯一函数签名或者被其识别的实施例中,这种函数签名还允许唯一地识别每个图表节点。

在图表节点2010中表示的每个子节点20100、20130、20160还可包括关于节点种类的信息20110、20140、20170。在某些实施例中,节点种类包括直接调用种类和实例调用种类中的一个,实例调用种类指示了子节点表示在可调用函数中调用的基本类方法的覆写实现。直接函数调用对于静态分析可以是可见的或者以其他方式可用于静态分析,而不必通过bloom滤波器遍历图表。实例调用可要求运行时间分析。

在某些实施例中,在图表节点2010中表示的每个子节点20100、20130、20160还可包括指定子节点是否表示远程过程调用的标志20120、20150、20180。这种标志可使得能够识别涉及可调用或触发代码库外的函数的过程或子程序的函数。此外,被标志为远程过程调用的函数在某些实施例可不具有代码库内的调用目标函数。

一旦生成了函数调用图表的实施例,则能够搜索该图表以找到起始函数与末端函数之间的一个或多个可能函数调用路径。在图3中描绘了调用路径搜索操作的实施例。

在所示的实施例中,调用图表搜索工具可接收作为输入的识别起始图表节点3001的函数签名和识别末端图表节点3010的函数签名。在某些实施例中,函数调用搜索工具还可构造或访问示出起始和末端节点的公共依赖性的列表或数据库。这种依赖性可包括例如包含特定类、函数或源文件作为依赖性的所有二进制。在某些这种实施例中,在确定从第一函数到第二函数的调用图表路径时,其中这两个函数仅在特定可执行文件中存在,所有中间图表节点也应仅在该特定可执行文件中存在。这可通过将与来自不同可执行文件的函数有关的图表节点排除在考虑之外而加速图表搜素。

在起始节点3001或末端节点3010处开始,或者在某些实施例中从起始节点3001和末端节点3010两者双向地前进,可在所有子节点或连接节点之中发起宽度优先路径搜索。在某些实施例中,这可通过首先检查起始节点或末端节点是否包括远程过程调用(RPC)3020来实现。在某些实施例中可执行此检查,因为即使在单片数据库中,远程过程调用也可涉及除包括起始或末端节点所表示的函数的那些二进制文件之外的一组二进制文件中的函数。

在其中起始节点和末端节点中的一个是RPC 3020的实施例中,所使用的二进制文件组可包括涉及起始节点或末端节点3中的任一个的所有二进制文件3040。在其中起始节点和末端节点都不是RPC的实施例中,所使用的二进制文件组可仅包括涉及起始节点和末端节点两者的二进制文件3030。

对于每个节点,可提取其Bloom滤波器,并且可针对Bloom滤波器测试二进制文件3080,以确定公共依赖性中的至少一个是否通过用于该节点的Bloom滤波器3080。

如果表示公共依赖性的二进制文件并未通过用于该节点的Bloom滤波器,则该节点作为不是可能或潜在函数调用路径的一部分而被丢弃3070。如果该公共依赖性通过用于该节点的Bloom滤波器,则该节点然后被添加到可能调用路径的列表或轨迹中3090。在采用宽度优先搜索的实施例中,这种评估可对于图表3110的给定层级中的所有节点来进行,或者对于能够在给定时间段内或以计算资源的特定分配分析的图表的给定层级中的所有节点来进行。在这种实施例中,在使用其关联Bloom滤波器来评估图表层级中的给定节点之后,然后可同样地评估层级3100中的下一节点直至该层级中的所有节点都已被评估3110为止,或者在某些情况下直至经历了预定的时间量或者消耗了预定的计算资源量为止。

然后可根据排名方案对包括在路径列表中的节点排名3130,以确定最可能的下一节点和最不可能的下一节点。在某些实施例中,可基于诸如节点是直接函数调用还是重载/继承函数调用的因素来确定排名。在某些这种实施例中,可将直接函数调用排名为高于重载或继承函数调用。在某些实施例中,可以仅关心特定数目的排名节点。在某些这种实施例中,可仅将五个最高排名节点保持为排名节点,而其余节点被丢弃或者以其他方式进一步评估。在某些实施例中,与末端节点3010匹配的节点可以是最高排名节点。

在节点被排名3130之后,可从最高排名节点开始对每个排名节点进行扩展3120,以确定其是否具有将包括在后续宽度优先路径搜索3050中的子节点3060。这种扩展可对于所有排名节点3050来进行,或者对于能够在给定时间段内或者以特定的计算资源分配分析的所有排名节点来进行。

在某些实施例中,此搜索和评估操作持续至搜索路径在起始节点3001或末端节点3010处终结为止,或者在双向实施例中直至搜索路径相遇且不存在仍要扩展和搜索的子节点或连接节点3140为止。一旦创建了可能函数调用路径的列表,则可对路径的列表3150分类或排名,以识别被视为最可能或最大概率的一个或多个函数调用路径。该图表搜索工具然后可返回包括最可能路径的某些或所有调用路径3160。

在某些实施例中,图表搜索工具可包括图形界面或者是其一部分,该图像界面可将函数调用路径描绘为沿着单个或分叉路径连接的节点的表示。在某些实施例中,可识别或者以其他方式不同地显示基于继承扩展来连接节点的图表边,以按同样方式来对其进行识别。

在某些实施例中,可根据各种准则分类路径列表,包括如下因素:诸如总路径长度(例如路径中的节点的数目或图表边的数目)、路径是否在应用程序或产品代码库之间跨越、路径是否从特定对象或对象类调用函数以及显示出频繁的函数调用行为的先前运行时间轨迹。在图4中描绘了路径列表分类和概率确定操作的实施例。

从基于诸如图3中所示的图表搜索操作而编译的路径列表4001开始,分类和路径概率过程可识别该列表中的最短路径4010。在某些实施例中,可通过控制将返回的路径数目和/或最大允许路径长度的外部定义或外部控制设置来确定最短路径的数目。可由路径中的节点的数目、包括在路径中的图表边的数目或其组合来确定路径长度。在某些路径中,例如,节点可被通过多次,从而使得路径中的图表边的数目比路径中的节点的数目更大。

在某些实施例中,可基于路径是否完全在用于特定产品或应用程序的代码库内来识别路径4020。在某些实施例中,可基于路径长度以及基于路径是否保持在单个产品代码库内而对路径给定优先权4020。在某些这种实施例中,可将完全在产品或应用程序代码库内的路径分类为比并未完全在单个产品或应用程序代码库内的相等或类似长度的路径更有可能或概率更高。

在某些实施例中,还可将对象类加权因数应用于路径。可在某些实施例中基于与特定对象或对象类相关联的使用频率来确定这种对象类权值因数。在这种实施例中,可对包括表示与权值因数相关联的特定对象或对象类的函数的节点的函数调用路径给出比并非如此的相等或类似长度的函数调用路径更高的可能性或概率。

在某些实施例中,特定函数调用路径的可能性或概率可与基于路径长度、代码库以及类权值因数而计算的具体概率百分比相关联。在其它实施例中,与没有提供具体百分比的其它调用路径相比,可用相对项来表示特定函数调用路径的可能性或概率。在某些实施例中,可通过调用路径列表中的特定调用路径的排名顺序来指示特定函数调用路径的可能性或概率。在某些实施例中,确定调用路径概率4040可包括基于路径长度4010、代码库内的路径长度4020和/或类权值因数4030来重新排序或重新排名函数调用路径

在某些实施例中,用于确定路径概率4040的路径列表中的函数调用路径的这种重新排序或重新排名还可包括针对过去运行时间轨迹4050来评估函数调用路径。这种运行时间轨迹可包括基于历史应用程序行为而显示出频繁的和/或可能的调用路径的历史函数调用数据。一旦例如通过将调用路径从最可能到最不可能排序或排名来确定绝对或相对调用路径概率4040,则可返回或者以其他方式选择一定量的最可能调用路径(例如,排名最高的路径)以便呈现给路径搜索工具的用户或其它信息请求实体(诸如应用程序开发或原型化程序或程序套件)。

虽然上文在功能方面进行了讨论,但可通过使用一个或多个专业化、可编程和/或特别编程的计算设备或其部分来实现函数图表生成和调用路径搜索的特征和性质。

图5是图示出被布置成执行如本文所述的调用图表生成和调用路径搜索技术的示例性计算设备500的框图。在非常基本的配置501中,计算设备500通常包括一个或多个处理器510和系统存储器520。存储器总线530能够被用于在处理器510与系统存储器520之间进行通信。

根据期望的配置,处理器510能够是任何类型的,包括但不限于微处理器(μP)、微控制器(μC)、数字信号处理器(DSP)或其任何组合。处理器510能够包括一个或多个层级的高速缓存,诸如层级1高速缓存器511和层级2高速缓存器512、处理器核513以及寄存器514。处理器核513能够包括算数逻辑单元(ALU)、浮点单元(FPU)、数字信号处理核(DSP核)或其任何组合。还能够将存储器控制器515与处理器510一起使用,或者在某些实现中存储器控制器515能够是处理器510的内部部分。

根据期望的配置,系统存储器520能够是任何类型的,包括但不限于易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或其任何组合。系统存储器520通常包括操作系统521、一个或多个应用程序522以及程序数据524。应用程序522可包括如本文所讨论的调用图表生成和/或调用路径搜索特征。程序数据524包括位置数据,诸如对执行如上所述的期望操作有用的一个或多个依赖性列表或对象名列表525。在某些实施例中,能够将应用程序522布置成在操作系统521上以程序数据524进行操作,使得整个系统执行如本文所讨论的技术的一个或多个具体变化。在图5中通过线501内的那些部件举例说明了此所述基本配置。

计算设备500能够具有附加特征或功能以及附加接口,以促进基本配置501与任何所需设备和接口之间的通信。例如,能够使用总线/接口控制器540来促进经由存储接口总线541进行的基本配置501与一个或多个数据存储设备550之间的通信。数据存储设备550能够是可移动存储设备551、不可移动存储设备552或其组合。可移动存储和不可移动存储设备的示例包括,仅举几个例子,诸如软盘驱动和硬盘驱动(HDD)的磁盘设备、诸如压缩式磁盘(CD)驱动或数字多功能盘(DVD)驱动的光盘驱动、固态驱动(SSD)以及磁带驱动。示例性计算机存储介质能够包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息的任何方法或技术实现的易失性和非易失性、可以移动和不可以移动介质。

系统存储器520、可移动存储设备551和不可移动存储设备552全部是计算机存储介质的示例。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光学存储、磁带盒、磁带、磁盘存储或其它磁性存储设备,或者能够用来存储期望信息且能够由计算设备500访问的任何其它介质。任何这种计算机存储介质能够是计算设备500的一部分。

计算设备500还能够包括用于促进经由总线/接口控制器540从各种接口设备(例如,输出接口、外围接口以及通信接口)到基本配置501的通信的接口总线542。示例性输出设备560包括图形处理单元561和音频处理单元562,其能够被配置成经由一个或多个A/V端口563向诸如显示器或扬声器的各种外部设备进行通信。示例性外围接口570包括串行接口控制器571或并行接口控制器572,其能够被配置成经由一个或多个I/O端口573与诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、照相机、触摸输入设备等)或其它外围设备(例如,打印机、扫描仪等)的外部设备进行通信。示例性通信设备580包括网络控制器581,其能够被布置成促进经由一个或多个通信端口582通过网络通信与一个或多个其它计算设备590的通信。

网络通信连接是通信介质的一个示例。通常可由计算机可读指令、数据结构、程序模块或诸如载波或其它传输机制的已调制数据信号中的其它数据来体现通信介质,并且其包括任何信息传送介质。“已调制数据信号”能够是以对信号中的信息进行编码的方式使其特性中的一个或多个被设定或改变的信号。通过示例而非限制的方式,通信介质能够包括诸如有线网络或直接有线连接的有线介质,以及诸如声学、射频(RF)、红外(IR)及其它无线介质的无线介质。如本文所使用的术语计算机可读介质能够包括存储介质和通信介质。

能够将计算设备500实现为以小外形为因素的便携式(或移动式)电子设备的一部分,所述电子设备为诸如蜂窝电话、个人数据助理(PDA)、个人媒体播放器设备、无线网络手表设备、个人耳机设备、专用设备或包括上述任何功能的混合式设备。还能够将计算设备500实现为包括膝上型计算机和非膝上型计算机两者配置的个人计算机。

在某些情况中,在系统的各方面的硬件和软件实现之间仍存在微小的区别:使用硬件或软件一般(但并不总是,因为在某些背景下硬件和软件之间的选择可能变得重要)是表示成本对比效率权衡的设计选择。存在通过其能够实现本文所述的过程和/或系统和/或其它技术的各种媒介(例如硬件、软件和/或固件),并且优选媒介将随着其中部署该过程和/或系统和/或其它技术的背景而改变。例如,如果实现者确定速度和准确度是最重要的,则实现者可选择主要硬件和/或固件媒介;如果灵活性是最重要的,则实现者可选择主要软件实现;或者再一次替换地,实现者可选择硬件、软件和/或固件的某种组合。

经由使用框图、流程图和/或示例前述详细描述已经阐述了设备和/或过程的各种实施例。在这种框图、流程图和/或示例包含一个或多个功能和/或操作的范围内,本领域的技术人员将理解的是这种框图、流程图或示例内的每个功能和/或操作能够单独地和/或共同地以大范围的硬件、软件、固件或其实际上任何组合来实现。在一个实施例中可经由专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它集成格式来实现本文所述的主题的多个部分。然而,本领域的技术人员将认识到本文公开的实施例的某些方面完全地或部分地能够以如下形式来等价地实现:集成电路、作为运行在一个或多个计算机上的一个或多个计算机程序(例如,作为运行在一个或多个计算机系统上的一个或多个程序)、作为运行在一个或多个处理器上的一个或多个程序(例如,作为运行在一个或多个微处理器上的一个或多个程序)、作为固件或者作为其实际上任何组合,并且就本公开而言对软件和/或固件而进行的设计电路和/或编写代码将很好地处于本领域的技术人员的技能内。另外本领域的技术人员将认识到本文所述的主题的机制能够作为多种形式的程序产品而分发,并且无论用来实际上执行该分发的信号承载介质的特定类型如何,本文所述的主题的说明性实施例都适用。信号承载介质的示例包括但不限于以下各项:可记录型介质,诸如软盘、硬盘驱动、压缩式磁盘(CD)、数字视频磁盘(DVD)、数字磁带、计算机存储器等;以及传输型介质,诸如数字和/或模拟通信介质(例如,光纤电缆、波导、有线通信链路、无线通信链路等)。

本领域的技术人员将认识到,以本文阐述的方式来描述设备和/或过程且然后使用工程实践来将这种所述设备和/或过程集成到数据处理系统中,在本领域内是常见的。也就是说,能够经由合理的实验量将本文所述的设备和/或过程的至少一部分集成到数据处理系统中。本领域的技术人员将认识到典型的数据处理系统一般包括以下中的一个或多个:系统单元外壳、视频显示设备、诸如易失性和非易失性存储器的存储器、诸如微处理器和数字信号处理器的处理器、诸如操作系统的计算实体、驱动程序、图形用户界面以及应用程序、诸如触控板或触摸屏的一个或多个交互设备和/或包括反馈环路和控制马达(例如,用于感测位置和/或速度的反馈;用于移动和/或调整部件和/或数量的控制马达)的控制系统。可利用任何适当的市售部件来实现典型的数据处理系统,诸如通常在数据计算/通信和/或网络计算/通信系统中使用的那些。

关于本文中的相对多的任何复数和/或单数术语的使用,本领域的技术人员能够在适合于上下文和/或应用时从复数转换成单数和/或从单数转换成复数。在本文中为了明了起见而明确地阐述了各种单数/复数置换。

在本公开中仅示出并描述了本文所讨论的系统和解决方案的示例性实施例。应理解的是本文所讨论的系统和解决方案能够在各种其它组合和环境中使用,并且能够在如本文中所表达的概念的范围内进行改变和修改。可以硬件、固件和/或软件的组合来体现某些变化。可至少部分地在诸如存储器芯片、硬盘驱动、闪存、光学存储介质的计算机可读存储介质上,或者作为适合于传输以由各种硬件设备和/或硬件设备的组合/集合下载或在其上安装的完全或部分编译程序来体现某些变化。不应认为这种变化脱离本文所讨论的系统和解决方案的精神和范围,并且对于本领域的技术人员而言将显而易见的所有这种修改旨在被包括在以下权利要求的范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1