CN108595319A - 函数选取方法和服务器 - Google Patents

函数选取方法和服务器 Download PDF

Info

Publication number
CN108595319A
CN108595319A CN201810278922.7A CN201810278922A CN108595319A CN 108595319 A CN108595319 A CN 108595319A CN 201810278922 A CN201810278922 A CN 201810278922A CN 108595319 A CN108595319 A CN 108595319A
Authority
CN
China
Prior art keywords
function
identification
application program
function call
call chain
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
CN201810278922.7A
Other languages
English (en)
Other versions
CN108595319B (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.)
Advanced New Technologies Co Ltd
Advantageous New Technologies Co Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201810278922.7A priority Critical patent/CN108595319B/zh
Publication of CN108595319A publication Critical patent/CN108595319A/zh
Priority to TW108101178A priority patent/TWI684916B/zh
Priority to PCT/CN2019/074331 priority patent/WO2019184597A1/zh
Application granted granted Critical
Publication of CN108595319B publication Critical patent/CN108595319B/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/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/81Threshold

Landscapes

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

Abstract

本说明书实施例提供一种函数选取方法和服务器。所述方法包括:运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;所述运行状态信息包括线程标识对应的函数调用信息;所述函数调用信息包括函数标识以及函数标识对应的时间戳;分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;每个所述函数调用链包括至少一个函数标识;从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;函数标识对应的运行时间基于该函数标识对应的时间戳得到。

Description

函数选取方法和服务器
技术领域
本说明书实施例涉及计算机技术领域,特别涉及一种函数选取方法和服务器。
背景技术
在应用程序的生命周期中,当一个应用程序自身发生代码升级、版本迭代或者漏洞修复等变化时,或者,与该应用程序相关联的其它应用程序发生代码升级、版本迭代或者漏洞修复等变化时,通常需要定位出该应用程序中的耗时函数,以便对该应用程序的响应时间进行优化。所述耗时函数可以为运行时间较长的函数。所述响应时间可以包括启动时间、执行某一功能的时间等。
在相关技术中,可以获取应用程序的跟踪文件(trace文件),并可以采用人工的方式来分析所述跟踪文件以从中识别出耗时函数。例如开发人员可以借助TraceView(一种测试应用程序性能的工具)来分析所述跟踪文件以从中识别出耗时函数。但是,采用人工的方式来识别耗时函数,效率和准确性较低,难以满足实际的需求。
发明内容
本说明书实施例的目的是提供一种函数选取方法和服务器,以提高耗时函数识别的效率和准确性。
为实现上述目的,本说明书实施例提供一种函数选取方法,包括:运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;所述运行状态信息包括线程标识对应的函数调用信息;所述函数调用信息包括函数标识以及函数标识对应的时间戳;分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;每个所述函数调用链包括至少一个函数标识;从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;函数标识对应的运行时间基于该函数标识对应的时间戳得到。
为实现上述目的,本说明书实施例提供一种服务器,包括:运行单元,用于运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;所述运行状态信息包括线程标识对应的函数调用信息;所述函数调用信息包括函数标识以及函数标识对应的时间戳;分析单元,用于分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;每个所述函数调用链包括至少一个函数标识;选取单元,用于从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;函数标识对应的运行时间基于该函数标识对应的时间戳得到。
为实现上述目的,本说明书实施例提供一种服务器,包括:存储器,用于存储计算机指令;处理器,用于执行所述计算机指令实现以下步骤:运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;所述运行状态信息包括线程标识对应的函数调用信息;所述函数调用信息包括函数标识以及函数标识对应的时间戳;分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;每个所述函数调用链包括至少一个函数标识;从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;函数标识对应的运行时间基于该函数标识对应的时间戳得到。
由以上本说明书实施例提供的技术方案可见,本说明书实施例中,持续集成服务器可以运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;可以分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;可以从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识。本说明书实施例中,所述持续集成服务器可以分析应用程序中预设线程标识对应的函数调用信息,得到至少一个函数调用链;可以基于预设时间阈值从所述至少一个函数调用链中过滤出耗时函数。这样,所述持续集成服务器可以提高耗时函数识别的效率和准确性。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书实施例一种函数选取系统的示意图;
图2为本说明书实施例一种函数选取方法的流程图;
图3为本说明书实施例一种服务器的功能结构图;
图4为本说明书实施例一种服务器的功能结构图。
具体实施方式
下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
请参阅图1。本说明书实施例提供一种函数选取系统。所述函数选取系统可以包括版本服务器、持续集成服务器(Continuous Integration Server)和至少一个终端设备。
在本实施例中,所述终端设备可以为开发人员所使用的终端设备,例如可以为个人计算机(PC机)、或服务器等。开发人员可以使用所述终端设备来编辑应用程序的源代码。所述版本服务器可以用于存储并管理应用程序各个版本的源代码。例如,所述版本服务器可以运行有SVN(Subversion)、CVS(Concurrent Version System)等应用程序版本控制系统;可以基于所述应用程序版本控制系统来管理应用程序各个版本的源代码。所述持续集成服务器可以用于对应用程序的源代码进行编译和测试。
在本实施例中,所述终端设备可以向所述版本服务器上传应用程序的源代码。所述版本服务器可以接收并存储应用程序的源代码。所述持续集成服务器可以从所述版本服务器中获取应用程序的源代码;可以编译所述应用程序的源代码,得到所述应用程序;可以对所述应用程序的性能进行测试,得到测试结果;可以向所述终端设备发送所述测试结果。所述终端设备可以接收所述测试结果。这样,通过所述测试结果,开发人员可以从所述应用程序的源代码中获取影响应用程序性能的函数。这里所述性能例如可以为启动时间、或耗电量等;所述函数可以理解为能够实现一定功能的计算机程序指令集合。
请参阅图2。本说明书实施例提供一种函数选取方法。所述函数选取方法以持续集成服务器为执行主体,可以包括以下步骤。
步骤S10:运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息。
在本实施例中,所述应用程序可以为用于完成一项或多项工作的计算机程序。所述应用程序具体可以为任意类型的应用程序,例如可以为支付类型的应用程序、视频播放类型的应用程序、或图像处理类型的应用程序等。
在本实施例中,在应用程序的开发阶段,开发人员可以在所述应用程序的源代码中注入调试代码,以便在运行所述应用程序时能够得到所述应用程序的运行状态信息。在后续过程中通过分析所述运行状态信息,便可以发现所述应用程序源代码中的缺陷。所述调试代码可以包括调试函数。所述调试函数可以用于生成运行状态信息。所述调试函数例如可以包括Debug.startMethodTracing、和Debug.stopMethodTracing等。当然,所述调试代码还可以包括其它的功能函数,例如检测函数。所述检测函数可以用于在检测到满足特定条件时触发所述调试函数,例如在检测到根目录存在某一文件时触发所述调试函数。
在本实施例中,所述运行状态信息可以包括应用程序的至少一个线程的线程标识、以及线程标识对应的函数调用信息等。所述线程标识可以用于标识线程,例如可以为线程的名称、或编号等。所述函数调用信息可以用于描述线程标识标识的线程所调用的函数。所述函数调用信息具体可以包括至少一个函数标识、以及函数标识对应的时间戳等。所述函数标识可以用于标识函数,例如可以为函数的名称、或编号等。所述时间戳可以包括进入时间戳和退出时间戳。所述进入时间戳可以用于表示函数标识标识的函数的进入时刻;所述退出时间戳可以用于表示函数标识标识的函数的退出时刻。基于所述进入时间戳和所述退出时间戳能够计算出函数标识标识的函数的运行时间。需要说明的是,鉴于一个线程可以一次或多次调用一个函数,所述函数调用信息中的函数标识可以对应一对或多对时间戳,每对时间戳可以包括一个进入时间戳和一个退出时间戳。
在本实施例的一个场景示例中,所述持续集成服务器可以运行源代码中包括调试代码的应用程序,进而得到跟踪文件(trace文件)。所述跟踪文件可以包括所述应用程序的运行状态信息。具体地,例如,所述跟踪文件可以包括:
Trace(threadID action usecs class.method):
……
12693ent 16752.....android.os.Handler.dispatchMessage;
……
12622ent 38450........android.os.MessageQueue.next;
……
12693xit 18976.....android.os.Handler.dispatchMessage;
……
12622xit 49559........android.os.MessageQueue.next;
……。
上述跟踪文件中;
threadID表示线程标识。例如,线程标识12622用于标识线程main;线程标识12693用于标识线程OnLineMonitor。
class.method表示函数标识。例如,android.os.Handler.dispatchMessage和android.os.MessageQueue.next分别为函数标识。
Action表示动作。例如,Action可以包括ent和xit。Ent表示进入函数;xit表示退出函数。
usecs表示时间戳。例如,16752为函数标识android.os.Handler.dispatchMessage对应的进入时间戳;18976为函数标识android.os.Handler.dispatchMessage对应的退出时间戳。
在本实施例的一个实施方式中,考虑到开发人员通过在应用程序源代码的不同位置注入调试代码,便可以得到所述应用程序在不同运行阶段的运行状态信息。例如,开发人员通过在应用程序源代码的启动代码处注入调试代码,便可以得到所述应用程序在启动阶段的运行状态信息。所述启动代码可以为应用程序在启动阶段执行的代码。如此,所述运行状态信息可以包括所述应用程序在预设运行阶段的运行状态信息。所述预设运行阶段可以包括启动阶段。当然,所述预设运行阶段还可以包括其它阶段,例如执行某一功能的阶段等。
在本实施例中,所述持续集成服务器可以接收版本服务器发来的应用程序的源代码,所述应用程序的源代码中可以包括调试代码;可以基于所述应用程序的源代码,生成所述应用程序;可以运行所述应用程序,得到所述应用程序的运行状态信息。具体地,所述持续集成服务器可以编译所述应用程序的源代码,得到所述应用程序。所述版本服务器可以每间隔预设时间周期,向所述持续集成服务器发送自身存储的所述应用程序最新版本的源代码。所述预设时间周期可以根据实际需要灵活设定,例如可以为10天、25天、或30天等。或者,鉴于所述版本服务器通常认为接收到的源代码为所述应用程序最新版本的源代码,所述版本服务器可以在接到终端设备发来的应用程序的源代码后,存储并向所述持续集成服务器发送所述应用程序的源代码。
在本实施例的一个场景示例中,所述应用程序的源代码中可以包括调试代码。所述调试代码可以包括检测函数和调试函数。所述检测函数可以用于在检测到根目录存在某一文件后触发所述调试函数,所述文件例如可以为abc.txt。所述调试函数可以包括Debug.startMethodTracing、和Debug.stopMethodTracing。具体地,所述调试函数Debug.startMethodTracing可以位于所述应用程序源代码中启动代码的起始位置;所述调试函数Debug.stopMethodTracing可以位于所述应用程序源代码中启动代码的结束位置。
在本场景示例中,开发人员在编辑完成应用程序的源代码后,可以使用终端设备向版本服务器发送所述应用程序的源代码。所述版本服务器可以接收并存储所述应用程序的源代码;可以向所述持续集成服务器发送所述应用程序的源代码。所述持续集成服务器可以接收所述应用程序的源代码;可以编译所述应用程序的源代码,得到所述应用程序。所述持续集成服务器可以在根目录写入预先约定的文件(例如文件abc.txt)以便触发所述应用程序源代码中的检测函数;可以运行所述应用程序,得到跟踪文件。所述跟踪文件可以包括所述应用程序在启动阶段的运行状态信息。
步骤S12:分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链。
在本实施例中,所述预设线程标识的数量可以为一个或多个。所述预设线程标识标识的线程可以为所述应用程序的部分或全部线程。例如,所述预设线程标识标识的线程可以为所述应用程序的与启动相关的线程。具体地,例如,所述预设线程标识可以包括线程标识12622和12693,线程标识12622可以用于标识线程main,线程标识12693可以用于标识线程OnLineMonitor。所述函数调用链可以包括至少一个函数标识。每个所述函数调用链中的函数标识标识的函数间可以具有逐级调用关系。
在本实施例的一个场景示例中,某一函数调用链可以包括16个函数标识,具体包括:
上述函数调用链中的函数标识标识的函数间可以具有逐级调用关系。具体地,函数标识com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run标识的函数可以调用函数标识java.lang.reflect.Method.invoke标识的函数;函数标识java.lang.reflect.Method.invoke标识的函数可以调用函数标识android.app.ActivityThread.main标识的函数;依次类推,函数标识com.alibaba.fastjson.serializer.ListSerializer.write标识的函数可以调用函数标识com.alibaba.fastjson.serializer.MapSerializer.write标识的函数。
在本实施例中,针对每个预设线程,所述持续集成服务器可以获取该预设线程在所述运行状态信息中对应的函数调用信息;可以以获取的函数调用信息为目标函数调用信息;可以分析所述目标函数调用信息中各个函数标识标识的函数间的调用关系,得到该线程标识对应的至少一个函数调用链。
步骤S14:从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识。
在本实施例中,函数标识对应的运行时间可以基于该函数标识对应的时间戳得到。具体地,如前所述,函数标识对应的时间戳可以包括进入时间戳和退出时间戳。如此,针对所述至少一个函数调用链中的每个函数标识,所述持续集成服务器可以以该函数标识对应的退出时间戳表示的时刻为退出时刻;可以以该函数标识对应的进入时间戳表示的时刻为进入时刻;可以计算所述退出时刻和所述进入时刻之间的差值,作为该函数标识对应的运行时间。
在本实施例中,针对所述至少一个函数调用链中的每个函数调用链,所述持续集成服务器可以查找该函数调用链中是否包括运行时间大于或等于所述预设时间阈值的函数标识;在该函数调用链中包括运行时间大于或等于预设时间阈值的函数标识时,可以从该函数调用链中选取对应的运行时间大于或等于所述预设时间阈值的函数标识。所述预设时间阈值可以根据实际需要灵活设定,例如可以为100ms、150ms、或180ms等。
需要说明的是,鉴于一个函数标识可以对应一对或多对时间戳,一个函数标识可以对应一个或多个运行时间。在函数标识对应的一个或多个运行时间中的任意一个运行时间大于或等于所述预设时间阈值时,所述持续集成服务器便可以认为该函数标识对应的运行时间大于或等于所述预设时间阈值。
还需要说明的是,在一个函数的运行时间大于或等于所述预设时间阈值时,逐级调用直至该函数的其它各个函数的运行时间也均大于或等于所述预设时间阈值。如此,针对所述至少一个函数调用链中的每个函数调用链,所述持续集成服务器从该函数调用链中选取的函数标识能够形成该函数调用链的一个子函数调用链。
在本实施例的一个场景示例中,所述至少一个函数调用链可以包括函数调用链CA和CB。
在本场景示例中,函数调用链CA可以包括FA、FB、FC、FD、FE等5个函数标识。函数调用链CA中的函数标识标识的函数间可以具有逐级调用关系。具体地,函数标识FA标识的函数可以调用函数标识FB标识的函数;函数标识FB标识的函数可以调用函数标识FC标识的函数;依次类推,函数标识FD标识的函数可以调用函数标识FE标识的函数。在函数调用链CA中,函数标识FA、FB、FC对应的运行时间大于所述预设时间阈值。
在本场景示例中,函数调用链CB可以包括FC、FF、FG、FH、FI、FJ等6个函数标识。函数调用链CB中的函数标识标识的函数间可以具有逐级调用关系。具体地,函数标识FC标识的函数可以调用函数标识FF标识的函数;函数标识FF标识的函数可以调用函数标识FG标识的函数;依次类推,函数标识FI标识的函数可以调用函数标识FJ标识的函数。在函数调用链CB中,函数标识FC、FF、FG、FH对应的运行时间大于所述预设时间阈值。
在本场景示例中,所述持续集成服务器可以从函数调用链CA中选取函数标识FA、FB、FC。函数标识FA、FB、FC能够形成函数调用链CA的一个子函数调用链。所述持续集成服务器可以从函数调用链CB中选取函数标识FC、FF、FG、FH。函数标识FC、FF、FG、FH能够形成函数调用链CB的一个子函数调用链。
在本实施例的一个实施方式中,所述持续集成服务器还可以获取选取的函数标识所对应的运行时间。
在本实施方式的一个场景示例中,所述持续集成服务器选取的函数标识以及获取的运行时间可以如下:
其中,函数标识android.os.Handler.dispatchMessage、android.os.Handler.handleCallback、com.alipay.mobile.nebulacore.bridge.H5BridgeImpl$2.run、com.alipay.mobile.nebulacore.bridge.H5BridgeImpl.access$100、com.alipay.mobile.nebulacore.bridge.H5BridgeImpl.executeWeb、com.alibaba.fastjson.JSON.toJSONString、com.alibaba.fastjson.serializer.JSONSerializer.write(783ms)、com.alibaba.fastjson.serializer.MapSerializer.write、com.alibaba.fastjson.serializer.MapSerializer.write、com.alibaba.fastjson.serializer.ListSerializer.write、com.alibaba.fastjson.serializer.ListSerializer.write、以及com.alibaba.fastjson.serializer.MapSerializer.write能够形成一个子函数调用链。函数标识android.os.Handler.dispatchMessage、android.os.Handler.handleCallback、com.alipay.mobile.nebulacore.bridge.H5BridgeImpl$2.run、com.alipay.mobile.nebulacore.bridge.H5BridgeImpl.access$100、com.alipay.mobile.nebulacore.bridge.H5BridgeImpl.executeWeb、com.alibaba.fastjson.JSON.toJSONString、com.alibaba.fastjson.serializer.JSONSerializer.write、com.alibaba.fastjson.serializer.MapSerializer.write、com.alibaba.fastjson.serializer.MapSerializer.write、com.alibaba.fastjson.serializer.ListSerializer.write、com.alibaba.fastjson.serializer.ListSerializer.write、以及com.alibaba.fastjson.serializer.MapSerializer.write能够形成一个子函数调用链。
以下介绍本实施例中函数选取方法的一个具有应用场景。值得注意的是,本场景示例仅是为了更好地说明本实施例,并不构成对本实施例的不当限定。
在本场景示例中,在第一时刻,版本服务器可以向持续集成服务器发送应用程序第一版本的源代码。所述持续集成服务器可以接收所述应用程序第一版本的源代码,所述应用程序第一版本的源代码中可以包括调试代码;可以编译所述应用程序第一版本的源代码,得到所述应用程序的第一版本;可以运行所述应用程序的第一版本,得到所述应用程序的第一版本在启动阶段的运行状态信息;可以分析启动相关线程在所述运行状态信息对应的函数调用信息,得到至少一个函数调用链;可以从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;可以将选取的函数标识标识的函数作为耗时函数。
在本场景示例中,在后续的第二时刻,版本服务器可以向持续集成服务器发送应用程序第二版本的源代码。所述持续集成服务器可以接收所述应用程序第二版本的源代码,所述应用程序第二版本的源代码中可以包括调试代码;可以编译所述应用程序第二版本的源代码,得到所述应用程序的第二版本;可以运行所述应用程序的第二版本,得到所述应用程序的第二版本在启动阶段的运行状态信息;可以分析启动相关线程在所述运行状态信息对应的函数调用信息,得到至少一个函数调用链;可以从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;可以将选取的函数标识标识的函数作为耗时函数。
在本场景示例中,所述持续集成服务器可以将所述应用程序第一版本中的耗时函数与所述应用程序第二版本中的耗时函数进行比对;可以输出所述应用程序第二版本中新增加的耗时函数,或者,可以输出在所述应用程序第二版本中运行时间变长的耗时函数。这样开发人员能够发现所述应用程序第二版本源代码中的缺陷,便于对所述应用程序第二版本的源代码进行优化。
在本实施例中,所述持续集成服务器可以运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;可以分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;可以从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识。在本实施例中,所述持续集成服务器可以分析应用程序中预设线程标识对应的函数调用信息,得到至少一个函数调用链;可以基于预设时间阈值从所述至少一个函数调用链中过滤出耗时函数。这样,所述持续集成服务器可以提高耗时函数识别的效率和准确性。
请参阅图3。本说明书实施例还提供一种服务器。所述服务器可以包括以下单元。
运行单元20,用于运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;所述运行状态信息包括线程标识对应的函数调用信息;所述函数调用信息包括函数标识以及函数标识对应的时间戳;
分析单元22,用于分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;每个所述函数调用链包括至少一个函数标识;
选取单元24,用于从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;函数标识对应的运行时间基于该函数标识对应的时间戳得到。
请参阅图4。本说明书实施例还提供另一种服务器。所述服务器可以包括存储器和处理器。
在本实施例中,所述存储器包括但不限于动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)和静态随机存取存储器(Static Random Access Memory,SRAM)等。所述存储器可以用于存储计算机指令。
在本实施例中,所述处理器可以按任何适当的方式实现。例如,所述处理器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式等等。所述处理器可以用于执行所述计算机指令实现以下步骤:运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;所述运行状态信息包括线程标识对应的函数调用信息;所述函数调用信息包括函数标识以及函数标识对应的时间戳;分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;每个所述函数调用链包括至少一个函数标识;从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;函数标识对应的运行时间基于该函数标识对应的时间戳得到。
需要说明的是,本申请说明书中各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于服务器实施例而言,由于其基本相似于函数选取方法实施例,所以描述的比较简单,相关之处参见函数选取方法实施例的部分说明即可。
另外,本领域技术人员应当能够理解的是,所属领域技术人员在阅读完本申请说明书之后,可以无需创造性劳动想到本申请文件中列举的部分或全部实施方式之间可以组合,这些组合也在本申请公开和保护的范围内。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书各个实施例或者实施例的某些部分所述的方法。
本说明书可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本说明书,本领域普通技术人员知道,本说明书有许多变形和变化而不脱离本说明书的精神,希望所附的权利要求包括这些变形和变化而不脱离本说明书的精神。

