CN105745647A - 调用路径查找器 - Google Patents

调用路径查找器 Download PDF

Info

Publication number
CN105745647A
CN105745647A CN201480062873.3A CN201480062873A CN105745647A CN 105745647 A CN105745647 A CN 105745647A CN 201480062873 A CN201480062873 A CN 201480062873A CN 105745647 A CN105745647 A CN 105745647A
Authority
CN
China
Prior art keywords
function
node
call
path
child node
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.)
Granted
Application number
CN201480062873.3A
Other languages
English (en)
Other versions
CN105745647B (zh
Inventor
罗摩克里希纳·拉亚纳
迪潘克·古普塔
阿鲁尔·西瓦·莫鲁甘·韦拉尤坦
阿比谢克·舍乌珀里
安吉特·阿加瓦尔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of CN105745647A publication Critical patent/CN105745647A/zh
Application granted granted Critical
Publication of CN105745647B publication Critical patent/CN105745647B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Telephonic Communication Services (AREA)

Abstract

公开了用于创建代码库的函数调用图表的技术和系统。图表创建包括通过函数签名来识别代码库中的函数(1001)并将函数表示为调用图表中的第一节点(1070)。对于该函数,根据该函数的函数签名而识别(1200)调用目标函数、调用源函数以及继承父函数和子函数以及基本类;基于所识别的调用目标函数和调用源函数向第一节点添加第一子节点(1020);对于函数中的基本类方法的接口调用(1010),基于基本类方法的覆写的实现向第一节点添加(1090)子节点(1020);对于所添加的子节点,如果包括覆写的实现的源文件和包括函数的源代码文件不共享至少一个公共二进制文件(1100)?(1150),则将该子节点从第一节点移除。

Description

调用路径查找器
背景技术
复杂的大规模软件产品或软件开发环境越来越可能要求进行开发或维护的程序员阅读不熟悉的代码。在这种情况下,追踪函数之间的控制流程可能是有挑战性且耗费时间的。
发明内容
在本文所讨论的解决方案的某些实施例中涉及一种生成用于代码库的函数调用图表的方法,该方法包括:通过函数签名来识别代码库中的函数;将所识别的特定函数表示为函数调用图表中的第一节点;对于特定函数,基于特定函数的函数签名,识别调用目标(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)、数字磁带、计算机存储器等;以及传输型介质,诸如数字和/或模拟通信介质(例如,光纤电缆、波导、有线通信链路、无线通信链路等)。
本领域的技术人员将认识到,以本文阐述的方式来描述设备和/或过程且然后使用工程实践来将这种所述设备和/或过程集成到数据处理系统中,在本领域内是常见的。也就是说,能够经由合理的实验量将本文所述的设备和/或过程的至少一部分集成到数据处理系统中。本领域的技术人员将认识到典型的数据处理系统一般包括以下中的一个或多个:系统单元外壳、视频显示设备、诸如易失性和非易失性存储器的存储器、诸如微处理器和数字信号处理器的处理器、诸如操作系统的计算实体、驱动程序、图形用户界面以及应用程序、诸如触控板或触摸屏的一个或多个交互设备和/或包括反馈环路和控制马达(例如,用于感测位置和/或速度的反馈;用于移动和/或调整部件和/或数量的控制马达)的控制系统。可利用任何适当的市售部件来实现典型的数据处理系统,诸如通常在数据计算/通信和/或网络计算/通信系统中使用的那些。
关于本文中的相对多的任何复数和/或单数术语的使用,本领域的技术人员能够在适合于上下文和/或应用时从复数转换成单数和/或从单数转换成复数。在本文中为了明了起见而明确地阐述了各种单数/复数置换。
在本公开中仅示出并描述了本文所讨论的系统和解决方案的示例性实施例。应理解的是本文所讨论的系统和解决方案能够在各种其它组合和环境中使用,并且能够在如本文中所表达的概念的范围内进行改变和修改。可以硬件、固件和/或软件的组合来体现某些变化。可至少部分地在诸如存储器芯片、硬盘驱动、闪存、光学存储介质的计算机可读存储介质上,或者作为适合于传输以由各种硬件设备和/或硬件设备的组合/集合下载或在其上安装的完全或部分编译程序来体现某些变化。不应认为这种变化脱离本文所讨论的系统和解决方案的精神和范围,并且对于本领域的技术人员而言将显而易见的所有这种修改旨在被包括在以下权利要求的范围内。

Claims (26)

1.一种生成用于代码库的函数调用图表的基于计算机的方法,所述方法包括:
通过处理器使用函数签名来识别(1001)所述代码库中的函数;
将所识别的特定函数表示为所述函数调用图表中的第一节点(1070);
对于所述特定函数,基于所述特定函数的函数签名,识别(1200)调用目标函数、调用源函数、继承父函数以及继承子函数、以及与所述特定函数相关联的基本类;
基于所识别的调用目标函数和调用源函数向所述第一节点添加(1090)第一子节点(1020);
对于所述特定函数中的基本类方法的接口调用(1010),基于所述基本类方法的覆写的实现向所述第一节点添加第二子节点;
对于所述第一节点的每个子节点(1020),生成(1040)用于父子关系的二进制文件滤波器,所述二级制文件滤波器基于包括所述特定函数和由子节点所表示的函数的二进制文件。
2.如权利要求1所述的方法,所述二进制文件滤波器是Bloom滤波器,所述Bloom滤波器被配置成将包括所述特定函数和由所述子节点所表示的所述函数的二进制文件指示为通过所述Bloom滤波器的文件。
3.如权利要求1所述的方法,所述方法进一步包括减小(1080)所述函数调用图表的存储器占用。
4.如权利要求3所述的方法,所述减小存储器占用包括将散列函数应用于函数签名并将所述散列函数的结果存储为所述函数签名的表示。
5.一种确定二进制文件是否包括两个功能之间的调用路径的方法:
接收表示函数调用图表中的起始节点(1170)的信息,所述起始节点与起始函数相关联;
接收表示函数调用图表中的末端节点(1180)的信息,所述末端节点与末端函数相关联;
利用第一Bloom滤波器(1110、1140)来测试与所述起始节点和所述末端节点中的至少一个相关联的二进制文件,所述测试包括将所述第一Bloom滤波器应用于所述二进制文件,以便确定所述二进制文件是否包括所述起始函数和所述末端函数(1130、1120)。
6.如权利要求2所述的方法,所述方法进一步包括基于包括所述特定函数和由所述子节点所表示的所述函数的二进制文件的数目来改变Bloom滤波器的尺寸。
7.如权利要求1所述的方法,生成二进制滤波器包括基于所述代码库的二进制文件来生成Bloom滤波器;以及
所述方法进一步包括将所生成的Bloom滤波器添加到所述第一节点。
8.如权利要求7所述的方法,所述确定包括所添加的覆写的特定实现的第一源代码文件和包括所述特定函数的第二源代码文件是否共享至少一个公共二进制文件包括:
将所述第一节点的Bloom滤波器应用于使用所述第一源代码文件编译的二进制文件。
9.如权利要求8所述的方法,其中,通过使用所述第二源代码文件编译或生成了所述代码库的二进制文件的数量来确定所述Bloom滤波器的尺寸,使得频繁使用的源代码文件与较大尺寸的bloom滤波器相关联。
10.一种确定代码库中的两个函数之间的可能调用路径的方法,所述方法包括:
接收源函数和目标函数作为输入;
在函数调用图表中识别与所述源函数相关联的起始节点(3001)和与所述目标函数相关联的末端节点(3010);
搜索所述起始节点与所述末端节点之间的所述函数调用图表中的可能路径(3050),所述搜索包括对于所述图表的一层级处的每个节点,
针对由所述起始节点和所述末端节点共享的公共依赖性列表来评估所述节点(3080);
对具有包括在所述公共依赖性列表中的依赖性的所评估的节点,将所评估的节点包括在可能路径列表中(3080、3090);
对不具有包括在所述公共依赖性列表中的依赖性的所评估的节点,将所评估的节点从任何可能路径列表中排除(3080、3070);
将包括在所述可能路径列表中的所述节点排名(3130);
对于每个所排名的节点,扩展所排名的节点以确定所排名的节点是否包括子节点;
响应于确定所排名的节点具有子节点,将所排名的节点视为起始节点并对所排名的节点的每个子节点执行所述搜索可能路径(3060);
响应于确定所排名的节点不具有子节点,将包括所排名的节点的函数调用路径识别为可能函数调用路径(3060、3140);
将所述起始节点与所述末端节点之间的所述可能函数调用路径分类(3150);以及
返回所分类的可能函数调用路径中的至少一个作为可能调用路径(3160)。
11.如权利要求10所述的方法,所述将所有可能函数调用路径分类包括:
将所述所有可能函数调用路径从最短到最长排序;
从所排序的函数调用路径之中识别完全在单个代码库内的那些函数调用路径;
对所排序的函数调用路径应用权值因数,使得所述所有可能函数调用路径基于函数调用路径长度和权值因数而从最可能到最不可能排序,所述权值因数包括将完全在单个代码库内的那些函数调用路径指示为更有可能;以及
在所述应用权值因数之后返回至少最有可能的函数调用路径作为可能的调用路径。
12.如权利要求11所述的方法,所述应用权值因数包括基于从先前的函数执行而生成的历史追踪数据来生成权值因数,使得由所述历史追踪数据所指示的函数调用路径与将那些函数调用路径指示为更有可能的权值因数相关联。
13.如权利要求10所述的方法,所述应用权值因数包括应用基于类的权值因数,使得包括共同使用的对象类的调用路径将被指示为更有可能。
14.如权利要求10所述的方法,所述搜索可能路径包括搜索所述图表内的所有可能路径。
15.如权利要求10所述的方法,所述搜索可能路径包括执行从所述起始节点和所述末端节点两者开始的双向搜索。
16.如权利要求10所述的方法,所述针对公共依赖性列表评估节点包括将与所述节点相关联的Bloom滤波器应用于从包括所述源函数和所述目标函数中的至少一个的源代码文件编译的至少一个二进制文件;
响应于所述至少一个二进制文件通过所应用的Bloom滤波器而将所述节点评估为具有包括在所述公共依赖性列表中的依赖性。
17.如权利要求16所述的方法,所述方法进一步包括:
响应于确定所述源函数和所述目标函数中的至少一个是远程过程调用,所述Bloom滤波器被配置成使包括所述源函数和所述目标函数中的至少一个的那些二进制文件通过;
响应于确定所述源函数和所述目标函数中的至少一个不是远程过程调用,所述Bloom滤波器被配置成使包括所述源函数和所述目标函数两者的那些二进制文件通过。
18.如权利要求16所述的方法,其中,所述Bloom滤波器的尺寸基于所述Bloom滤波器被配置成通过的二进制文件的数目。
19.一种非瞬时性计算机可读介质,具有实现在其上的数据结构,所述数据结构表示用于代码库的函数调用图表,所述图表包括:
多个图表节点,每个图表节点表示代码库内的可调用函数,来自所述多个图表节点之中的第一图表节点包括:
唯一识别所述代码库内的所述可调用函数的函数签名;
第一图表节点绝对路径,识别文件系统内的包括所述可调用函数的数据文件的绝对位置;
识别所述第一图表节点的子节点的信息,识别子节点的所述信息包括识别与所述子节点相关联的子函数的子函数签名的表示和与所述子节点相关联的子节点种类,
其中,与所述子节点相关联的所述子函数签名表示连接所述第一图表节点和所述子节点的图表边;以及
其中,所述子节点种类包括直接调用种类和实例调用种类中的一个,所述实例调用种类指示所述子节点表示在所述可调用函数中调用的基本类方法的覆写的实现。
20.如权利要求19所述的数据结构,识别子节点的所述信息进一步包括指示与所述子节点相关联的所述子函数是否是远程过程调用函数的标志。
21.如权利要求19所述的数据结构,其中,所述函数签名以散列形式包括在所述第一图表节点中,所述散列形式在介质中占用较少数据存储空间。
22.如权利要求19所述的数据结构,所述子节点包括:
子函数签名,唯一识别所述代码库内的所述子函数;
子节点绝对路径,识别文件系统内的包括所述子函数的数据文件的绝对位置;
识别所述图表节点的连接节点的信息,识别连接节点的所述信息包括调用源函数签名的表示,所述调用源函数签名识别调用由所述子节点所表示的所述子函数的调用源函数,
其中,与所述连接节点相关联的所述调用源函数签名表示连接所述子节点和所述连接节点的图表边。
23.如权利要求19所述的数据结构,其中,所述第一图表节点是所述子节点的连接节点。
24.如权利要求22所述的方法,每个图表边表示函数调用路径的至少一部分,所述方法进一步包括:通过针对过去的运行时间轨迹评估所述函数调用路径来执行所述后续排名。
25.一种系统,包括:
处理器;
处理器可读存储器,具有实现在其上的的指令,所述指令用于促使所述处理器执行生成用于代码库的函数调用图表的方法,所述方法包括:
通过处理器使用函数签名来识别(1001)所述代码库中的函数;
将所识别的特定函数表示为所述函数调用图表中的第一节点(1070);
对于所述特定函数,基于所述特定函数的函数签名,识别(1200)调用目标函数、调用源函数、继承父函数以及继承子函数、以及与所述特定函数相关联的基本类;
基于所识别的调用目标函数和调用源函数向所述第一节点添加(1090)第一子节点(1020);
对于所述特定函数中的基本类方法的接口调用(1010),基于所述基本类方法的覆写的实现向所述第一节点添加第二子节点;
对于所述第一节点的每个子节点(1020),生成(1040)用于父子关系的二进制文件滤波器,所述二级制文件滤波器基于包括所述特定函数和由子节点所表示的函数的二进制文件。
26.一种系统,包括:
处理器;
处理器可读存储器,具有实现在其上的指令,所述指令用于促使处理器执行确定代码库中的两个函数之间的可能调用路径的方法,所述方法包括:
接收源函数和目标函数作为输入;
在函数调用图表中识别与所述源函数相关联的起始节点(3001)和与所述目标函数相关联的末端节点(3010);
搜索所述起始节点与所述末端节点之间的所述函数调用图表中的可能路径(3050),所述搜索包括对于所述图表的一层级处的每个节点,
针对由所述起始节点和所述末端节点共享的公共依赖性列表来评估所述节点(3080);
对具有包括在所述公共依赖性列表中的依赖性的所评估的节点,将所评估的节点包括在可能路径列表中(3080、3090);
对不具有包括在所述公共依赖性列表中的依赖性的所评估的节点,将所评估的节点从任何可能路径列表中排除(3080、3070);
将包括在所述可能路径列表中的所述节点排名(3130);
对于每个所排名的节点,扩展所排名的节点以确定所排名的节点是否包括子节点;
响应于确定所排名的节点具有子节点,将所排名的节点视为起始节点并对所排名的节点的每个子节点执行所述搜索可能路径(3060);
响应于确定所排名的节点不具有子节点,将包括所排名的节点的函数调用路径识别为可能函数调用路径(3060、3140);
将所述起始节点与所述末端节点之间的所述可能函数调用路径分类(3150);以及
返回所分类的可能函数调用路径中的至少一个作为可能调用路径(3160)。
CN201480062873.3A 2013-11-19 2014-11-17 调用路径查找器 Active CN105745647B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/084,399 US9218169B2 (en) 2013-11-19 2013-11-19 Callpath finder
US14/084,399 2013-11-19
PCT/US2014/065906 WO2015077175A1 (en) 2013-11-19 2014-11-17 Callpath finder

Publications (2)

Publication Number Publication Date
CN105745647A true CN105745647A (zh) 2016-07-06
CN105745647B CN105745647B (zh) 2019-06-04

Family

ID=53174616

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480062873.3A Active CN105745647B (zh) 2013-11-19 2014-11-17 调用路径查找器

Country Status (8)

Country Link
US (2) US9218169B2 (zh)
EP (2) EP4369180A3 (zh)
JP (1) JP6349395B2 (zh)
KR (2) KR101841751B1 (zh)
CN (1) CN105745647B (zh)
BR (1) BR112016009391B1 (zh)
DE (1) DE202014010893U1 (zh)
WO (1) WO2015077175A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111026467A (zh) * 2019-12-06 2020-04-17 合肥科大智能机器人技术有限公司 一种有限状态机的控制方法及有限状态机

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102410723B1 (ko) 2014-07-24 2022-06-17 아브 이니티오 테크놀로지 엘엘시 데이터 계통 요약
US9250891B1 (en) * 2014-10-28 2016-02-02 Amazon Technologies, Inc. Optimized class loading
US9483241B2 (en) * 2014-12-19 2016-11-01 Successfactors, Inc. Method ranking based on code invocation
US9569183B2 (en) * 2015-02-25 2017-02-14 Red Hat, Inc. Contract based builder
US9405906B1 (en) * 2015-02-25 2016-08-02 Veracode, Inc. System and method for enhancing static analysis of software applications
US10229273B2 (en) * 2015-02-25 2019-03-12 Veracode, Inc. Identifying components for static analysis of software applications
US9323644B1 (en) * 2015-09-30 2016-04-26 Semmle Limited Query-based software dependency analysis
US10353703B1 (en) * 2016-01-28 2019-07-16 BrainFights, Inc. Automated evaluation of computer programming
US11650903B2 (en) 2016-01-28 2023-05-16 Codesignal, Inc. Computer programming assessment
US11593342B2 (en) 2016-02-01 2023-02-28 Smartshift Technologies, Inc. Systems and methods for database orientation transformation
US10585655B2 (en) 2016-05-25 2020-03-10 Smartshift Technologies, Inc. Systems and methods for automated retrofitting of customized code objects
CN106020848A (zh) * 2016-06-07 2016-10-12 北京信息科技大学 面向c#的函数调用路径生成方法
US10089103B2 (en) 2016-08-03 2018-10-02 Smartshift Technologies, Inc. Systems and methods for transformation of reporting schema
US10467229B2 (en) 2016-09-30 2019-11-05 Microsoft Technology Licensing, Llc. Query-time analytics on graph queries spanning subgraphs
US9792114B1 (en) * 2016-10-10 2017-10-17 Semmle Limited Source code element signatures
US10545945B2 (en) 2016-10-28 2020-01-28 Microsoft Technology Licensing, Llc Change monitoring spanning graph queries
US10402403B2 (en) 2016-12-15 2019-09-03 Microsoft Technology Licensing, Llc Utilization of probabilistic characteristics for reduction of graph database traversals
US10445361B2 (en) 2016-12-15 2019-10-15 Microsoft Technology Licensing, Llc Caching of subgraphs and integration of cached subgraphs into graph query results
US10891326B2 (en) * 2017-01-05 2021-01-12 International Business Machines Corporation Representation of a data analysis using a flow graph
US10242223B2 (en) 2017-02-27 2019-03-26 Microsoft Technology Licensing, Llc Access controlled graph query spanning
US10992729B2 (en) 2017-04-18 2021-04-27 Microsoft Technology Licensing, Llc Endpoint configuration for a communication session
US10388039B2 (en) 2017-05-31 2019-08-20 International Business Machines Corporation Accelerating data-driven scientific discovery
CN107479985B (zh) * 2017-06-30 2020-01-03 武汉斗鱼网络科技有限公司 一种远程过程调用的方法、装置及计算机设备
US11132180B2 (en) * 2018-01-05 2021-09-28 Microsoft Technology Licensing, Llc Neural-guided deductive search for program synthesis
US10528343B2 (en) 2018-02-06 2020-01-07 Smartshift Technologies, Inc. Systems and methods for code analysis heat map interfaces
US10740075B2 (en) * 2018-02-06 2020-08-11 Smartshift Technologies, Inc. Systems and methods for code clustering analysis and transformation
US10698674B2 (en) 2018-02-06 2020-06-30 Smartshift Technologies, Inc. Systems and methods for entry point-based code analysis and transformation
FR3078182B1 (fr) * 2018-02-19 2021-12-24 Bull Sas Systeme et procede informatique d'analyse de performance d'une application realisant des appels de fonction de communication entre plusieurs processus.
WO2019182191A1 (ko) 2018-03-21 2019-09-26 경북대학교 산학협력단 C0x2 아세틸화제를 유효성분으로 포함하는 퇴행성 신경질환의 예방 또는 치료용 약학적 조성물
US20200134482A1 (en) * 2018-10-29 2020-04-30 Walmart Apollo, Llc Scaling overrides in a rules engine using a streaming probabilistic data structure
JPWO2020174578A1 (ja) * 2019-02-26 2021-09-30 三菱電機株式会社 シーケンス図生成装置
CN110032394B (zh) * 2019-04-12 2022-05-31 深圳市腾讯信息技术有限公司 一种无源码文件的分析方法、装置和存储介质
US11782971B2 (en) * 2019-06-27 2023-10-10 Tencent America LLC Static and dynamic NBMP function image retrieval and scale ranking
KR20210012123A (ko) * 2019-07-24 2021-02-03 에스케이하이닉스 주식회사 메모리 시스템, 메모리 컨트롤러 및 동작 방법
US11360751B2 (en) * 2020-03-19 2022-06-14 Codelogic, Inc. Systems and methods for dependency analysis
US11593255B2 (en) * 2020-07-31 2023-02-28 Bank Of America Corporation Mobile log heatmap-based auto testcase generation
CN116028375B (zh) * 2023-02-21 2023-06-16 深圳大数信科技术有限公司 基于图论的代码测试方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030018603A1 (en) * 2000-09-18 2003-01-23 International Business Machines Corporation Scalable propagation-based methods for call graph construction
US20060236309A1 (en) * 2005-04-14 2006-10-19 George Jini S System and method to build a callgraph for functions with multiple entry points
US20070150878A1 (en) * 2005-12-23 2007-06-28 Sas Institute Inc. System and method for detecting redundant subroutine calls
US20110145800A1 (en) * 2009-12-10 2011-06-16 Microsoft Corporation Building An Application Call Graph From Multiple Sources
CN102567200A (zh) * 2011-12-14 2012-07-11 北京航空航天大学 基于函数调用图的并行化安全漏洞检测方法
CN103336760A (zh) * 2013-07-11 2013-10-02 北京信息科技大学 一种基于逆向工程自动生成软件文档的方法及装置
CN103345472A (zh) * 2013-06-04 2013-10-09 北京航空航天大学 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1195990A (ja) * 1997-09-22 1999-04-09 Nippon Telegr & Teleph Corp <Ntt> プログラム構造表示方法および装置
JP3694872B2 (ja) * 1999-09-22 2005-09-14 日立ソフトウエアエンジニアリング株式会社 従属サブルーチン探索支援装置
US7120904B1 (en) * 2000-04-19 2006-10-10 Intel Corporation Data-flow method for optimizing exception-handling instructions in programs
US7174536B1 (en) * 2001-02-12 2007-02-06 Iowa State University Research Foundation, Inc. Integrated interactive software visualization environment
US6904590B2 (en) * 2001-05-25 2005-06-07 Microsoft Corporation Methods for enhancing program analysis
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7774760B2 (en) * 2005-12-23 2010-08-10 Microsoft Corporation Tracing errors in software
US7739553B2 (en) * 2007-05-31 2010-06-15 Microsoft Corporation System crash analysis using path tracing technologies
CN101436192B (zh) * 2007-11-16 2011-03-16 国际商业机器公司 用于优化针对垂直存储式数据库的查询的方法和设备
US8990792B2 (en) * 2008-05-26 2015-03-24 Samsung Electronics Co., Ltd. Method for constructing dynamic call graph of application
US8347272B2 (en) * 2008-07-23 2013-01-01 International Business Machines Corporation Call graph dependency extraction by static source code analysis
US8332558B2 (en) * 2008-09-30 2012-12-11 Intel Corporation Compact trace trees for dynamic binary parallelization
US8996568B2 (en) * 2009-07-14 2015-03-31 Qualcomm Incorporated Methods and apparatus for efficiently processing multiple keyword queries on a distributed network
CN101876939B (zh) * 2009-11-20 2011-12-21 北京信息科技大学 系统测试方法及装置
EP2522106A1 (en) * 2010-01-04 2012-11-14 Telefonaktiebolaget LM Ericsson (publ) Method and apparatus for secure routing of data packets
CN102714839A (zh) * 2010-01-29 2012-10-03 瑞典爱立信有限公司 网络中的分组路由选择
US20120287934A1 (en) * 2010-01-29 2012-11-15 Telefonaktiebolaget Lm Ericsson (Publ) Packet Routing in a Network by Modifying In-Packet Bloom Filter
US20130132780A1 (en) * 2010-03-26 2013-05-23 Software Diagnostics Technology Gmbh Method for Automatically Detecting and Excluding a Tracing Instruction from Further Trace Data Generation for a Software System, a Computer System, and a Computer Program Product
EP2390790A1 (en) 2010-05-27 2011-11-30 Fujitsu Limited Profiling of software applications
JP6011533B2 (ja) * 2011-07-07 2016-10-19 日本電気株式会社 情報処理装置、情報処理方法およびプログラム
US8990243B2 (en) * 2011-11-23 2015-03-24 Red Hat, Inc. Determining data location in a distributed data store
US8762396B2 (en) * 2011-12-22 2014-06-24 Sap Ag Dynamic, hierarchical bloom filters for network data routing
CN103186406B (zh) * 2011-12-30 2016-08-17 国际商业机器公司 用于控制流分析的方法和装置
US8527532B2 (en) * 2012-01-31 2013-09-03 Adobe Systems Incorporated Transforming function calls for interaction with hierarchical data structures
US9092568B2 (en) * 2012-04-30 2015-07-28 Nec Laboratories America, Inc. Method and system for correlated tracing with automated multi-layer function instrumentation localization
US8918766B2 (en) * 2012-12-12 2014-12-23 Microsoft Corporation Analysis of propagated information using annotated forests
US10685313B2 (en) * 2012-12-14 2020-06-16 Software Ag Systems and/or methods for path finding on model structures

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030018603A1 (en) * 2000-09-18 2003-01-23 International Business Machines Corporation Scalable propagation-based methods for call graph construction
US20060236309A1 (en) * 2005-04-14 2006-10-19 George Jini S System and method to build a callgraph for functions with multiple entry points
US20070150878A1 (en) * 2005-12-23 2007-06-28 Sas Institute Inc. System and method for detecting redundant subroutine calls
US20110145800A1 (en) * 2009-12-10 2011-06-16 Microsoft Corporation Building An Application Call Graph From Multiple Sources
CN102567200A (zh) * 2011-12-14 2012-07-11 北京航空航天大学 基于函数调用图的并行化安全漏洞检测方法
CN103345472A (zh) * 2013-06-04 2013-10-09 北京航空航天大学 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法
CN103336760A (zh) * 2013-07-11 2013-10-02 北京信息科技大学 一种基于逆向工程自动生成软件文档的方法及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111026467A (zh) * 2019-12-06 2020-04-17 合肥科大智能机器人技术有限公司 一种有限状态机的控制方法及有限状态机

Also Published As

Publication number Publication date
KR101841751B1 (ko) 2018-05-04
BR112016009391A2 (pt) 2017-08-01
US10042746B2 (en) 2018-08-07
JP6349395B2 (ja) 2018-06-27
US9218169B2 (en) 2015-12-22
WO2015077175A1 (en) 2015-05-28
JP2016539421A (ja) 2016-12-15
EP4369180A3 (en) 2024-05-22
KR20160073402A (ko) 2016-06-24
EP3072070B1 (en) 2024-05-01
CN105745647B (zh) 2019-06-04
BR112016009391B1 (pt) 2023-03-28
US20160092350A1 (en) 2016-03-31
DE202014010893U1 (de) 2017-02-20
US20150143339A1 (en) 2015-05-21
KR20180032669A (ko) 2018-03-30
EP4369180A2 (en) 2024-05-15
BR112016009391A8 (pt) 2022-08-30
EP3072070A4 (en) 2017-08-09
KR102154757B1 (ko) 2020-09-10
EP3072070A1 (en) 2016-09-28

Similar Documents

Publication Publication Date Title
CN105745647A (zh) 调用路径查找器
Datseris et al. Agents. jl: a performant and feature-full agent-based modeling software of minimal code complexity
US8370808B2 (en) Apparatus and a method for generating a test case
RU2666238C2 (ru) Компиляция преобразований в пользовательском интерфейсе повторных вычислений
US9471575B2 (en) Managing changes to one or more files via linked mapping records
CN110366734A (zh) 优化神经网络架构
CN101739335A (zh) 建议的应用评估系统
Attwal et al. Exploring data mining tool-Weka and using Weka to build and evaluate predictive models
CN104620236A (zh) 用于神经网络的基于标记的装置和方法
Scardoni et al. Finding the shortest path with PesCa: a tool for network reconstruction
Ramgouda et al. Constraints handling in combinatorial interaction testing using multi-objective crow search and fruitfly optimization
Mei et al. Libsignal: An open library for traffic signal control
Effendi et al. Discovering process model from event logs by considering overlapping rules
Komosinski et al. Identifying efficient abductive hypotheses using multicriteria dominance relation
KR102119518B1 (ko) 인공지능을 이용하여 생성되는 스타일 공간에 기반한 상품 추천 방법 및 시스템
Ferrarotti et al. A behavioural theory for reflective sequential algorithms
Tietz et al. Task-based recommendation of mashup components
Xiao et al. ChoroWare: a software toolkit for choropleth map classification
CN104660697B (zh) 基于Kepler科学工作流传感网服务组合方法
Hou et al. A novel machine learning algorithm to reduce prediction error and accelerate learning curve for very large datasets
JP6721036B2 (ja) 推論システム、推論方法、及び、プログラム
EP2856396A2 (en) Buildable part pairs in an unconfigured product structure
Chang Methodological polymorphism for supporting the architectural design process
Jiline et al. Annotation concept synthesis and enrichment analysis: a logic-based approach to the interpretation of high-throughput experiments
Peters et al. A genetic approach to architectural pattern discovery

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: American California

Applicant after: Google limited liability company

Address before: American California

Applicant before: Google Inc.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant