CN104899016B - 调用堆栈关系获取方法及装置 - Google Patents

调用堆栈关系获取方法及装置 Download PDF

Info

Publication number
CN104899016B
CN104899016B CN201410084414.7A CN201410084414A CN104899016B CN 104899016 B CN104899016 B CN 104899016B CN 201410084414 A CN201410084414 A CN 201410084414A CN 104899016 B CN104899016 B CN 104899016B
Authority
CN
China
Prior art keywords
function
page
code
allocating stack
multiple code
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.)
Active
Application number
CN201410084414.7A
Other languages
English (en)
Other versions
CN104899016A (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.)
Tencent Technology Shenzhen Co Ltd
Tencent Cloud Computing Beijing Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201410084414.7A priority Critical patent/CN104899016B/zh
Priority to PCT/CN2015/073562 priority patent/WO2015131804A1/en
Publication of CN104899016A publication Critical patent/CN104899016A/zh
Priority to US15/173,118 priority patent/US20160283357A1/en
Application granted granted Critical
Publication of CN104899016B publication Critical patent/CN104899016B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45529Embedded in an application, e.g. JavaScript in a Web browser

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种调用堆栈关系获取方法及装置,属于网络技术领域。该方法包括:对于打开的每一个页面,记录该页面所加载的多个代码文件;对于该页面中运行的多个代码文件中的每一个函数,在该函数开始运行和结束运行时,至少获取该函数的调用层次,该函数的调用层次包括调用该函数的函数名和该函数调用的函数名中的至少一项;根据该多个代码文件中每个函数的调用层次,得到该多个代码文件的调用堆栈关系。本发明得到的页面中多个代码文件的调用堆栈关系,可以直观显示该页面的函数之间的逻辑关系,使得开发人员在缺乏相应的函数名和程序注释的情况下,也可以对代码进行测试。

Description