Claims (10)

1.一种函数选取方法,包括:
运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;所述运行状态信息包括线程标识对应的函数调用信息;所述函数调用信息包括函数标识以及函数标识对应的时间戳;
分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;每个所述函数调用链包括至少一个函数标识;
从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;函数标识对应的运行时间基于该函数标识对应的时间戳得到。
2.如权利要求1所述的方法,函数标识对应的时间戳包括进入时间戳和退出时间戳。
3.如权利要求2所述的方法,函数标识对应的运行时间采用如下方式计算得到:
以函数标识对应的退出时间戳表示的时刻为退出时刻,以该函数标识对应的进入时间戳表示的时刻为进入时刻,计算所述退出时刻和所述进入时刻之间的差值,作为该函数标识对应的运行时间。
4.如权利要求1所述的方法,所述运行状态信息包括所述应用程序在预设运行阶段的运行状态信息;所述预设运行阶段包括启动阶段。
5.如权利要求1所述的方法,所述运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息,包括:
接收版本服务器发来的应用程序的源代码;所述源代码中包括调试代码;
基于所述源代码,生成所述应用程序;
运行所述应用程序,得到所述应用程序的运行状态信息。
6.如权利要求1所述的方法,所述分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链,包括:
获取预设线程标识在所述运行状态信息中对应的函数调用信息;
以获取的函数调用信息为目标函数调用信息,分析所述目标函数调用信息中各个函数标识标识的函数间的调用关系,得到所述预设线程标识对应的至少一个函数调用链。
7.如权利要求1所述的方法,所述从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识,包括:
针对所述至少一个函数调用链中的每个函数调用链,在该函数调用链包括对应的运行时间大于或等于预设时间阈值的函数标识时,从该函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;选取的函数标识能够形成该函数调用链的一个子函数调用链。
8.如权利要求1所述的方法,所述方法还包括:
获取选取的函数标识所对应的运行时间。
9.一种服务器,包括:
运行单元,用于运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;所述运行状态信息包括线程标识对应的函数调用信息;所述函数调用信息包括函数标识以及函数标识对应的时间戳;
分析单元,用于分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;每个所述函数调用链包括至少一个函数标识;
选取单元,用于从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;函数标识对应的运行时间基于该函数标识对应的时间戳得到。
10.一种服务器,包括:
存储器,用于存储计算机指令;
处理器,用于执行所述计算机指令实现以下步骤:运行源代码中包括调试代码的应用程序,得到所述应用程序的运行状态信息;所述运行状态信息包括线程标识对应的函数调用信息;所述函数调用信息包括函数标识以及函数标识对应的时间戳;分析预设线程标识对应的函数调用信息,得到所述预设线程标识对应的至少一个函数调用链;每个所述函数调用链包括至少一个函数标识;从所述至少一个函数调用链中选取对应的运行时间大于或等于预设时间阈值的函数标识;函数标识对应的运行时间基于该函数标识对应的时间戳得到。
CN201810278922.7A 2018-03-30 2018-03-30 函数选取方法和服务器 Active CN108595319B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201810278922.7A CN108595319B (zh) 2018-03-30 2018-03-30 函数选取方法和服务器
TW108101178A TWI684916B (zh) 2018-03-30 2019-01-11 函式選取方法和伺服器
PCT/CN2019/074331 WO2019184597A1 (zh) 2018-03-30 2019-02-01 函数选取方法和服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810278922.7A CN108595319B (zh) 2018-03-30 2018-03-30 函数选取方法和服务器

