CN113448815A - 一种采集追踪trace调用链的方法和电子设备 - Google Patents
一种采集追踪trace调用链的方法和电子设备 Download PDFInfo
- Publication number
- CN113448815A CN113448815A CN202010225986.8A CN202010225986A CN113448815A CN 113448815 A CN113448815 A CN 113448815A CN 202010225986 A CN202010225986 A CN 202010225986A CN 113448815 A CN113448815 A CN 113448815A
- Authority
- CN
- China
- Prior art keywords
- function
- electronic device
- time
- identification information
- register
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3438—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment monitoring of user actions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3409—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
- G06F11/3419—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Telephone Function (AREA)
Abstract
本申请提供了一种采集追踪trace调用链的方法,该方法应用于电子设备中,该方法包括:该电子设备从寄存器中获取函数的时间信息和标识信息,该时间信息包括进入该函数的时刻以及退出该函数的时刻;该电子设备将该时间信息和该标识信息存储在内存中;在满足预设条件时,该电子设备根据该标识信息确定该函数对应的函数名,并将该内存中的该时间信息以及该函数名写入trace文件。本申请实施例可以在不影响系统性能的情况下,获取完整的调用路径,从而为系统性能问题的定位提供准确的信息。
Description
技术领域
本申请涉及电子设备领域,并且更具体地,涉及一种获取追踪调用链的方法和电子设备。
背景技术
当前Android系统的智能手机使用过程中仍会出现许多性能问题,比如用户在使用某应用程序(application,App)出现卡顿现象。性能问题通常是随机的、不确定的、且难以复现的,基于此需要一款可以常运行的追踪(trace)调用链工具,保证在性能问题发生时能自动抓取到现场,以帮助分析与定位性能问题。
Systrace是Android系统提供一款性能问题分析工具,它能抓取到Android系统中若干预埋的调用路径。但是该方法不能获取到完整的调用路径,提供的有用信息有限,无法对性能问题做深入和准确的分析。
发明内容
本申请提供一种采集追踪trace调用链的方法和电子设备,有助于对电子设备的性能问题做深入和准确的分析。
第一方面,提供了一种采集追踪trace调用链的方法,该方法应用于电子设备中,该方法包括:该电子设备从寄存器中获取函数的时间信息和标识信息,该时间信息包括进入该函数的时刻以及退出该函数的时刻;该电子设备将该时间信息和该标识信息存储在内存中;在满足预设条件时,该电子设备根据该标识信息确定该函数对应的函数名,并将该内存中的该时间信息以及该函数名写入trace文件。
本申请实施例中,电子设备可以直接从寄存器中获取时间信息和标识信息,这样的处理方法省去了函数调用的开销,从而对系统性能的消耗非常小(不影响用户体验,且不会使系统性能恶化);该方法还可以获取到完整的调用路径,从而可以保证抓到性能问题发生的真正现场,为系统性能问题的定位提供准确的信息。
在一些可能的实现方式中,该内存为环形内存。
结合第一方面,在第一方面的某些实现方式中,该电子设备根据该标识信息确定该函数对应的函数名,包括:该电子设备调用转化接口,将该函数的标识信息转化为该函数名。
本申请实施例中,电子设备在内存中保存的是函数的标识信息而不是函数对应的函数名,减少了电子设备在将时间信息和标识信息写入内存的耗时,从而降低了写入带来的性能开销。
应理解,本申请实施例中的函数可以包括函数名、函数参数等等信息。
在一些可能的实现方式中,该转化接口为ArtMethod::PrettyMethod()接口。应理解,本申请实施例中对接口的名称并不作限定,还可以是其他转化接口。
在一些可能的实现方式中,该函数可以是由预设比特数标识。
结合第一方面,在第一方面的某些实现方式中,该标识信息为该函数的指针地址。
本申请实施例中,电子设备可以从寄存器中获取函数的指针地址,通过保存指针地址而不是保存函数名,减少了电子设备在将时间信息和标识信息写入内存的耗时,从而降低了写入带来的性能开销。
结合第一方面,在第一方面的某些实现方式中,该寄存器包括第一寄存器和第二寄存器,该电子设备从寄存器中获取函数的时间信息和标识信息,包括:该电子设备在该函数开始运行时,从该第一寄存器获取进入该函数的时刻且从该第二寄存器获取该函数的标识信息;该电子设备在该函数运行结束时,从该第一寄存器获取退出该函数的时刻。
本申请实施例中,电子设备可以在函数开始运行时,获取进入该函数的时刻以及函数的标识信息;在函数运行结束时,获取退出该函数的时刻。从而将相应的时间信息和标识信息保存在内存中,这样的处理方法省去了函数调用的开销,从而对系统性能的消耗非常小(不影响用户体验,且不会使系统性能恶化);该方法还可以获取到完整的调用路径,从而可以保证抓到性能问题发生的真正现场,对系统性能问题的定位提供准确的信息。
结合第一方面,在第一方面的某些实现方式中,该预设条件包括:该电子设备启动第一应用程序的时长大于或者等于预设时长;或者,该电子设备的丢帧数大于或者等于预设帧数。
结合第一方面,在第一方面的某些实现方式中,实现该方法的代码在该电子设备的安卓运行时ART中。
本申请实施例中,实现上述方法的代码可以在电子设备的ART中,这样避免了在应用程序层或者框架层中添加代码。
第二方面,提供了一种采集追踪trace调用链的方法,该方法应用于系统中,该系统包括第一电子设备和第二电子设备,该方法包括:第一电子设备从寄存器中获取函数的时间信息和标识信息,该时间信息包括进入该函数的时刻以及退出该函数的时刻;第一电子设备将该时间信息和该标识信息存储在内存中;在满足预设条件时,第一电子设备根据该标识信息确定该函数对应的函数名,并将该内存中的该时间信息以及该函数名写入trace文件;第一电子设备向第二电子设备发送该trace文件;该第二电子设备对该trace文件进行解析,获得trace调用链。
本申请实施例中,第一电子设备可以直接从寄存器中获取时间信息和标识信息,这样的处理方法省去了函数调用的开销,从而对第一电子设备的系统性能的消耗非常小(不影响用户体验,不会使系统性能恶化);该方法还可以使得第二电子设备获取到完整的调用路径,从而可以保证抓到性能问题发生的真正现场,对系统性能问题的定位提供准确的信息。
在一些可能的实现方式中,该第一电子设备为手机,该第二电子设备为个人计算机(personal computer,PC)。
第三方面,提供了一种装置,该装置包含在电子设备中,该装置具有实现上述方面及上述方面的可能实现方式中电子设备行为的功能。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块或单元。
第四方面,提供了一种电子设备,包括:一个或多个处理器;存储器;以及一个或多个计算机程序。其中,一个或多个计算机程序被存储在存储器中,一个或多个计算机程序包括指令。当指令被电子设备执行时,使得电子设备执行上述第一方面任一项可能的实现中的采集追踪trace调用链的方法。
第五方面,本技术方案提供了一种电子设备,包括一个或多个处理器和一个或多个存储器。该一个或多个存储器与一个或多个处理器耦合,一个或多个存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当一个或多个处理器执行计算机指令时,使得电子设备执行上述第一方面任一项可能的实现中的采集追踪trace调用链的方法。
第六方面,本技术方案提供了一种计算机存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行上述第一方面任一项可能的实现中的采集追踪trace调用链的方法。
第七方面,本技术方案提供了一种计算机程序产品,当计算机程序产品在电子设备上运行时,使得电子设备执行上述第一方面任一项可能的设计中的采集追踪trace调用链的方法。
附图说明
图1是本申请实施例提供的电子设备的结构示意图。
图2是本申请实施例提供的电子设备的软件结构框图。
图3是本申请实施例提供的在每个Java函数中添加trace点的示意图。
图4是本申请实施例提供的trace点信息获取与存储的示意图。
图5是本申请实施例提供的trace点信息获取与存储的另一示意图。
图6是本申请实施例提供的trace文件火焰图。
图7是本申请实施例提供的采集trace调用链的方法。
具体实施方式
以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请的限制。如在本申请的说明书和所附权利要求书中所使用的那样,单数表达形式“一个”、“一种”、“所述”、“上述”、“该”和“这一”旨在也包括例如“一个或多个”这种表达形式,除非其上下文中明确地有相反指示。还应当理解,在本申请以下各实施例中,“至少一个”、“一个或多个”是指一个、两个或两个以上。术语“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系;例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A、B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。
以下介绍电子设备、用于这样的电子设备的用户界面、和使用这样的电子设备的实施例。在一些实施例中,电子设备可以是还包含其它功能诸如个人数字助理和/或音乐播放器功能的便携式电子设备,诸如手机、平板电脑、具备无线通讯功能的可穿戴电子设备(如智能手表)等。便携式电子设备的示例性实施例包括但不限于搭载 或者其它操作系统的便携式电子设备。上述便携式电子设备也可以是其它便携式电子设备,诸如膝上型计算机(Laptop)等。还应当理解的是,在其他一些实施例中,上述电子设备也可以不是便携式电子设备,而是台式计算机。
示例性的,图1示出了电子设备100的结构示意图。电子设备100可以包括处理器110、外部存储器接口120、内部存储器121、通用串行总线(universal serial bus,USB)接口130、充电管理模块140、电源管理模块141、电池142、天线1、天线2、移动通信模块150、无线通信模块160、音频模块170、扬声器170A、受话器170B、麦克风170C、耳机接口170D、传感器模块180、指南针190、马达191、指示器192、摄像头193、显示屏194以及用户标识模块(subscriber identification module,SIM)卡接口195等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的部件,也可以集成在一个或多个处理器中。在一些实施例中,电子设备100也可以包括一个或多个处理器110。其中,控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。在其他一些实施例中,处理器110中还可以设置存储器,用于存储指令和数据。示例性地,处理器110中的存储器可以为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。这样就避免了重复存取,减少了处理器110的等待时间,因而提高了电子设备100处理数据或执行指令的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路间(inter-integrated circuit,I2C)接口、集成电路间音频(inter-integrated circuitsound,I2S)接口、脉冲编码调制(pulse code modulation,PCM)接口、通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口、移动产业处理器接口(mobile industry processor interface,MIPI)、用输入输出(general-purpose input/output,GPIO)接口、SIM卡接口和/或USB接口等。其中,USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口、Micro USB接口、USB Type C接口等。USB接口130可以用于连接充电器为电子设备100充电,也可以用于电子设备100与外围设备之间传输数据。该USB接口130也可以用于连接耳机,通过耳机播放音频。
可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。充电管理模块140用于从充电器接收充电输入。充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。电源管理模块141用于连接电池142,充电管理模块140与处理器110。
电子设备100的无线通信功能可以通过天线1、天线2、移动通信模块150、无线通信模块160、调制解调处理器以及基带处理器等实现。
无线通信模块160可以提供应用在电子设备100上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络)、蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS)、调频(frequency modulation,FM)、近距离无线通信技术(near field communication,NFC)、红外技术(infrared,IR)等无线通信的解决方案。
显示屏194用于显示图像、视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD)、有机发光二极管(organic light-emittingdiode,OLED)、有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode的,AMOLED)、柔性发光二极管(flex light-emittingdiode,FLED)、迷你发光二极管(mini light-emitting diode,miniled)、MicroLed、Micro-oLed、量子点发光二极管(quantum dot light emitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或多个显示屏194。
电子设备100可以通过ISP、摄像头193、视频编解码器、GPU、显示屏194以及应用处理器等实现拍摄功能。
ISP用于处理摄像头193反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将所述电信号传递给ISP处理,转化为肉眼可见的图像。
摄像头193用于捕获静态图像或视频。外部存储器接口120可以用于连接外部存储卡,例如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储一个或多个计算机程序,该一个或多个计算机程序包括指令。处理器110可以通过运行存储在内部存储器121的上述指令,从而使得电子设备100执行本申请一些实施例中所提供的获取追踪调用链的方法,以及各种应用以及数据处理等。
电子设备100可以通过音频模块170、扬声器170A、受话器170B、麦克风170C、耳机接口170D、以及应用处理器等实现音频功能。例如音乐播放、录音等。
传感器模块180可以包括压力传感器180A、陀螺仪传感器180B、气压传感器180C、磁传感器180D、加速度传感器180E、距离传感器180F、接近光传感器180G、指纹传感器180H、温度传感器180J、触摸传感器180K、环境光传感器180L、骨传导传感器180M等。
陀螺仪传感器180B可以用于确定电子设备100的运动姿态。在一些实施例中,可以通过陀螺仪传感器180B确定电子设备100围绕三个轴(即X、Y和Z轴)的角速度。加速度传感器180E可检测电子设备100在各个方向上(一般为三轴)加速度的大小。当电子设备100静止时可检测出重力的大小及方向。还可以用于识别电子设备姿态,应用于横竖屏切换,计步器等应用。
磁传感器180D包括霍尔传感器。电子设备100可以利用磁传感器180D检测翻盖皮套的开合。
加速度传感器180E可检测电子设备100在各个方向上(一般为三轴)加速度的大小。当电子设备100静止时可检测出重力的大小及方向。还可以用于识别电子设备姿态,应用于横竖屏切换,计步器等应用。
距离传感器180F,用于测量距离。
接近光传感器180G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。发光二极管可以是红外发光二极管。
环境光传感器180L用于感知环境光亮度。指纹传感器180H用于采集指纹。电子设备100可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。
温度传感器180J用于检测温度。
触摸传感器180K,也称“触控面板”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180K用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180K也可以设置于电子设备100的表面,与显示屏194所处的位置不同。
图2是本申请实施例的电子设备100的软件结构框图。分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统从上至下分别为应用程序(application,App)层,框架层(Java APIFramework),系统库(native C/C++Libraries),安卓运行时(Android runtime,ART),硬件抽象层(hardware abstraction layer,HAL)以及内核层(Linux Kernel)。应用程序层可以包括一系列应用程序包。
如图2所示,应用程序包可以包括相机、图库、日历、通话、地图、导航、WLAN、蓝牙、音乐、视频、短信息等应用程序。
框架层为应用程序层的应用程序提供应用编程接口(application programminginterface,API)和编程框架,框架层包括一些预先定义的函数。
如图2所示,框架层可以包括窗口管理器、内容提供器、视图系统、电话管理器、资源管理器、通知管理器等。
窗口管理器用于管理窗口程序,窗口管理器可以获取显示屏大小,判断是否有状态栏、锁定屏幕、截取屏幕等。
内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频、图像、音频、拨打和接听的电话、浏览历史和书签、电话簿等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
电话管理器用于提供电子设备100的通信功能。例如通话状态的管理(包括接通,挂断等)。
资源管理器为应用程序提供各种资源,比如本地化字符串、图标、图片、布局文件、视频文件等等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息、发出提示音、电子设备振动、指示灯闪烁等。
系统库可以包括多个功能模块。例如:表面管理器(surface manager)、媒体库(media libraries)、三维图形处理库(例如:OpenGL ES)、2D图形引擎(例如:SGL)等。
表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。
媒体库支持多种常用的音频、视频格式回放和录制以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4、H.264、MP3、AAC、AMR、JPG和PNG等。
三维图形处理库用于实现三维图形绘图、图像渲染、合成和图层处理等。
2D图形引擎是2D绘图的绘图引擎。
ART中包含一个核心库的集合,提供大部分Java编程语言核心库中可用的功能。
硬件抽象层是为上层的框架层提供相应硬件的显示界面,音频(Audio)、蓝牙(Bluetooth)等是组成硬件抽象层的库模块,实现每个硬件的界面显示功能。
内核层是硬件和软件之间的层。内核层可以包含显示驱动、摄像头驱动、音频驱动、传感器驱动。
下面介绍本申请实施例提供的采集trace调用链的方法。
trace调用链可以保证在性能问题发生时能自动抓取到现场,以帮助分析与定位性能问题。这对获取trace调用链能力的技术要求如下:
(1)能在系统运行时常开,以抓到问题发生现场;
(2)trace信息量充足;
(3)自身性能消耗足够小,不降低整个系统的性能表现。
当前获取trace调用链的方式包括Android Studio CPU Profiler,AndroidStudio CPU Profiler是Android studio自带的一款多功能工具,它能提供Android系统trace调用链获取能力。但是其性能负载较大,仅仅用于开发调试场景。在获取trace调用链时需要对所有必要的class进行字节码增强,在进入每个方法前需要进行埋点,方法执行结束后统计本次方法执行耗时。该方法对几乎所有方法添加额外的面向切面编程(aspectoriented programming,AOP)逻辑(通过反射方式实现),这会导致巨额的性能影响。
另一种获取trace调用链的方式为Systrace。Systrace的原理是在系统的一些关键链路(比如system service,虚拟机,线程(binder)驱动)中插入一些信息(label),通过label的开始和结束来确定某个核心过程的执行时间,然后把这些label信息收集起来得到系统关键路径的运行时间信息,进而得到整个系统的运行性能信息。框架层里面的一些重要模块都插入了label信息(例如,Jave层的通过android.os.Trace类完成,native层通过ATrace宏完成),App中可以添加自定义的label。但是这种方法不能获取到完整的trace调用链(或者,该方法获取的trace调用路径很浅),提供的有用信息有限,无法对性能问题做深入和准确的分析。
本申请实施例中提出一种采集trace调用链的方法,该方法本身消耗系统性能非常小(不影响用户体验,不会使系统性能恶化),且能获取到全量调用路径,得益于该优点,该方法可以在系统中常开,能抓到性能问题发生的真正现场,能对系统性能问题的定界定位提供直接的、准确的信息。
本申请实施例中的获取trace调用链的方法的代码可以在安卓运行时(Androidruntime,ART)中实现,在应用程序层和框架层无需添加代码。或者,本申请实施例的方法的代码也可以在虚拟机中实现。
在每个函数的出入口可以各添加一个追踪(trace)点,trace点包括时间信息和标识信息,为节省系统的性能开销,trace点的时间信息和标识信息也可以通过直接访问寄存器的方式实现,该处理方法可以省去函数调用的开销,以节约获取trace调用链所带来的性能开销。
应理解,本申请实施例中,函数的时间信息可以包括进入函数的时刻以及退出函数的时刻,进入函数的时刻为该函数开始运行的时刻,退出函数的时刻为该函数结束运行的时刻;函数的标识信息可以是函数的指针地址或者其他可以标识函数的信息。
图3示出了本申请实施例中在每个Java函数中添加trace点的示意图。
Android系统执行包括解析执行和编译执行两种方式,因此添加trace点需要覆盖这两种方式。如图3所示,图中的“预编译”和“即时编译”对应编译执行,通常在App安装时和手机空闲编译时会执行到;图3中“解析器”对应解析执行。在Android系统ART实现代码中,找到每个函数执行的入口和出口,然后在入口和出口添加trace点。
如图3所示,应用程序层和框架层中的Java函数可以在ART中进行编译和解析,其中,ART可以对所有Java函数添加trace点,最后ART可以输出包含trace点的Java函数。
应理解,应用程序层和框架层中的Java函数是不能被电子设备直接进行执行的,ART在对Java函数添加trace点的同时也会将Java函数翻译为机器码,机器码是可以被电子设备直接执行的。
本申请实施例中的获取trace调用链的方法在ART中实现,可以保证电子设备获取到所有Java函数的调用关系,即为全调用路径,从而保证了对电子设备的性能问题做深入和准确的分析。
图4示出了本申请实施例提供的trace点信息获取与存储的示意图。
图4中的追踪点1(TracePoint1)表示在函数的入口获取进入该函数的时刻,实现方式可以是直接从中央处理器(central processing unit,CPU)中的寄存器获取该信息,这样是得到最高速的获取速度,代码可以使用汇编方式实现。
图4中的追踪点2(TracePoint2)表示在函数的出口获取退出该函数的时刻,实现方式可以是直接从CPU中的寄存器获取该信息。
电子设备可以将获取到的trace点信息(TracePoint1和TracePoint2)以及标识该函数的信息保存在环形内存中。
示例性的,TracePoint1的信息和TracePoint2的信息可以是一个32位的整数值,同样的可以采用预定义的整数值来标识该函数,电子设备可以将TracePoint1的信息、TracePoint2的信息以及标识该函数的信息存入环形内存中。
应理解,本申请实施例中,电子设备可以从同一寄存器中获取进入该函数的时刻、退出该函数的时刻以及该函数的标识信息;或者,电子设备可以从一个寄存器中获取进入该函数的时刻以及退出该函数的时刻,从另一个寄存器中获取该函数的标识信息。
一个实施例中,电子设备可以在TracePoint1处将进入该函数的时刻以及标识该函数的信息保存在环形内存中。或者,电子设备可以在TracePoint2处将退出该函数的时刻以及标识该函数的信息保存在环形内存中。
一个实施例中,电子设备也可以将TracePoint1的信息、TracePoint2的信息以及函数名(或者,函数字符串)的信息保存到环形内存中。
本申请实施例中,环形内存可以是首尾相连的存储结构。环形内存中存储数据的总量是固定的。例如,环形内存中可以有100(例如,1至100)个存储位置。当环形内存中1至100个存储位置存满且需要存储新的数据时,环形内存可以自动将第1个存储位置上的数据删除从而存储新的数据。或者,也可以理解为环形内存是采用覆盖的存储方式进行数据存储。
应理解,本申请实施例中是以将追踪点的信息保存在环形内存中为例进行说明的,追踪点的信息还可以保存在电子设备的其他存储区域中,本申请实施例对此并不作任何限定。
在满足预设条件时,电子设备可以将环形内存中的信息导入trace文件中。从而使得PC在导出trace文件后,对trace文件进行解析获得trace调用链。电子设备可以通过函数的标识信息获取对应的函数字符串,从而针对该函数字符串的进入以及退出时刻来判断该函数运行的耗时情况。
本申请实施例中,上述预设条件包括但不限于以下条件中的一种或者多种:
(1)电子设备启动某个应用程序时的时长大于或者等于预设时长;
(2)电子设备的丢帧数大于或者等于预设帧数;
(3)电子设备的CPU使用率大于或者等于预设CPU使用率;
(4)电子设备的温度传感器检测到CPU的温度大于或者等于预设温度值。
应理解,本申请实施例中,电子设备的丢帧数可以指电子设备在绘制一帧图像时都会消耗一定的时长,如果这个时长大于或者等于预设时长则可以确定出一个丢帧数。
示例性的,若电子设备绘制一帧图像的时长大于16ms,那么电子设备可以确定丢帧数为1;如果电子设备绘制一帧图像的时长大于32ms,那么电子设备可以确定丢帧数为2。
应理解,本申请实施例中,对函数的标识方式并不作具体限定,本领域技术人员可知每一个函数都会有自己的标识信息,电子设备可以对每个函数的标识信息进行处理,例如采用预设的比特来标识对应的函数。
图5示出了本申请实施例提供的trace点信息获取与存储的另一示意图。
图5中的追踪点3(TracePoint3)表示在函数的入口获取进入该函数的时刻和函数的标识信息,获取进入该函数的时刻和函数的标识信息的方式可以是直接读取CPU中的寄存器。示例性的,进入该函数的时刻可以占32比特,函数的标识信息可以占32比特。
图5中的追踪点4(TracePoint4)表示在函数的出口获取退出该函数的时刻,实现方式可以是直接从CPU中的寄存器获取该信息。示例性的,退出该函数的时刻可以占32比特。
一个实施例中,在TracePoint3,电子设备可以从第一寄存器中获取进入该函数的时刻且从第二寄存器中获取该函数的标识信息。在TracePoint4,电子设备可以从第一寄存器获取退出该函数的时刻。
相比于图4中所示的方法,此时内存中存储是函数的时间和函数的标识信息,需要将函数的标识信息转换成函数名(或者,函数字符串),实现方式可以是调用ART中已有接口:ArtMethod::PrettyMethod()。
一个实施例中,电子设备可以在将环形内存中保存的函数的标识信息写入trace文件时,将函数的标识信息转化为函数名(或者,函数字符串)。
应理解,图5中是以在TracePoint3获取函数的标识信息为例进行说明的,本申请实施例中并不做具体限定。也可以是在TracePoint4获取函数的标识信息;或者,也可以是在执行函数中的任意一个时间点获取函数的标识信息。
示例性的,表1示出了一种环形内存中保存的trace点信息。
表1环形内存中保存的trace点信息
函数的标识信息 | 进入函数的时刻 | 退出函数的时刻 |
标识1 | 时刻1 | 时刻4 |
标识2 | 时刻2 | 时刻5 |
标识3 | 时刻3 | 时刻6 |
… | … | … |
本申请实施例中,获取到的trace点信息写入内存时可以不保存函数名,而是记录该函数标识信息,仅在最后将内存信息导出到文件时,将函数标识信息与函数名匹配,然后将函数名写入trace文件中。这种处理方式的好处是保证写入内存的耗时尽量短,以节约写入带来的性能开销。
一个实施例中,函数的标识信息可以为函数的指针地址;或者,函数的标识信息可以是函数的其他标识信息,例如,采用预设的比特来标识对应的函数。
示例性的,表2示出了本申请实施例中获取到的trace调用链。其中,trace调用链中每行左侧数字表示时间(单位为纳秒),每行右侧表示函数名称字符串,POP表示函数的出口。
表2trace调用链
示例性的,第三行的POP可以表示第二行函数intandroid.view.Window.getFeatures()的出口;第四行的POP可以表示第一行函数booleanandroid.view.Window.hasFeature(int)的出口。第五行的POP可以表示函数booleanandroid.view.Window.hasFeature(int)的上一层函数(表2中未示出)的出口。
应理解,在从环形内存导出到trace文件时,如果环形内存中直接保存的是函数名,那么trace文件时可以直接如表2所示;若在环形内存中保存的是函数的标识信息,则需要先通过函数的标识信息确定对应的函数名。例如,在环形内存中保存的是函数的标识信息,则可以通过已有接口ArtMethod::PrettyMethod()确定函数名。
trace文件可以借用火焰图(flame graphs)打开,图6示出了本申请实施例中trace文件火焰图的示意图。其中,图中的横轴表示时间,宽度越宽,表示对应函数调用耗时越长。其中,宽度值可以由函数入口和函数出口的时间差确定。纵轴表示函数调用关系,从上到下依次调用(例如,最上层函数调用第二层函数,第二层函数调用第三层函数,依次调用)。通过火焰图可以快速知道哪个或者哪几个函数调用耗时长,耗时异常的即为性能问题发生分析点。
本申请实施例可以获取到Android系统从应用程序层到框架层全量的高性能trace调用链,该方法对系统性能消耗非常低(不增加函数执行的耗时),见表3和表4所示的实验数据。
表3和表4中对手机1(64位模式)和手机2(32位模式)做实验,实验方法为将如下代码运行十万次,计算每次的时间值(共实验50轮,数据取50轮平均值)。
表3对手机1进行测试得到的实验数据
表4对手机2进行测试得到的实验数据
从实验数据看,使用了本申请的获取trace调用链的方法,在32位和64位模式下,对函数调用时长增加的影响极小(在1%以内)。
得益于本申请实施例中获取trace调用链极小的性能开销,使trace能力能在Android系统运行时常开(不影响用户体验,不会使系统性能恶化),trace能力常开能保证抓到性能问题发生的现场,抓到的现场信息对Android性能问题定界定位有直接的帮助。
本申请实施例中可跟踪的调用链深度足够深(全量调用链),使性能问题分析可以到函数代码粒度。同时基于本申请实施例,不仅可以获取到trace调用链,还能获取到其他信息,比如线程ID、CPU负载信息等等。
图7示出了本申请实施例提供的采集trace调用链的方法700的示意性流程图。如图7所示,该方法700包括:
S701,该电子设备从寄存器中获取函数的时间信息和标识信息,该时间信息包括进入该函数的时刻以及退出该函数的时刻。
示例性的,如图4所示,电子设备可以从寄存器中读取函数入口的时间信息、函数出口的时间信息以及函数的标识信息。
S702,该电子设备将该时间信息和该标识信息存储在内存中。
示例性的,如图4所示,电子设备可以将这些信息存储在环形内存中。
S703,在满足预设条件时,该电子设备根据该标识信息确定该函数对应的函数名,并将该内存中的该时间信息以及该函数名写入trace文件。
应理解,S703中的预设条件可以参考上述实施例中预设条件的描述,为了简洁,在此不再赘述。
本申请实施例中,电子设备可以直接从寄存器中获取时间信息和标识信息,这样的处理方法省去了函数调用的开销,从而对系统性能的消耗非常小(不影响用户体验,不会使系统性能恶化);该方法还可以获取到完整的调用路径,从而可以保证抓到性能问题发生的真正现场,对系统性能问题的定位提供准确的信息。
在一些可能的实现方式中,该内存为环形内存。
可选地,该电子设备根据该标识信息确定该函数对应的函数名,包括:该电子设备调用转化接口,将该函数的标识信息转化为该函数名。
本申请实施例中,电子设备在内存中保存的是函数的标识信息而不是函数对应的函数名,减少了电子设备在将时间信息和标识信息写入内存的耗时,从而降低了写入带来的性能开销。
可选地,该转化接口为ArtMethod::PrettyMethod()接口。应理解,本申请实施例中对接口的名称并不作限定,还可以是其他转化接口。
在一些可能的实现方式中,该函数可以是由预设比特数标识。
可选地,该标识信息为该函数的指针地址。
本申请实施例中,电子设备可以从寄存器中获取函数的指针地址,通过保存指针地址而不是保存函数名,减少了电子设备在将时间信息和标识信息写入内存的耗时,从而降低了写入带来的性能开销。
可选地,该寄存器包括第一寄存器和第二寄存器,该电子设备从寄存器中获取函数的时间信息和标识信息,包括:该电子设备在该函数开始运行时,从该第一寄存器获取进入该函数的时刻且从该第二寄存器获取该函数的标识信息;该电子设备在该函数运行结束时,从该第一寄存器获取退出该函数的时刻。
示例性的,如图5所示,电子设备可以在函数开始运行时(TracePoint3),从第一寄存器中获取进入函数的时刻且从第二寄存器中获取函数的标识信息;电子设备可以在函数运行结束时(TracePoint4)获取退出该函数的时刻。
本申请实施例中,电子设备可以在函数开始运行时,获取进入该函数的时刻以及函数的标识信息,在函数运行结束时,获取退出该函数的时刻。从而将相应的时间信息和标识信息保存在内存中,这样的处理方法省去了函数调用的开销,从而对系统性能的消耗非常小(不影响用户体验,不会使系统性能恶化);该方法还可以获取到完整的调用路径,从而可以保证抓到性能问题发生的真正现场,对系统性能问题的定位提供准确的信息。
应理解,本申请实施例中,可以是在函数开始运行时,从寄存器获取进入该函数的时刻。也可以是从函数开始运行时的预设时长后记录一个时刻,之后电子设备可以通过该时刻与预设时长确定进入该函数的时刻。
或者,也可以在函数结束运行前的预设时长记录一个时刻,之后电子设备可以通过该时刻与预设时长确定退出该函数的时刻。
可选地,实现该方法700的代码在该电子设备的安卓运行时ART中。
本申请实施例中,实现上述方法的代码可以在电子设备的ART中,这样避免了在应用程序层或者框架层中添加代码。
本申请实施例还提供了一种电子设备,该电子设备可以包括如图1所示的处理器110以及存储器,存储器存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令,当所述指令被所述一个或多个处理器执行时,使得所述电子设备执行方法700中S701、S702和S703的步骤。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (14)
1.一种采集追踪trace调用链的方法,所述方法应用于电子设备中,其特征在于,所述方法包括:
所述电子设备从寄存器中获取函数的时间信息和标识信息,所述时间信息包括进入所述函数的时刻以及退出所述函数的时刻;
所述电子设备将所述时间信息和所述标识信息存储在内存中;
在满足预设条件时,所述电子设备根据所述标识信息确定所述函数对应的函数名,并将所述内存中的所述时间信息以及所述函数名写入trace文件。
2.根据权利要求1所述的方法,其特征在于,所述电子设备根据所述标识信息确定所述函数对应的函数名,包括:
所述电子设备调用转化接口,将所述函数的标识信息转化为所述函数名。
3.根据权利要求1或2所述的方法,其特征在于,所述标识信息为所述函数的指针地址。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述寄存器包括第一寄存器和第二寄存器,所述电子设备从寄存器中获取函数的时间信息和标识信息,包括:
所述电子设备在所述函数开始运行时,从所述第一寄存器获取进入所述函数的时刻且从所述第二寄存器获取所述函数的标识信息;
所述电子设备在所述函数运行结束时,从所述第一寄存器获取退出所述函数的时刻。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述预设条件包括:所述电子设备启动第一应用程序的时长大于或者等于预设时长;或者,
所述电子设备的丢帧数大于或者等于预设帧数。
6.根据权利要求1至5中任一项所述的方法,其特征在于,实现所述方法的代码在所述电子设备的安卓运行时ART中。
7.一种电子设备,其特征在于,包括:
一个或多个处理器;
一个或多个存储器;
所述一个或多个存储器存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令,当所述指令被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
从寄存器中获取函数的时间信息和标识信息,所述时间信息包括进入所述函数的时刻以及退出所述函数的时刻;
将所述时间信息和所述标识信息存储在内存中;
在满足预设条件时,根据所述标识信息确定所述函数对应的函数名,并将所述内存中的所述时间信息以及所述函数名写入trace文件。
8.根据权利要求7所述的电子设备,其特征在于,当所述指令被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
调用转化接口,将所述函数的标识信息转化为所述函数名。
9.根据权利要求7或8所述的电子设备,其特征在于,所述标识信息为所述函数的指针地址。
10.根据权利要求7至9中任一项所述的电子设备,其特征在于,所述寄存器包括第一寄存器和第二寄存器,当所述指令被所述一个或多个处理器执行时,使得所述电子设备执行以下步骤:
在所述函数开始运行时,从所述第一寄存器获取进入所述函数的时刻且从所述第二寄存器获取所述函数的标识信息;
在所述函数运行结束时,从所述第一寄存器获取退出所述函数的时刻。
11.根据权利要求7至10中任一项所述的电子设备,其特征在于,所述预设条件包括:所述电子设备启动第一应用程序的时长大于或者等于预设时长;或者,
所述电子设备的丢帧数大于或者等于预设帧数。
12.根据权利要求7至11中任一项所述的电子设备,其特征在于,所述指令包含在所述电子设备的安卓运行时ART中。
13.一种计算机存储介质,其特征在于,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1-6中任一项所述的采集追踪trace调用链的方法。
14.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如权利要求1-6中任一项所述的采集追踪trace调用链的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010225986.8A CN113448815B (zh) | 2020-03-26 | 2020-03-26 | 一种采集追踪trace调用链的方法和电子设备 |
PCT/CN2021/081046 WO2021190354A1 (zh) | 2020-03-26 | 2021-03-16 | 一种采集追踪trace调用链的方法和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010225986.8A CN113448815B (zh) | 2020-03-26 | 2020-03-26 | 一种采集追踪trace调用链的方法和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113448815A true CN113448815A (zh) | 2021-09-28 |
CN113448815B CN113448815B (zh) | 2022-10-18 |
Family
ID=77807359
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010225986.8A Active CN113448815B (zh) | 2020-03-26 | 2020-03-26 | 一种采集追踪trace调用链的方法和电子设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113448815B (zh) |
WO (1) | WO2021190354A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114115746A (zh) * | 2021-12-02 | 2022-03-01 | 北京乐讯科技有限公司 | 一种用户态存储系统的全链路追踪装置 |
CN114398296A (zh) * | 2022-03-24 | 2022-04-26 | 荣耀终端有限公司 | 用于问题定位的方法和终端设备 |
CN114826639A (zh) * | 2021-11-01 | 2022-07-29 | 中国工商银行股份有限公司 | 基于函数调用链跟踪的应用攻击检测方法及装置 |
CN114936040A (zh) * | 2022-05-31 | 2022-08-23 | 北京达佳互联信息技术有限公司 | 程序数据处理方法、装置、电子设备、存储介质 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116074628B (zh) * | 2022-05-30 | 2023-10-20 | 荣耀终端有限公司 | 一种数据处理方法及电子设备 |
CN116701134B (zh) * | 2022-10-14 | 2024-05-17 | 荣耀终端有限公司 | 一种数据处理方法和电子设备 |
CN116881089B (zh) * | 2023-09-07 | 2023-12-05 | 浙江保融科技股份有限公司 | 一种用于调用链状态回传状态下埋点及埋点管理的方法 |
CN117171058B (zh) * | 2023-11-03 | 2024-02-20 | 睿思芯科(深圳)技术有限公司 | 调用链实时追踪方法、系统及相关设备 |
CN117724664A (zh) * | 2024-02-18 | 2024-03-19 | 芯来智融半导体科技(上海)有限公司 | 数据写入方法、装置、设备及存储介质 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040054991A1 (en) * | 2002-09-17 | 2004-03-18 | Harres John M. | Debugging tool and method for tracking code execution paths |
JP2008059402A (ja) * | 2006-09-01 | 2008-03-13 | Movell Software:Kk | リアルタイム診断システムおよびリアルタイム診断方法 |
US20080168427A1 (en) * | 2007-01-10 | 2008-07-10 | Bestgen Robert J | Code Path Tracking |
CN102681886A (zh) * | 2011-04-14 | 2012-09-19 | 天脉聚源(北京)传媒科技有限公司 | 一种移动设备上用户行为追踪的方法和系统 |
CN103559123A (zh) * | 2013-10-24 | 2014-02-05 | 烽火通信科技股份有限公司 | 基于VxWorks操作系统的函数调用栈分析方法及装置 |
JP2014228889A (ja) * | 2013-05-17 | 2014-12-08 | 富士通株式会社 | 性能情報収集プログラム、情報処理装置及び性能情報収集方法 |
US8910124B1 (en) * | 2011-10-31 | 2014-12-09 | Google Inc. | Low-overhead method and apparatus for collecting function call trace data |
CN105242873A (zh) * | 2014-06-27 | 2016-01-13 | 阿里巴巴集团控股有限公司 | 云计算系统的性能数据的采集与存储方法及装置 |
CN106940681A (zh) * | 2017-03-11 | 2017-07-11 | 郑州云海信息技术有限公司 | 一种利用跟踪函数和解析工具调试存储软件的方法 |
CN108595319A (zh) * | 2018-03-30 | 2018-09-28 | 阿里巴巴集团控股有限公司 | 函数选取方法和服务器 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102043594A (zh) * | 2010-12-31 | 2011-05-04 | 中科海量存储技术(北京)有限公司 | 分布式环境下实现输入输出踪迹收集回放的系统和方法 |
JP6119535B2 (ja) * | 2013-09-30 | 2017-04-26 | 富士通株式会社 | トレース方法、処理プログラム、および情報処理装置 |
CN106909431A (zh) * | 2015-12-22 | 2017-06-30 | 阿里巴巴集团控股有限公司 | 定位函数性能问题的方法及装置 |
CN106649084B (zh) * | 2016-09-14 | 2019-05-24 | 腾讯科技(深圳)有限公司 | 函数调用信息的获取方法及装置、测试设备 |
CN109344083B (zh) * | 2018-11-05 | 2022-07-08 | 郑州云海信息技术有限公司 | 一种程序调试方法、装置、设备及可读存储介质 |
-
2020
- 2020-03-26 CN CN202010225986.8A patent/CN113448815B/zh active Active
-
2021
- 2021-03-16 WO PCT/CN2021/081046 patent/WO2021190354A1/zh active Application Filing
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040054991A1 (en) * | 2002-09-17 | 2004-03-18 | Harres John M. | Debugging tool and method for tracking code execution paths |
JP2008059402A (ja) * | 2006-09-01 | 2008-03-13 | Movell Software:Kk | リアルタイム診断システムおよびリアルタイム診断方法 |
US20080168427A1 (en) * | 2007-01-10 | 2008-07-10 | Bestgen Robert J | Code Path Tracking |
CN102681886A (zh) * | 2011-04-14 | 2012-09-19 | 天脉聚源(北京)传媒科技有限公司 | 一种移动设备上用户行为追踪的方法和系统 |
US8910124B1 (en) * | 2011-10-31 | 2014-12-09 | Google Inc. | Low-overhead method and apparatus for collecting function call trace data |
JP2014228889A (ja) * | 2013-05-17 | 2014-12-08 | 富士通株式会社 | 性能情報収集プログラム、情報処理装置及び性能情報収集方法 |
CN103559123A (zh) * | 2013-10-24 | 2014-02-05 | 烽火通信科技股份有限公司 | 基于VxWorks操作系统的函数调用栈分析方法及装置 |
CN105242873A (zh) * | 2014-06-27 | 2016-01-13 | 阿里巴巴集团控股有限公司 | 云计算系统的性能数据的采集与存储方法及装置 |
CN106940681A (zh) * | 2017-03-11 | 2017-07-11 | 郑州云海信息技术有限公司 | 一种利用跟踪函数和解析工具调试存储软件的方法 |
CN108595319A (zh) * | 2018-03-30 | 2018-09-28 | 阿里巴巴集团控股有限公司 | 函数选取方法和服务器 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114826639A (zh) * | 2021-11-01 | 2022-07-29 | 中国工商银行股份有限公司 | 基于函数调用链跟踪的应用攻击检测方法及装置 |
CN114826639B (zh) * | 2021-11-01 | 2024-03-19 | 中国工商银行股份有限公司 | 基于函数调用链跟踪的应用攻击检测方法及装置 |
CN114115746A (zh) * | 2021-12-02 | 2022-03-01 | 北京乐讯科技有限公司 | 一种用户态存储系统的全链路追踪装置 |
CN114398296A (zh) * | 2022-03-24 | 2022-04-26 | 荣耀终端有限公司 | 用于问题定位的方法和终端设备 |
CN114936040A (zh) * | 2022-05-31 | 2022-08-23 | 北京达佳互联信息技术有限公司 | 程序数据处理方法、装置、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2021190354A1 (zh) | 2021-09-30 |
CN113448815B (zh) | 2022-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113448815B (zh) | 一种采集追踪trace调用链的方法和电子设备 | |
CN110597512B (zh) | 显示用户界面的方法及电子设备 | |
CN113994317A (zh) | 一种用户界面布局方法及电子设备 | |
WO2022100221A1 (zh) | 检索处理方法、装置及存储介质 | |
CN114371985A (zh) | 自动化测试方法、电子设备及存储介质 | |
CN116048933B (zh) | 一种流畅度检测方法 | |
WO2022253158A1 (zh) | 一种用户隐私保护方法及装置 | |
CN115016866A (zh) | 应用启动时的数据处理方法、电子设备及存储介质 | |
WO2022127130A1 (zh) | 一种添加操作序列的方法、电子设备和系统 | |
WO2022100141A1 (zh) | 插件管理方法、系统及装置 | |
CN117079596B (zh) | 屏幕亮度调节方法、终端设备及存储介质 | |
CN115017002A (zh) | 频率预测方法和频率预测装置 | |
CN116467221B (zh) | 一种基于解释器的插桩方法、系统及相关电子设备 | |
CN116483734B (zh) | 一种基于编译器的插桩方法、系统及相关电子设备 | |
CN113961534B (zh) | 生成日志文件的方法和电子设备 | |
CN113590210A (zh) | 应用程序中的类验证方法和装置 | |
WO2021238376A1 (zh) | 功能包的加载方法、装置、服务器和电子设备 | |
CN116450473A (zh) | 踩内存问题的定位方法和电子设备 | |
CN115706769A (zh) | 数据传输控制方法及相关装置 | |
CN114816973A (zh) | 调试代码的方法、装置、电子设备和可读存储介质 | |
CN112527541A (zh) | 一种确定多核处理器中故障计算核的方法及电子设备 | |
CN116088955B (zh) | 进程处理方法和终端设备 | |
CN112286596A (zh) | 消息显示方法及电子设备 | |
CN116095685B (zh) | 关键信息的保护方法和终端设备 | |
CN117130688B (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 |