调用堆栈关系获取方法及装置
技术领域
本发明涉及网络技术领域,特别涉及一种调用堆栈关系获取方法及装置。
背景技术
JavaScript函数的调用堆栈关系指JavaScript函数之间的调用关系。例如,A文件a函数调用了B文件b函数,B文件b函数调用了C文件c函数,则调用堆栈关系可以表示为:A:a->B:b->C:c。开发人员根据该JavaScript函数的调用堆栈关系,能够在缺乏相应的函数名和程序注释的情况下,阅读JavaScript代码。
一般地,在JavaScript代码发布前,采用JavaScript代码混淆技术对待发布JavaScript代码进行混淆,将待发布代码中的所有变量、函数、类的名称变为简短的英文字母代号,去除待发布代码中的冗余信息,使得混淆后代码与混淆前代码完成相同的功能,混淆后代码很难被反编译,实现了对JavaScript代码的保护。
由于混淆后代码缺乏相应的函数名和程序注释,使得开发人员无法阅读混淆后代码,不能获取混淆后代码的函数之间的调用关系,无法对混淆后代码进行测试。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种调用堆栈关系获取方法及装置。所述技术方案如下:
一方面,提供了一种调用堆栈关系获取方法,所述方法包括:
对于打开的每一个页面,记录所述页面所加载的多个代码文件;
对于所述页面中运行的多个代码文件中的每一个函数,在所述函数开始运行和结束运行时,至少获取所述函数的调用层次,所述函数的调用层次包括调用所述函数的函数名和所述函数调用的函数名中的至少一项;
根据所述多个代码文件中每个函数的调用层次,得到所述多个代码文件的调用堆栈关系。
另一方面,提供了一种调用堆栈关系获取装置,所述装置包括:
代码文件加载模块,用于对于打开的每一个页面,记录所述页面所加载的多个代码文件;
调用信息获取模块,用于对于所述页面中运行的多个代码文件中的每一个函数,在所述函数开始运行和结束运行时,至少获取所述函数的调用层次,所述函数的调用层次包括调用所述函数的函数名和所述函数调用的函数名中的至少一项;
调用堆栈关系获取模块,用于根据所述多个代码文件中每个函数的调用层次,得到所述多个代码文件的调用堆栈关系。
本发明实施例提供的技术方案带来的有益效果是:
在代码运行过程中,对于打开的每一个页面,通过记录该页面所加载的多个代码文件,并记录函数开始运行和结束运行时的调用层次,从而得到该页面中多个代码文件的调用堆栈关系,该调用堆栈关系可以直观显示该页面中多个代码文件的函数之间的逻辑调用关系,使得开发人员在缺乏相应的函数名和程序注释的情况下,也可以对代码进行测试。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的调用堆栈关系获取方法流程图;
图2是本发明实施例提供的调用堆栈关系获取方法流程图;
图3是本发明实施例提供的二元组获取示意图;
图4是本发明实施例提供的调用堆栈关系获取示意图;
图5是本发明实施例提供的调用堆栈关系应用示意图;
图6是本发明实施例提供的调用堆栈关系应用示意图;
图7是本发明实施例提供的调用堆栈关系获取装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
图1是本发明实施例提供的调用堆栈关系获取流程图。参见图1,该实施例包括:
101、对于打开的每一个页面,记录该页面所加载的多个代码文件。
102、对于该页面中运行的多个代码文件中的每一个函数,在该函数开始运行和结束运行时,至少获取该函数的调用层次,该函数的调用层次包括调用该函数的函数名和该函数调用的函数名中的至少一项。
103、根据该多个代码文件中每个函数的调用层次,得到该多个代码文件的调用堆栈关系。
本发明实施例提供的方法,在代码运行过程中,对于打开的每一个页面,通过记录该页面所加载的多个代码文件,并记录该页面中多个代码文件的每一个函数开始运行和结束运行时,函数的调用层次,从而得到该页面中多个代码文件的调用堆栈关系,该调用堆栈关系可以直观显示该页面中多个代码文件的函数之间的逻辑调用关系,使得开发人员在缺乏相应的函数名和程序注释的情况下,也可以对代码进行测试。
可选地,对于该页面中运行的多个代码文件中的每一个函数,在该函数开始运行和结束运行时,至少获取该函数的调用层次包括:
对于该页面中运行的多个代码文件中的每一个函数,当该函数开始运行时,至少获取调用该函数的函数名;
当该函数结束运行时,至少获取该函数调用的函数名。
可选地,该方法还包括:
对于该页面中运行的多个代码文件中的每一个函数,在该函数开始运行和结束运行时,获取该函数的行号。
可选地,该方法还包括:
确定变化的行号对应的函数;
根据该多个代码文件的调用堆栈关系,确定该函数在输出的调用堆栈关系中所对应的部分;
根据该函数在输出的调用堆栈关系中所对应的部分,确定当前行号变化所影响的功能。
可选地,根据该函数在输出的调用堆栈关系中所对应的部分,确定当前行号变化所影响的功能包括:
根据该函数在输出的调用堆栈关系中所对应的部分,确定该调用堆栈关系中所对应部分对应的代码文件;
根据该代码文件,确定加载该代码文件的页面对应的功能。
可选地,该方法还包括:
对该多个代码文件进行混淆后,得到发布代码;
根据该多个代码文件的调用堆栈关系,确定该发布代码中函数之间的调用关系;
根据该发布代码中函数之间的调用关系,对该发布代码进行调整。
图2是本发明实施例提供的调用堆栈关系获取方法流程图。本发明实施例以页面加载多个javascript文件为例进行说明,参见图2,该实施例包括:
201、对于打开的每一个页面,测试设备记录该页面所加载的多个代码文件。
其中,一个页面可以加载多个代码文件,每个代码文件包括多个函数,每个代码文件对应页面的部分功能。每个页面打开时,测试设备会加载多个代码文件,当接收到页面中某个功能的执行指令时,测试设备可以运行与该功能对应的代码文件中的函数,实现该功能。
在本发明实施例中,对代码进行测试或更新等处理时,对于打开的每一个页面,记录该页面所加载的多个代码文件。其中,该代码可以是用JavaScript语言编写的代码,也可以是C语言编写的代码,本发明实施例不作具体限定。
在本发明实施例中,测试设备记录该页面所加载的多个代码文件的方式可以是为代码分配一个全局变量,该全局变量命名可以为window.jsarray,该全局变量window.jsarray用于记录当前页面加载的所有代码文件。
以如下javascript代码为例,具体代码如下:
其中,javascript代码中处于与“//”同一行且位于“//”之后的内容时javascript代码中的注释,“/home/XXspace/XXMail/js_obfuscator/current_name.js”是加载的代码文件的地址。
202、对于该页面中运行的多个代码文件中的每一个函数,当该函数开始运行和结束运行时,测试设备至少获取该函数的调用层次,该函数的调用层次包括调用该函数的函数名和该函数调用的函数名中的至少一项。
页面中运行的多个代码文件中的函数之间存在调用关系。以函数A和函数B为例,函数之间的调用关系可以是A函数结束运行时调用B函数,也可以是A函数运行过程中调用B函数。
在本发明实施例中,对于该页面中运行的多个代码中的每一个函数,当该函数开始运行时,至少获取调用该函数的函数名,当该函数结束运行,至少获取该函数调用的函数名。
例如,以A文件a函数、B文件b函数和C文件c函数为例,假设A文件a函数调用B文件b函数,则a函数为调用的第一层,b函数为调用的第二层;B文件b函数调用C文件c函数,则在这个调用中,c函数为调用的第三层。当测试设备运行至B文件b函数时,在B文件b函数开始运行时,获取调用B文件b函数的A文件a函数的函数名;在B文件b函数结束运行时,获取B文件b函数调用的C文件c函数的函数名。
进一步可选地,对于该页面中运行的多个代码文件中的每一个函数,在该函数开始运行和结束运行时,测试设备在获取该函数的调用层次的基础上,还可以获取该函数的运行时间,也即是,在该函数开始运行时,获取该函数开始运行的时间,在该函数结束运行时,获取该函数结束运行的时间,以便后续在代码测试数据量较大时,可以根据函数的运行时间,区分不同时段的测试过程。
进一步可选地,对于该页面中运行的多个代码文件中的每一个函数,在该函数开始运行和结束运行时,测试设备在获取该函数的调用层次的基础上,还可以获取该函数的行号,也即是,在该函数开始运行时,获取该函数开始运行的行号,在该函数结束运行时,获取该函数结束运行的行号,以便后续根据该行号,可以方便定位函数在代码文件中的范围。
在本发明实施例中,测试设备获取该函数的调用层次的方式可以是为代码分配另一个全局变量,该全局变量命名为window.jslevel,该全局变量window.jslevel用于记录函数的调用层次。
以如下javascript代码为例,具体代码如下:
其中,“/**debug-on**/”指代码测试开始,/**debug-off**/指代码测试结束;函数console.log()用于输出函数的调用层次和行号。
203、将该多个代码文件中每个函数的调用层次作为二元组的元素,测试设备得到该多个代码文件的调用二元组。
在本发明实施例中,在每个函数开始运行和结束运行时,测试设备收集每个函数的调用层次、运行时间以及行号等,根据调用层次,得到该多个代码文件的调用二元组,该调用二元组以每个函数的调用层次作为元素,该二元组的格式可以为(文件A::函数A->文件B::函数B)。例如,假设测试设备收集的函数调用层次为,文件A的函数A调用了文件B的函数B;文件B的函数B调用了文件C的函数C,则该调用二元组可以为(文件A::函数A->文件B::函数B),(文件B::函数B->文件C::函数C)。
需要说明的是,本发明实施例是将函数的调用层次、运行时间以及行号等信息存储在本端,由该测试设备根据存储的调用层次,得到该多个代码文件的调用二元组。事实上,在本发明的另一实施例中,测试设备也可以将函数的调用层次、运行时间以及行号等信息上报至服务器,由服务器根据上报的调用层次,得到该多个代码文件的调用二元组。也即是,测试设备可以通过CGI(Common Gateway Interface,通用网关界面)在每个函数开始运行和结束运行时,将函数的调用层次、运行时间以及行号等上报至服务器,使得服务器根据上报的调用层次,得到该多个代码文件的调用二元组,该调用二元组以每个函数的调用层次作为元素。
如图3所示的测试设备根据上报日志得到二元组的示意图。在图3中,左边是原始日志,测试设备将原始日志按照会话ID(Identity,身份标识)(sid)分组,并按照函数在整个运行过程中的运行次序(seq)排序,得到中间调用层次结构,也即是e1、e2、e3为函数开始运行的次序,而l3、l2、l1函数结束运行的次序,根据函数之间的调用关系得到二元组。其中,会话ID用于唯一标识一个测试过程,每打开一次浏览器就建立一个会话。
URL(Uniform Resource Locator,统一资源定位符)是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址;CGI在物理上是一段程序,运行在服务器上,提供同客户端页面的接口。每个页面对应一个URL,在URL加载的多个代码文件中每个函数运行过程中,测试设备通过CGI将函数的调用层次、运行时间以及行号等上报至服务器,根据记录的每个页面所加载的多个代码文件,可以确定该多个代码文件与CGI之间的映射关系。
204、按照函数在整个测试过程中的运行次序,测试设备将该调用二元组进行排序,得到该多个代码文件的调用序列。
在本发明实施中,测试设备是按照时间先后顺序,运行多个代码文件中的函数,则按照函数在整个测试过程中的运行次序,测试设备将该调用二元组进行排序,即可得到该多个代码文件的调用序列。例如,假设二元组为(文件A::函数A->文件B::函数B),(文件B::函数B->文件C::函数C),(文件C::函数C->文件D::函数D),文件A::函数A在整个测试过程中第1个运行,文件B::函数B在整个测试过程中第2个运行,文件C::函数C在整个测试过程中第3个运行,则该多个代码文件的调用序列为文件A::函数A->文件B::函数B->文件C::函数C->文件D::函数D。
当运行某页面的多个代码文件中的每个函数时,测试设备收集每个函数开始运行和结束运行的会话ID、数据来源的用户号码、函数在整个运行过程中的运行次序和运行时间等信息,该测试设备根据收集的该页面的多个代码文件中所有函数运行过程中的会话ID、数据来源的用户号码、函数在整个运行过程中的运行次序和运行时间等信息,得到该页面的调用序列。因此,可以如图4所示的形式在调用堆栈中对应存储该页面的多个代码文件中所有函数运行过程中的会话ID、数据来源的用户号码、函数在整个运行过程中的运行次序和运行时间等信息、该页面的URL和该页面的调用序列。
需要说明的是,步骤203-步骤204是根据该多个代码文件中每一个函数的调用层次,得到该多个代码文件的调用堆栈关系的过程。本发明实施例以调用序列的形式表示多个代码文件的调用堆栈关系,在本发明的另一实施例中也可以图表的形式表示多个代码文件的调用堆栈关系,本发明实施例不做具体限定。
本发明实施例提供的方法,在代码运行过程中,对于打开的每一个页面,通过记录该页面所加载的多个代码文件,并记录该页面中多个代码文件的每一个函数开始运行和结束运行时,函数的调用层次,从而得到该页面中多个代码文件的调用堆栈关系,该调用堆栈关系可以直观显示该页面中多个代码文件的函数之间的逻辑调用关系,使得开发人员在缺乏相应的函数名和程序注释的情况下,也可以对代码进行测试。
利用本发明实施例提供的调用堆栈关系获取方法,可以实现对代码的控制,代码可以有以下三种类型:
a、开发代码(开发原始代码);
该开发代码是未混淆的,包含调试信息、注释信息、空格符以及换行符等。
b、测试代码(供开发、测试使用)
该测试代码可以是混淆后的,不包含调试信息、注释信息。该测试代码也可以是未混淆的,包含调试信息、注释信息、空格符以及换行符等。
c、发布代码(发布给用户)。
该发布代码是混淆的,不包含调试信息的、注释信息,可以不包含空格符和换行符,也可以包含空格符和换行符。
另外,利用本发明实施例提供的调用堆栈关系获取方法,如图5所示,可以实现以下两种操作:
for_test操作:对代码进行静态语法分析,在函数入口、出口***代码,解析出函数调用堆栈关系,对代码做混淆,使得测试可以在测试代码的基础上进行测试,收集调用序列;
for_release操作:删除代码里面的调试信息,确保代码一定是混淆的,删除代码中的注释,空格符、换行符等,起到压缩的作用,确保发布出去代码的安全性。
根据上述两个操作,从代码开发阶段、测试阶段到发布阶段,开发人员可以完全控制代码,可以做的选择包括:
1、对开发的代码直接做for_release操作;
2、对开发的代码先做for_test操作,不做混淆,代码测试通过后,做for_release操作;
3、对开发的代码先做for_test操作,做混淆,在混淆的代码上做测试,然后做for_release操作。
为了进一步描述该发明实施例的效果,下面以具体实例进行说明,详述如下:
在代码发布之前,当对代码进行更新时,更新后的代码和已发布版本的代码在行号上会发生变化,因此,通过比较更新后的代码和已发布版本的代码,可以确定变化的行号,该行号变化代码对应的函数也相应改变,则加载包含该函数的代码文件的页面的功能也会改变,利用本发明实施例得到的多个代码文件的调用堆栈关系,可以准确定位当前行号变化所影响的功能。
如图6所示,测试设备的处理过程包括:确定变化的行号对应的函数;根据该多个代码文件的调用堆栈关系,确定该函数在输出的调用堆栈关系中所对应的部分;根据该函数在输出的调用堆栈关系中所对应的部分,确定当前行号变化所影响的功能。具体地,测试设备对代码进行测试或更新等处理时,测试设备根据收集的函数运行开始和运行结束的行号,确定变化的行号对应的函数,该变化的行号对应的函数可能会被多个代码文件调用,则根据多个代码文件的调用堆栈关系,确定该变化的行号对应的函数在哪些调用堆栈关系中出现,进而确定调用堆栈关系中所对应的代码文件,根据记录的每个页面加载的代码文件,可以确定加载该代码文件的页面,进而定位到加载该代码文件的页面对应功能。
图7是本发明实施例提供的调用堆栈关系获取装置结构示意图。参见图3,该装置包括:代码文件加载模块701、调用信息获取模块702和调用堆栈关系获取模块703。其中:
代码文件加载模块701用于对于打开的每一个页面,记录该页面所加载的多个代码文件;代码文件加载模块701与调用信息获取模块702连接,调用信息获取模块702用于对于该页面中运行的多个代码文件中的每一个函数,在该函数开始运行和结束运行时,至少获取该函数的调用层次,该函数的调用层次包括调用该函数的函数名和该函数调用的函数名中的至少一项;调用信息获取模块702与调用堆栈关系获取模块703连接,调用堆栈关系获取模块703用于根据该多个代码文件中每个函数的调用层次,得到该多个代码文件的调用堆栈关系。
可选地,该调用信息获取模块702用于对于该页面中运行的多个代码文件中的每一个函数,当该函数开始运行时,至少获取调用该函数的函数名;当该函数结束运行时,至少获取该函数调用的函数名。
可选地,该装置还包括:函数行号获取模块,用于对于该页面中运行的多个代码文件中的每一个函数,在该函数开始运行和结束运行时,获取该函数的行号。
可选地,该装置还包括:函数确定模块,用于确定变化的行号对应的函数;调用堆栈关系对于部分确定模块,用于根据该多个代码文件的调用堆栈关系,确定该函数在输出的调用堆栈关系中所对应的部分;影响功能确定模块,用于根据该函数在输出的调用堆栈关系中所对应的部分,确定当前行号变化所影响的功能。可选地,该影响功能确定模块还用于根据该函数在输出的调用堆栈关系中所对应的部分,确定该调用堆栈关系中所对应部分对应的代码文件;根据该代码文件,确定加载该代码文件的页面对应的功能。
可选地,该装置还包括:发布代码获取模块,用于对该多个代码文件进行混淆后,得到发布代码;函数调用关系确定模块,用于根据该多个代码文件的调用堆栈关系,确定该发布代码中函数之间的调用关系;发布代码调整模块,用于根据该发布代码中函数之间的调用关系,对该发布代码进行调整。
本发明实施例提供的装置,在代码运行过程中,对于打开的每一个页面,通过记录该页面所加载的多个代码文件,并记录该页面中多个代码文件的每一个函数开始运行和结束运行时,函数的调用层次,从而得到该页面中多个代码文件的调用堆栈关系,该调用堆栈关系可以直观显示该页面中多个代码文件的函数之间的逻辑调用关系,使得开发人员在缺乏相应的函数名和程序注释的情况下,也可以对代码进行测试。
需要说明的是:上述实施例提供的调用堆栈关系获取装置在调用堆栈关系获取时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的调用堆栈关系获取装置与调用堆栈关系获取方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种调用堆栈关系获取方法,其特征在于,所述方法包括:
对于打开的每一个页面,记录所述页面所加载的多个代码文件;
对于所述页面中运行的多个代码文件中的每一个函数,在所述函数开始运行和结束运行时,至少获取所述函数的调用层次,所述函数的调用层次包括调用所述函数的函数名和所述函数调用的函数名中的至少一项;
根据所述多个代码文件中每个函数的调用层次,得到所述多个代码文件的调用堆栈关系;
对于所述页面中运行的多个代码文件中的每一个函数,在所述函数开始运行和结束运行时,至少获取所述函数的调用层次包括:
对于所述页面中运行的多个代码文件中的每一个函数,当所述函数开始运行时,至少获取调用所述函数的函数名;当所述函数结束运行时,至少获取所述函数调用的函数名;
所述方法还包括:
对于所述页面中运行的多个代码文件中的每一个函数,在所述函数开始运行和结束运行时,获取所述函数的行号;确定变化的行号对应的函数;
根据所述多个代码文件的调用堆栈关系,确定所述函数在输出的调用堆栈关系中所对应的部分;根据所述函数在输出的调用堆栈关系中所对应的部分,确定当前行号变化所影响的功能。
2.根据权利要求1所述的方法,其特征在于,根据所述函数在输出的调用堆栈关系中所对应的部分,确定当前行号变化所影响的功能包括:
根据所述函数在输出的调用堆栈关系中所对应的部分,确定所述调用堆栈关系中所对应部分对应的代码文件;
根据所述代码文件,确定加载所述代码文件的页面对应的功能。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
对所述多个代码文件进行混淆后,得到发布代码;
根据所述多个代码文件的调用堆栈关系,确定所述发布代码中函数之间的调用关系;
根据所述发布代码中函数之间的调用关系,对所述发布代码进行调整。
4.一种调用堆栈关系获取装置,其特征在于,所述装置包括:
代码文件加载模块,用于对于打开的每一个页面,记录所述页面所加载的多个代码文件;
调用信息获取模块,用于对于所述页面中运行的多个代码文件中的每一个函数,在所述函数开始运行和结束运行时,至少获取所述函数的调用层次,所述函数的调用层次包括调用所述函数的函数名和所述函数调用的函数名中的至少一项;
调用堆栈关系获取模块,用于根据所述多个代码文件中每个函数的调用层次,得到所述多个代码文件的调用堆栈关系;
所述调用信息获取模块用于对于所述页面中运行的多个代码文件中的每一个函数,当所述函数开始运行时,至少获取调用所述函数的函数名;当所述函数结束运行时,至少获取所述函数调用的函数名;
所述装置还包括:
函数行号获取模块,用于对于所述页面中运行的多个代码文件中的每一个函数,在所述函数开始运行和结束运行时,获取所述函数的行号;
函数确定模块,用于确定变化的行号对应的函数;
调用堆栈关系对于部分确定模块,用于根据所述多个代码文件的调用堆栈关系,确定所述函数在输出的调用堆栈关系中所对应的部分;
影响功能确定模块,用于根据所述函数在输出的调用堆栈关系中所对应的部分,确定当前行号变化所影响的功能。
5.根据权利要求4所述的装置,其特征在于,所述影响功能确定模块还用于根据所述函数在输出的调用堆栈关系中所对应的部分,确定所述调用堆栈关系中所对应部分对应的代码文件;根据所述代码文件,确定加载所述代码文件的页面对应的功能。
6.根据权利要求4所述的装置,其特征在于,所述装置还包括:
发布代码获取模块,用于对所述多个代码文件进行混淆后,得到发布代码;
函数调用关系确定模块,用于根据所述多个代码文件的调用堆栈关系,确定所述发布代码中函数之间的调用关系;
发布代码调整模块,用于根据所述发布代码中函数之间的调用关系,对所述发布代码进行调整。
CN201410084414.7A 2014-03-07 2014-03-07 调用堆栈关系获取方法及装置 Active CN104899016B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201410084414.7A CN104899016B (zh) 2014-03-07 2014-03-07 调用堆栈关系获取方法及装置
PCT/CN2015/073562 WO2015131804A1 (en) 2014-03-07 2015-03-03 Call stack relationship acquiring method and apparatus
US15/173,118 US20160283357A1 (en) 2014-03-07 2016-06-03 Call stack relationship acquiring method and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410084414.7A CN104899016B (zh) 2014-03-07 2014-03-07 调用堆栈关系获取方法及装置