Publications (2)

Publication Number Publication Date
CN108595319A true CN108595319A (zh) 2018-09-28
CN108595319B CN108595319B (zh) 2020-08-04

Family

ID=63624002

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810278922.7A Active CN108595319B (zh) 2018-03-30 2018-03-30 函数选取方法和服务器

Country Status (3)

Country Link
CN (1) CN108595319B (zh)
TW (1) TWI684916B (zh)
WO (1) WO2019184597A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019184597A1 (zh) * 2018-03-30 2019-10-03 阿里巴巴集团控股有限公司 函数选取方法和服务器
CN112052078A (zh) * 2019-06-06 2020-12-08 阿里巴巴集团控股有限公司 一种耗时的确定方法和装置
CN113448815A (zh) * 2020-03-26 2021-09-28 华为技术有限公司 一种采集追踪trace调用链的方法和电子设备

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113127314B (zh) * 2019-12-31 2023-10-31 航天信息股份有限公司 一种检测程序性能瓶颈的方法、装置及计算机设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090178028A1 (en) * 2008-01-08 2009-07-09 Steven Francis Best Method and system for invoking just-in-time debugger
CN105844156A (zh) * 2016-03-22 2016-08-10 北京金山安全软件有限公司 一种进程信息获取方法、装置及电子设备
CN106649084A (zh) * 2016-09-14 2017-05-10 腾讯科技(深圳)有限公司 函数调用信息的获取方法及装置、测试设备
CN106909431A (zh) * 2015-12-22 2017-06-30 阿里巴巴集团控股有限公司 定位函数性能问题的方法及装置
CN107480029A (zh) * 2017-08-02 2017-12-15 北京深思数盾科技股份有限公司 一种函数调用时间的监控方法及装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8312254B2 (en) * 2008-03-24 2012-11-13 Nvidia Corporation Indirect function call instructions in a synchronous parallel thread processor
GB2459741B (en) * 2008-05-08 2012-05-02 Icera Inc Debugging system and method
TWI632453B (zh) * 2015-10-02 2018-08-11 緯穎科技服務股份有限公司 監測伺服器的方法、監測裝置及監測系統
TW201715398A (zh) * 2015-10-20 2017-05-01 Insyde Software Corp 在作業系統下過濾系統資訊的方法及系統
CN106874168A (zh) * 2017-01-12 2017-06-20 北京奇虎科技有限公司 确定应用程序运行性能的方法、装置和移动终端
CN107145429A (zh) * 2017-06-01 2017-09-08 成都通甲优博科技有限责任公司 一种日志分析方法及系统
CN108595319B (zh) * 2018-03-30 2020-08-04 阿里巴巴集团控股有限公司 函数选取方法和服务器

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090178028A1 (en) * 2008-01-08 2009-07-09 Steven Francis Best Method and system for invoking just-in-time debugger
CN106909431A (zh) * 2015-12-22 2017-06-30 阿里巴巴集团控股有限公司 定位函数性能问题的方法及装置
CN105844156A (zh) * 2016-03-22 2016-08-10 北京金山安全软件有限公司 一种进程信息获取方法、装置及电子设备
CN106649084A (zh) * 2016-09-14 2017-05-10 腾讯科技(深圳)有限公司 函数调用信息的获取方法及装置、测试设备
CN107480029A (zh) * 2017-08-02 2017-12-15 北京深思数盾科技股份有限公司 一种函数调用时间的监控方法及装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019184597A1 (zh) * 2018-03-30 2019-10-03 阿里巴巴集团控股有限公司 函数选取方法和服务器
CN112052078A (zh) * 2019-06-06 2020-12-08 阿里巴巴集团控股有限公司 一种耗时的确定方法和装置
CN113448815A (zh) * 2020-03-26 2021-09-28 华为技术有限公司 一种采集追踪trace调用链的方法和电子设备
WO2021190354A1 (zh) * 2020-03-26 2021-09-30 华为技术有限公司 一种采集追踪trace调用链的方法和电子设备

Also Published As

Publication number Publication date
TWI684916B (zh) 2020-02-11
WO2019184597A1 (zh) 2019-10-03
TW201942736A (zh) 2019-11-01
CN108595319B (zh) 2020-08-04

Similar Documents

Publication Publication Date Title
CN108595319A (zh) 函数选取方法和服务器
CN105094783B (zh) 安卓应用稳定性测试的方法及装置
CN111124906B (zh) 基于动态埋点的跟踪方法、编译方法、装置和电子设备
Osman et al. Mining frequent bug-fix code changes
WO2019227708A1 (zh) 测试案例的在线调试装置、方法及计算机可读存储介质
CN104899046B (zh) 一种多功能脚本运行方法和系统
CN110457211A (zh) 脚本性能测试方法、装置和设备及计算机存储介质
CN110489319B (zh) 一种接口性能测试分析方法、存储介质
CN108959067A (zh) 搜索引擎的测试方法、装置及计算机可读存储介质
CN109284222B (zh) 软件单元、数据处理系统中的项目测试方法、装置及设备
CN113209630B (zh) 游戏应用的抓帧防御方法及装置、存储介质、计算机设备
CN108304313A (zh) 一种用于数据测试的装置、客户端及方法
CN114253587A (zh) 应用程序更新方法、装置、电子设备及可读存储介质
CN112740187A (zh) 调试程序的方法和系统
CN108959070A (zh) 一种基于代码对象的Python钩子函数方法和装置
CN103810087A (zh) 测试应用程序性能的方法和装置
CN116610568A (zh) 一种识别代码的依赖关系的方法、装置、设备及介质
CN113590498B (zh) 一种桌面操作系统应用启动时间的测试方法及系统
CN115509913A (zh) 软件自动化测试方法、装置、机器可读介质及设备
CN109542775A (zh) 一种测试脚本的生成和执行方法及装置
CN110471828A (zh) 一种操作系统测试方法、装置及其设备
CN113688031A (zh) 一种基于字节码增强技术的测试定位方法
CN115982018B (zh) 一种基于ocr的ui测试方法、系统、计算机设备和存储介质
Esipchuk et al. PTF-based test automation for Java applications on mobile phones
CN108733564A (zh) 一种浏览器性能测试方法、装置及设备

Legal Events

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

Effective date of registration: 20200925

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee after: Innovative advanced technology Co.,Ltd.

Address before: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee before: Advanced innovation technology Co.,Ltd.

Effective date of registration: 20200925

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee after: Advanced innovation technology Co.,Ltd.

Address before: Greater Cayman, British Cayman Islands

Patentee before: Alibaba Group Holding Ltd.