Publications (2)

Publication Number Publication Date
CN104899016A CN104899016A (zh) 2015-09-09
CN104899016B true CN104899016B (zh) 2018-10-09

Family

ID=54031695

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410084414.7A Active CN104899016B (zh) 2014-03-07 2014-03-07 调用堆栈关系获取方法及装置

Country Status (3)

Country Link
US (1) US20160283357A1 (zh)
CN (1) CN104899016B (zh)
WO (1) WO2015131804A1 (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107402879B (zh) * 2016-05-20 2020-11-06 阿里巴巴集团控股有限公司 确定应用之间调用关系的方法及装置
CN110008657B (zh) * 2018-01-05 2021-07-23 武汉斗鱼网络科技有限公司 一种保护网页代码的方法、存储介质、电子设备和***
CN108984409B (zh) * 2018-07-13 2021-10-22 郑州云海信息技术有限公司 一种函数定位的方法及装置
CN109522209A (zh) * 2018-09-29 2019-03-26 中国平安人寿保险股份有限公司 日志堆栈信息分析方法及装置、计算机装置及存储介质
CN110413352B (zh) * 2019-07-15 2020-11-03 北京天眼查科技有限公司 应用组件的调用方法和装置
CN111382076B (zh) * 2020-03-10 2023-04-25 抖音视界有限公司 应用程序的测试方法、装置、电子设备及计算机存储介质
CN111552613A (zh) * 2020-04-26 2020-08-18 北京字节跳动网络技术有限公司 线程超时的处理方法、装置以及电子设备
US11422925B2 (en) * 2020-09-22 2022-08-23 Sap Se Vendor assisted customer individualized testing
CN112181374B (zh) * 2020-09-25 2024-03-12 广州力挚网络科技有限公司 一种数据整合方法、装置、电子设备及存储介质
CN113360407B (zh) * 2021-07-02 2023-10-13 北京百度网讯科技有限公司 函数的定位方法、装置、电子设备及可读存储介质
CN113419795B (zh) * 2021-07-21 2022-05-03 网易(杭州)网络有限公司 调用关系的展示方法、装置、计算机设备及存储介质
CN116257457A (zh) * 2023-05-15 2023-06-13 成都赛力斯科技有限公司 函数执行情况获取方法、装置、电子设备及可读存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101916340A (zh) * 2010-07-14 2010-12-15 南京大学 一种PHP语言Web应用中不可信变量静态检测方法
CN102819698A (zh) * 2011-12-27 2012-12-12 腾讯科技(深圳)有限公司 检测网页中恶意代码的方法及装置
CN102831060A (zh) * 2012-08-24 2012-12-19 东南大学 一种基于修改影响分析的部件软件回归测试用例更新方法
CN103425565A (zh) * 2012-05-16 2013-12-04 腾讯科技(深圳)有限公司 获取程序运行信息的方法及***

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040148594A1 (en) * 2003-01-24 2004-07-29 Stephen Williams Acquiring call-stack information
US20050071816A1 (en) * 2003-09-30 2005-03-31 International Business Machines Corporation Method and apparatus to autonomically count instruction execution for applications
CN100576172C (zh) * 2008-05-27 2009-12-30 华耀环宇科技(北京)有限公司 一种通过分析代码变化确定功能点变化的方法
CN101645119B (zh) * 2008-08-07 2012-05-23 中国科学院软件研究所 一种基于虚拟硬件环境的恶意代码自动分析方法及***
CN101661425B (zh) * 2008-08-26 2012-03-21 国际商业机器公司 测试覆盖分析方法和装置
US8495606B2 (en) * 2008-11-14 2013-07-23 Oracle America, Inc. Redundant exception handling code removal
CN102053906A (zh) * 2009-10-30 2011-05-11 国际商业机器公司 用于收集程序运行时信息的***和方法
KR101296716B1 (ko) * 2011-12-14 2013-08-20 한국인터넷진흥원 피디에프 문서형 악성코드 탐지 시스템 및 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101916340A (zh) * 2010-07-14 2010-12-15 南京大学 一种PHP语言Web应用中不可信变量静态检测方法
CN102819698A (zh) * 2011-12-27 2012-12-12 腾讯科技(深圳)有限公司 检测网页中恶意代码的方法及装置
CN103425565A (zh) * 2012-05-16 2013-12-04 腾讯科技(深圳)有限公司 获取程序运行信息的方法及***
CN102831060A (zh) * 2012-08-24 2012-12-19 东南大学 一种基于修改影响分析的部件软件回归测试用例更新方法

Also Published As

Publication number Publication date
WO2015131804A1 (en) 2015-09-11
US20160283357A1 (en) 2016-09-29
CN104899016A (zh) 2015-09-09

Similar Documents

Publication Publication Date Title
CN104899016B (zh) 调用堆栈关系获取方法及装置
CN106294134B (zh) 代码的崩溃定位方法及装置
CN104407980B (zh) 移动应用自动化测试装置和方法
US20190243848A1 (en) Generating a structured document guiding view
CN103995715B (zh) 应用程序的修复方法、装置及服务器
US20130117855A1 (en) Apparatus for automatically inspecting security of applications and method thereof
CN110286917A (zh) 文件打包方法、装置、设备及存储介质
CN107526676B (zh) 一种跨***测试方法及装置
CN104268473B (zh) 应用程序检测方法和装置
CN111552633A (zh) 接口的异常调用测试方法、装置、计算机设备及存储介质
CN107451112B (zh) 表格工具数据检查方法、装置、终端设备及存储介质
CN109858021B (zh) 业务问题统计方法、装置、计算机设备及其存储介质
CN113688288B (zh) 数据关联分析方法、装置、计算机设备和存储介质
CN110955608B (zh) 测试数据处理方法、装置、计算机设备和存储介质
CN106569860A (zh) 一种应用管理方法及终端
CN104320793B (zh) 一种手机短信自动化测试方法及***
CN108415998A (zh) 应用依赖关系更新方法、终端、设备及存储介质
CN108664471A (zh) 文字识别纠错方法、装置、设备及计算机可读存储介质
CN107807830A (zh) 基于集群的医疗软件更新方法及服务器
CN110032616A (zh) 一种文档阅读情况的采集方法及装置
CN113987393A (zh) 一种网页操作记录器、***、装置及方法
CN109902030A (zh) 一种手机应用程序自动化测试步骤记录与回放的方法
CN104063306B (zh) 智能终端软件测试中的自动登录方法、装置和***
CN110889116A (zh) 一种广告拦截方法、装置及电子设备
CN106559554A (zh) 一种通信处理方法、装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20190729

Address after: Shenzhen Futian District City, Guangdong province 518000 Zhenxing Road, SEG Science Park 2 East Room 403

Co-patentee after: Tencent cloud computing (Beijing) limited liability company

Patentee after: Tencent Technology (Shenzhen) Co., Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518000 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: Tencent Technology (Shenzhen) Co., Ltd.

TR01 Transfer of patent right