CN115470075B - 应用程序故障的检测方法、装置、电子设备及存储介质 - Google Patents
应用程序故障的检测方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115470075B CN115470075B CN202211131677.XA CN202211131677A CN115470075B CN 115470075 B CN115470075 B CN 115470075B CN 202211131677 A CN202211131677 A CN 202211131677A CN 115470075 B CN115470075 B CN 115470075B
- Authority
- CN
- China
- Prior art keywords
- address information
- target
- event
- thread
- application program
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3055—Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例提供了一种应用程序故障的检测方法、装置、电子设备及存储介质,涉及故障检测技术领域。该方法包括:启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。本申请实施例通过第一监控线程监听主线程的第一事件和第二事件,实现了及时确定应用程序是否卡顿,并在应用程序卡顿时,及时定位导致应用程序卡顿的目标代码段,以使得研发人员及时修复目标代码段。
Description
技术领域
本申请涉及故障检测技术领域,具体而言,本申请涉及一种应用程序故障的检测方法、装置、电子设备及存储介质。
背景技术
在IOS操作系统中,主线程是负责用户界面刷新与绘制的重要线程,用户所看到的界面内容,以及和界面进行的所有交互,比如点击按钮、滑动等交互,都是主线程在进行处理,因此,若主线程卡顿,则会导致应用程序的界面卡顿。
现有方案一般通过主线程的日志来判断应用程序的主线程是否卡顿,然而,主线程的日志是海量的,通过分析主线程的日志并不能及时有效的定位导致主线程卡顿的代码段,因此,如何快速有效的定位导致主线程卡顿的代码段是一个亟待解决的问题。
发明内容
本申请实施例提供了一种应用程序故障的检测方法、装置、电子设备、计算机可读存储介质及计算机程序产品,用于解决通过主线程日志无法及时有效定位导致主线程卡顿的代码段的技术问题。
根据本申请实施例的第一方面,提供了一种应用程序故障的检测方法该方法包括:
启动第一监控线程,第一监控线程用于监听应用程序的主线程的第一事件和第二事件,第一事件用于表征主线程结束休眠,第二事件用于表征主线程开始休眠;
若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;
获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。
在一个可能的实现方式中,确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,包括:
若接收到第一监控线程发送的第一通知消息,则生成并启动目标定时器;第一通知消息用于告知第一监控线程监听到第一事件;
当目标定时器的启动时长等于预设时长时,目标定时器被触发;
响应于目标定时器被触发,若确定在目标定时器被触发之前未接收到第一监控线程发送的第二通知消息,则确定未监听到第二事件;第二通知消息用于告知第一监控线程监听到第二事件。
在一个可能的实现方式中,响应于目标定时器被触发之后,还包括:
若确定在目标定时器被触发之前接收到第一监控线程发送的第二通知消息,删除目标定时器。
在一个可能的实现方式中,获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段,包括:
获取并上报主线程的调用堆栈信息至应用程序的服务器,以使服务器根据调用堆栈信息确定导致主线程卡顿的目标代码段的目标地址信息,并通过服务器在应用程序的源码中确定目标地址信息对应的目标代码段;
调用堆栈信息包括主线程在预设时长间隔内调用的目标代码段的目标地址信息。
在一个可能的实现方式中,目标地址信息为机器语言格式;
通过服务器在应用程序的源码中确定目标地址信息对应的目标代码段,包括:
通过服务器将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息,根据自然语言格式的目标地址信息在应用程序的源码中确定目标代码段。
在一个可能的实现方式中,通过服务器将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息,包括:
通过服务器获取编译应用程序时产生的字典文件,字典文件中包括机器语言格式的候选地址信息和自然语言格式的候选地址信息之间的映射关系;候选地址信息为目标程序的源码中的代码段在源码中的地址信息;
通过服务器调用预设工具,指示预设工具根据映射关系确定并返回机器语言格式的目标地址信息对应的自然语言格式的目标地址信息。
在一个可能的实现方式中,第一事件基于以下至少一种操作被唤醒:用户与应用程序的交互操作;回调函数被调用的操作。
根据本申请实施例的第二方面,提供了一种应用程序故障的检测装置,该装置包括:
启动模块,用于启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;
卡顿确定模块,用于若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;
目标代码段确定模块,用于根获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息目标代码段。
根据本申请实施例的第三方面,提供了一种电子设备,该电子设备包括存储器、处理器及存储在存储器上的计算机程序,处理器执行程序时实现如第一方面所提供的方法的步骤。
根据本申请实施例的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
根据本申请实施例的第五方面,提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中,当计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行实现如第一方面所提供的方法的步骤。
本申请实施例提供的技术方案带来的有益效果是:本申请实施例通过启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。本申请实施例通过第一监控线程监听主线程的第一事件和第二事件,实现了及时确定应用程序是否卡顿,并在应用程序卡顿时,及时定位导致应用程序卡顿的目标代码段,以使得研发人员及时修复目标代码段,避免应用程序长时间处于卡顿状态。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种应用程序故障的检测方法的流程示意图;
图2为本申请实施例提供的又一种应用程序故障的检测方法的流程示意图;
图3为本申请实施例提供的一种应用程序故障的检测装置的结构示意图;
图4为本申请实施例提供的一种数据交互系统中进行数据交互的流程示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请涉及的几个名词进行介绍和解释:
主线程(Main Thread)是应用程序开始时就执行的,主线程是负责用户界面刷新与绘制的重要线程,用户所看到的界面内容,以及和界面进行的所有交互,比如点击按钮、滑动等交互,都是主线程在进行处理。
dsym文件是指具有调试信息的文件,为了方便找回Crash崩溃对应的dsym文件和还原堆栈,建议每次构建或者发布应用程序的时候,备份好dsym文件。
在IOS操作系统中,主线程是负责用户界面刷新与绘制的重要线程,用户所看到的界面内容,以及和界面进行的所有交互,比如点击按钮、滑动等交互,都是主线程在进行处理,因此,若主线程卡顿,则会导致应用程序的界面卡顿。
现有方案一般通过监控并分析主线程的日志来判断应用程序的主线程是否卡顿,然而,主线程的日志是海量的,通过监控并分析主线程的日志并不能及时有效的定位导致主线程卡顿的代码段,因此,如何快速有效的定位导致主线程卡顿的代码段是一个亟待解决的问题。
本申请提供的应用程序故障的检测方法、装置、电子设备、计算机可读存储介质以及计算机程序产品,旨在解决现有技术的如上技术问题。
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
本申请实施例中提供了一种应用程序故障的检测方法,该方法的主体可以为用于检测应用程序卡顿的软件开发工具包SDK(Software Development Kit,软件开发工具包),该SDK部署于应用程序,应用程序可部署于任意类型的终端,如手机终端、车载终端等,在应用程序启动后,该SDK会持续检测该应用程序的卡顿。如图1所示,该方法包括:
步骤S101,启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠。
本申请实施例主线程可以为任意应用程序的主线程,在应用程序启动后,主线程就开始不断执行任务,当一个任务需要执行时,主线程会被唤醒,结束休眠,当一个任务执行完毕,主线程会重新进入休眠。
IOS操作系统中,每一个线程都有与之对应的runloop,这个runloop就是该线程的事件处理循环,让线程可以在有任务的时候处理任务,没有任务的时候休眠,避免cpu持续运行,节约电力。
runloop有两个关键的事件节点:kCFRunLoopAfterWaiting事件与kCFRunLoopBeforeWaiting事件,其中,kCFRunLoopAfterWaiting事件表征runlooprunloop结束休眠,即表征线程结束休眠,开始处理任务;kCFRunLoopBeforeWaiting事件表征runloop开始休眠,即表征主线程处理任务结束,重新进入休眠。
主线程卡顿则会导致应用程序卡顿,本申请实施例设置了第一监控线程来监控主线程的卡顿情况,第一监控线程独立于主线程,可实时监控主线程的卡顿情况,主线程卡顿的时候,主线程的代码是无法执行的,但并不影响第一监控线程的代码的执行,所以主线程的卡顿并不会导致该第一监控线程的卡顿。
第一监控线程常驻内存,且独立于主线程,主线程和第一监控线程随着应用程序的启动而启动,在第一监控线程启动后,会不断监听应用程序的主线程的第一事件和第二事件,第一事件即为上述的kCFRunLoopAfterWaiting事件,用于表征主线程结束休眠;第二事件即为上述的kCFRunLoopBeforeWaiting事件,用于表征主线程开始休眠。
步骤S102,若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿。
上述第一事件与第二事件之间的时间差表征线程处理任务的时间,若二者之间的时间差过长,则表明主线程处理任务的时间过长,主线程处理该任务时处于卡顿状态,由于第二事件表征主线程处理任务结束,则说明卡顿已经结束,然卡顿结束后并不能获取主线程的调用堆栈信息,只能通过日志一步步分析出主线程卡顿的原因,并不能及时有效的检测主线程的卡顿。
本申请实施例第一监控线程用于监听应用程序的主线程的第一事件和第二事件,在确定第一监控线程在监听到第一事件之后开始计时,若在预设时长期间未监听到第二事件,则表明主线程还未处理完当前任务,主线程处于卡顿状态。
具体的,第一监控线程监听到第一事件后,可发送第一通知消息,第一通知消息用于告知监听到主线程的第一事件,若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,表明主线程的当前任务还未处理完成,主线程处于卡顿状态。
值得注意的是,该预设时长可以是线程处理各个不同任务的平均时长,也可以是主线程多次处理相同任务的平均时长,本申请实施例对此不作限制。
步骤S103,获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。
本申请实施例在确定主线程卡顿后,可通过主线程的调用堆栈信息确定导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息在应用程序的源码中定位目标代码段,目标代码段即为出现bug的代码段。
在确定目标地址信息后,可将该目标地址信息发布至目标网页供研发人员查看,研发人员可直接根据该目标地址信息定位出现目标代码段,并在研发人员的终端展示目标代码段。
本申请实施例通过启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。本申请实施例通过第一监控线程监听主线程的第一事件和第二事件,实现及时确定应用程序是否卡顿,并在应用程序卡顿时,及时定位导致应用程序卡顿的目标代码段,以使得研发人员及时修复目标代码段,避免应用程序长时间处于卡顿状态。
本申请实施例中提供了一种可能的实现方式,确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,包括:
若接收到第一监控线程发送的第一通知消息,则生成并启动目标定时器;第一通知消息用于告知第一监控线程监听到第一事件;
当目标定时器的启动时长等于预设时长时,目标定时器被触发;
响应于目标定时器被触发,若确定在目标定时器被触发之前未接收到第一监控线程发送的第二通知消息,则确定未监听到第二事件;第二通知消息用于告知第一监控线程监听到第二事件。
本申请第一监控线程是独立于主线程的、常驻内存的、用于监控主线程的第一事件和第二事件的线程,第一监控检测在监听到第一事件后,会发送第一通知消息,表征监听到第一事件,即监听到主线程结束休眠,开始处理任务。
接收到第一监控线程发送的第一通知消息后,生成并启动目标定时器timer,目标定时器在启动后开始计时,目标定时器的启动时长为当前时刻距离目标定时器被启动的时刻之间的差值,当目标定时器的启动时长等于预设时长时,目标定时器被触发。
响应于目标定时器被触发,若确定在目标定时器被触发之前未接收到第一监控线程发送的第二通知消息,则确定未监听到第二事件;第二通知消息用于告知第一监控线程监听到第二事件。
第一监控线程未监听到第二事件,表明主线程处理当前任务的时长过长,主线程处于卡顿状态。
本申请实施例中提供了一种可能的实现方式,响应于目标定时器被触发之后,还包括:
若确定在目标定时器被触发之前接收到第一监控线程发送的第二通知消息,删除目标定时器。
本申请实施例若确定在目标定时器被触发之前接收到第一监控线程发送的第二通知消息,表明主线程已处理完当前的任务,主线程并未处于卡顿状态,应用程序也并未处于卡顿状态,此时可以删除当前的定时器。
本申请实施例中提供了一种可能的实现方式,获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段,包括:
获取并上报主线程的调用堆栈信息至述应用程序的服务器,以使服务器根据调用堆栈信息确定导致主线程卡顿的目标代码段的目标地址信息,并通过服务器在应用程序的源码中确定目标地址信息对应的目标代码段;
调用堆栈信息包括主线程在预设时长间隔内调用的目标代码段的目标地址信息。
当主线程卡顿结束后,是无法获取主线程的调用堆栈信息的,当主线程处于卡顿状态时,可以获取主线程的调用堆栈信息。
本申请实施例在确定主线程处于卡顿状态时,会获取主线程的调用堆栈信息,并上报该调用堆栈信息至后台,后台即为应用程序的服务器,即SDK上报主线程的调用堆栈信息至应用程序的服务器,应用程序的服务器在接收到该调用堆栈信息后,确定该主线程当前处于卡顿状态,并对上报的调用堆栈信息进行解析,从而确定导致应用程序卡顿的目标代码段在源码中的目标地址信息,并在应用程序的源码中确定目标地址信息对应的目标代码段。
本申请实施例可在主线程卡顿的时候通过NSThread的callStackSymbols方法来获取和收集线程的调用堆栈信息,调用堆栈信息包括主线程在预设时长间隔内调用的目标代码段的目标地址信息。
具体而言,调用堆栈信息中包括主线程在该预设时长中调用的函数,这些函数是以堆栈类的形式记录的,先调用的函数在底部,新调用的函数在顶部,调用堆栈信息中还包括调用的函数对应的目标代码段的目标地址信息;该目标地址信息为目标代码段在应用程序的源码中的地址信息。本申请实施例中提供了一种可能的实现方式,目标地址信息为机器语言格式;
通过服务器在应用程序的源码中确定目标地址信息对应的目标代码段,包括:
通过服务器将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息,根据自然语言格式的目标地址信息在应用程序的源码中确定目标代码段。
值得注意的是,计算机在运行时获取的信息都是用机器语言表征的,因此获取到的调用堆栈中的目标地址信息都是机器语言格式,是字符串类型的运行地址组,例如0x8783398498,研发人员无法直接根据确定机器语言格式的目标地址信息对应的目标代码段。
服务器在接收到SDK上报的主线程的调用堆栈信息后,将该调用堆栈信息中的将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息,自然语言格式的目标地址信息对于研发人员而言是可读的。
本申请实施例中提供了一种可能的实现方式,通过服务器将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息,包括:
通过服务器获取编译应用程序时产生的字典文件,字典文件中包括机器语言格式的候选地址信息和自然语言格式的候选地址信息之间的映射关系;候选地址信息为目标程序的源码中的代码段在源码中的地址信息;
通过服务器调用预设工具,指示预设工具根据映射关系确定并返回机器语言格式的目标地址信息对应的自然语言格式的目标地址信息。
本申请实施例服务器在将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息时,需根据编译时产生的字典文件进行转换。
字典文件即为dsym文件,dsym文件中包括机器语言格式的候选地址信息和自然语言格式的候选地址信息之间的映射关系;候选地址信息为目标程序的源码中的代码段在源码中的地址信息;通过服务器可调用预设工具,指示预设工具根据上述映射关系确定并返回机器语言格式的目标地址信息对应的自然语言格式的目标地址信息,自然语言格式的目标地址信息是可读的,研发人员可根据自然语言格式的目标地址信息直接在源码中定位目标代码段,并展示目标代码段。
具体的,例如主线程中的调用堆栈信息包括字符串0x8783398498,该字符串0x8783398498表征的是目标代码段的目标地址信息,需通过编译时产生的字典文件将上述字符串0x8783398498转换为自然语言格式的候选地址信息,字符串0x8783398498对应的自然语言格式的候选地址信息为35,表征主线程调用的是源码中第35行的函数对应的代码段。
本申请实施例中提供了一种可能的实现方式,预设工具包括:dwafdump工具和atosl工具中的至少一种。
具体的,mac系统上可以使用dwafdump,linux系统上可以使用atosl工具来实现转换。
本申请实施例中提供了一种可能的实现方式,第一事件基于以下至少一种操作被唤醒:用户与应用程序的交互操作;回调函数被调用的操作。
如图2所示,其示例性示出了本申请实施例提供的又一种应用程序故障的检测方法,包括:
步骤S201,启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;
步骤S202,若接收到第一监控线程发送的第一通知消息,则生成并启动目标定时器;第一通知消息用于告知第一监控线程监听到第一事件;
步骤S203,当目标定时器的启动时长等于预设时长时,目标定时器被触发;
步骤S204,响应于目标定时器被触发,判断目标定时器在被触发之前是否接收到第一监控线程发送的第二通知消息,若否,则执行步骤S205,若是,则执行步骤S205’;
步骤S205,确定主线程卡顿;
步骤S205’,删除目标定时器;
步骤S206,获取并上报主线程的调用堆栈信息至应用程序的服务器,以使得服务器根据调用堆栈信息确定导致主线程卡顿的目标代码段的目标地址信息;调用堆栈信息包括主线程在预设时长间隔内调用的目标代码段的目标地址信息;目标地址信息为机器语言格式;
步骤S206’(图中未显示),继续重复执行步骤S201-S205或S205’;
步骤S207,通过服务器获取编译应用程序时产生的字典文件,字典文件中包括机器语言格式的候选地址信息和自然语言格式的候选地址信息之间的映射关系;候选地址信息为目标程序的源码中的代码段在源码中的地址信息;
步骤S208,通过服务器调用预设工具,指示预设工具根据映射关系确定并返回机器语言格式的目标地址信息对应的自然语言格式的目标地址信息。
上述步骤S201-步骤S208的具体实施过程和前述实施例一致,本申请实施例在此不再进行过多赘述。
本申请实施例提供了一种应用程序故障的检测装置,如图3所示,该应用程序故障的检测装置30可以包括:
启动模块310,用于启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;
卡顿确定模块320,用于若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;
目标代码段确定模块330,用于获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。
本申请实施例通过本申请实施例通过启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。本申请实施例通过第一监控线程监听主线程的第一事件和第二事件,实现了及时确定应用程序是否卡顿,并在应用程序卡顿时,及时定位导致应用程序卡顿的目标代码段,以使得研发人员及时修复目标代码段,避免应用程序长时间处于卡顿状态。
本申请实施例中提供了一种可能的实现方式,卡顿确定模块包括:
目标定时器生成子模块,用于若接收到第一监控线程发送的第一通知消息,则生成并启动目标定时器;第一通知消息用于告知第一监控线程监听到第一事件;当目标定时器的启动时长等于预设时长时,目标定时器被触发;
触发响应子模块,用于响应于目标定时器被触发,若确定在目标定时器被触发之前未接收到第一监控线程发送的第二通知消息,则确定未监听到第二事件;第二通知消息用于告知第一监控线程监听到第二事件。
本申请实施例中提供了一种可能的实现方式,触发响应子模块还包括:若确定在目标定时器被触发之前接收到第一监控线程发送的第二通知消息,删除目标定时器。
本申请实施例中提供了一种可能的实现方式,目标代码段确定具体用于获取并上报主线程的调用堆栈信息至应用程序的服务器,以使服务器根据调用堆栈信息确定导致主线程卡顿的目标代码段的目标地址信息,并通过服务器在应用程序的源码中确定目标地址信息对应的目标代码段;调用堆栈信息包括主线程在预设时长间隔内调用的目标代码段的目标地址信息。
本申请实施例中提供了一种可能的实现方式,目标地址信息为机器语言格式;
目标代码段确定模块具体通过服务器用于将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息,根据自然语言格式的目标地址信息在应用程序的源码中确定目标代码段。
本申请实施例中提供了一种可能的实现方式,目标代码段确定模块包括:
字典文件获取子模块,用于通过服务器获取编译应用程序时产生的字典文件,字典文件中包括机器语言格式的候选地址信息和自然语言格式的候选地址信息之间的映射关系;候选地址信息为目标程序的源码中的代码段在源码中的地址信息;
目标地址信息确定子模块,用于通过服务器调用预设工具,指示预设工具根据映射关系确定并返回机器语言格式的目标地址信息对应的自然语言格式的目标地址信息。
本申请实施例中提供了一种可能的实现方式,第一事件基于以下至少一种操作被唤醒:用户与应用程序的交互操作;回调函数被调用的操作。
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
本申请实施例提供了一种数据交互系统中进行数据交互的流程示意图,如图4所示,该数据交互系统包括部署于应用程序的SDK和应用程序的服务器;
SDK用于执行以下操作:
步骤S401,启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;
步骤S402,若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;
步骤S403,获取并上报主线程的调用堆栈信息至应用程序的服务器;
服务器用于执行以下操作:
步骤S404,接收SDK上报的主线程的调用堆栈信息,获取编译应用程序时产生的字典文件,字典文件中包括机器语言格式的候选地址信息和自然语言格式的候选地址信息之间的映射关系;候选地址信息为目标程序的源码中的代码段在源码中的地址信息;
步骤S405,调用预设工具,指示预设工具根据映射关系确定并返回机器语言格式的目标地址信息对应的自然语言格式的目标地址信息,根据目标地址信息确定目标代码段。
本申请实施例中提供了一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,该处理器执行上述计算机程序以实现应用程序故障的检测方法的步骤,与相关技术相比可实现:本申请实施例通过
本申请实施例通过本申请实施例通过启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。本申请实施例通过第一监控线程监听主线程的第一事件和第二事件,实现了及时确定应用程序是否卡顿,并在应用程序卡顿时,及时定位导致应用程序卡顿的目标代码段,以使得研发人员及时修复目标代码段,避免应用程序长时间处于卡顿状态。
在一个可选实施例中提供了一种电子设备,如图5所示,图5所示的电子设备5000包括:处理器5001和存储器5003。其中,处理器5001和存储器5003相连,如通过总线5002相连。可选地,电子设备5000还可以包括收发器5004,收发器5004可以用于该电子设备与其他电子设备之间的数据交互,如数据的发送和/或数据的接收等。需要说明的是,实际应用中收发器5004不限于一个,该电子设备5000的结构并不构成对本申请实施例的限定。
处理器5001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器5001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线5002可包括一通路,在上述组件之间传送信息。总线5002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线5002可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器5003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质、其他磁存储设备、或者能够用于携带或存储计算机程序并能够由计算机读取的任何其他介质,在此不做限定。
存储器5003用于存储执行本申请实施例的计算机程序,并由处理器5001来控制执行。处理器5001用于执行存储器5003中存储的计算机程序,以实现前述方法实施例所示的步骤。
其中,电子设备包可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图5所示的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。与现有技术相比可实现:本申请实施例通过
本申请实施例通过本申请实施例通过启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。本申请实施例通过第一监控线程监听主线程的第一事件和第二事件,实现了及时确定应用程序是否卡顿,并在应用程序卡顿时,及时定位导致应用程序卡顿的目标代码段,以使得研发人员及时修复目标代码段,避免应用程序长时间处于卡顿状态。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。与现有技术相比可实现:本申请实施例通过
本申请实施例通过本申请实施例通过启动第一监控线程;第一监控线程用于监听应用程序的主线程的第一事件和第二事件;第一事件用于表征主线程结束休眠;第二事件用于表征主线程开始休眠;若确定第一监控线程在监听到第一事件之后的预设时长期间未监听到第二事件,则确定主线程卡顿;获取导致主线程卡顿的目标代码段的目标地址信息,根据目标地址信息确定目标代码段。本申请实施例通过第一监控线程监听主线程的第一事件和第二事件,实现了及时确定应用程序是否卡顿,并在应用程序卡顿时,及时定位导致应用程序卡顿的目标代码段,以使得研发人员及时修复目标代码段,避免应用程序长时间处于卡顿状态。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。
Claims (8)
1.一种应用程序故障的检测方法,其特征在于,包括:
启动第一监控线程,所述第一监控线程常驻内存,且独立于主线程,主线程和第一监控线程随着应用程序的启动而启动,所述第一监控线程用于监听应用程序的主线程的第一事件和第二事件,所述第一事件用于表征所述主线程结束休眠,所述第二事件用于表征所述主线程开始休眠;
若确定所述第一监控线程在监听到所述第一事件之后的预设时长期间未监听到所述第二事件,则确定所述主线程卡顿;
获取导致所述主线程卡顿的目标代码段的目标地址信息,根据所述目标地址信息确定目标代码段,其中包括:获取并上报所述主线程的调用堆栈信息至所述应用程序的服务器,以使所述服务器根据所述调用堆栈信息确定导致所述主线程卡顿的目标代码段的目标地址信息,并通过所述服务器在所述应用程序的源码中确定所述目标地址信息对应的目标代码段;
所述调用堆栈信息包括所述主线程在所述预设时长间隔内调用的函数以及所述函数对应的目标代码段的目标地址信息;
所述目标地址信息为机器语言格式;
所述通过所述服务器在所述应用程序的源码中确定所述目标地址信息对应的目标代码段,包括:
通过所述服务器将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息,根据所述自然语言格式的目标地址信息在所述应用程序的源码中确定所述目标代码段。
2.根据权利要求1所述的方法,其特征在于,所述确定所述第一监控线程在监听到所述第一事件之后的预设时长期间未监听到所述第二事件,包括:
若接收到所述第一监控线程发送的第一通知消息,则生成并启动目标定时器;所述第一通知消息用于告知所述第一监控线程监听到所述第一事件;
当所述目标定时器的启动时长等于所述预设时长时,所述目标定时器被触发;
响应于所述目标定时器被触发,若确定在所述目标定时器被触发之前未接收到所述第一监控线程发送的第二通知消息,则确定未监听到所述第二事件;所述第二通知消息用于告知所述第一监控线程监听到所述第二事件。
3.根据权利要求2所述的方法,其特征在于,所述响应于所述目标定时器被触发之后,还包括:
若确定在所述目标定时器被触发之前接收到所述第一监控线程发送的第二通知消息,删除所述目标定时器。
4.根据权利要求1所述的方法,其特征在于,所述通过所述服务器将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息,包括:
通过所述服务器获取编译所述应用程序时产生的字典文件,所述字典文件中包括机器语言格式的候选地址信息和自然语言格式的候选地址信息之间的映射关系;所述候选地址信息为目标程序的源码中的代码段在所述源码中的地址信息;
通过所述服务器调用预设工具,指示所述预设工具根据所述映射关系确定并返回所述机器语言格式的目标地址信息对应的自然语言格式的目标地址信息。
5.根据权利要求1所述的方法,其特征在于,所述第一事件基于以下至少一种操作被唤醒:用户与所述应用程序的交互操作;回调函数被调用的操作。
6.一种应用程序故障的检测装置,其特征在于,包括:
启动模块,用于启动第一监控线程,所述第一监控线程常驻内存,且独立于主线程,主线程和第一监控线程随着应用程序的启动而启动,所述第一监控线程用于监听应用程序的主线程的第一事件和第二事件,所述第一事件用于表征所述主线程结束休眠,所述第二事件用于表征所述主线程开始休眠;
卡顿确定模块,用于若确定所述第一监控线程在监听到所述第一事件之后的预设时长期间未监听到所述第二事件,则确定所述主线程卡顿;
目标代码段确定模块,用于获取导致所述主线程卡顿的目标代码段的目标地址信息,根据所述目标地址信息确定目标代码段,其中包括:获取并上报所述主线程的调用堆栈信息至所述应用程序的服务器,以使所述服务器根据所述调用堆栈信息确定导致所述主线程卡顿的目标代码段的目标地址信息,并通过所述服务器在所述应用程序的源码中确定所述目标地址信息对应的目标代码段;
所述调用堆栈信息包括所述主线程在所述预设时长间隔内调用的函数以及所述函数对应的目标代码段的目标地址信息;
其中,所述目标地址信息为机器语言格式;
所述通过所述服务器在所述应用程序的源码中确定所述目标地址信息对应的目标代码段,包括:
通过所述服务器将机器语言格式的目标地址信息转换为自然语言格式的目标地址信息,根据所述自然语言格式的目标地址信息在所述应用程序的源码中确定所述目标代码段。
7.一种电子设备,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求1-5任一项所述方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-5任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211131677.XA CN115470075B (zh) | 2022-09-15 | 2022-09-15 | 应用程序故障的检测方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211131677.XA CN115470075B (zh) | 2022-09-15 | 2022-09-15 | 应用程序故障的检测方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115470075A CN115470075A (zh) | 2022-12-13 |
CN115470075B true CN115470075B (zh) | 2023-08-29 |
Family
ID=84333786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211131677.XA Active CN115470075B (zh) | 2022-09-15 | 2022-09-15 | 应用程序故障的检测方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115470075B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117093441B (zh) * | 2023-07-12 | 2024-10-01 | 荣耀终端有限公司 | 电子设备的性能监控方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109902011A (zh) * | 2019-02-28 | 2019-06-18 | 深圳乐信软件技术有限公司 | 一种软件卡顿监测方法、装置、设备和存储介质 |
WO2021027365A1 (zh) * | 2019-08-13 | 2021-02-18 | 平安科技(深圳)有限公司 | 事件监控方法、装置、计算机设备和存储介质 |
CN113835985A (zh) * | 2021-09-27 | 2021-12-24 | 北京基调网络股份有限公司 | 一种监测卡顿、分析卡顿原因的方法、装置及设备 |
CN114691448A (zh) * | 2020-12-31 | 2022-07-01 | 北京字跳网络技术有限公司 | 应用程序卡顿监测方法、装置、设备及存储介质 |
-
2022
- 2022-09-15 CN CN202211131677.XA patent/CN115470075B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109902011A (zh) * | 2019-02-28 | 2019-06-18 | 深圳乐信软件技术有限公司 | 一种软件卡顿监测方法、装置、设备和存储介质 |
WO2021027365A1 (zh) * | 2019-08-13 | 2021-02-18 | 平安科技(深圳)有限公司 | 事件监控方法、装置、计算机设备和存储介质 |
CN114691448A (zh) * | 2020-12-31 | 2022-07-01 | 北京字跳网络技术有限公司 | 应用程序卡顿监测方法、装置、设备及存储介质 |
CN113835985A (zh) * | 2021-09-27 | 2021-12-24 | 北京基调网络股份有限公司 | 一种监测卡顿、分析卡顿原因的方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN115470075A (zh) | 2022-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109284269B (zh) | 异常日志分析方法、装置、存储介质及服务器 | |
CN109800159B (zh) | 程序调试方法、程序调试装置、终端设备及存储介质 | |
US8250543B2 (en) | Software tracing | |
CN108197032B (zh) | Ios应用的主线程卡顿监测方法、介质、设备及系统 | |
CN110417575A (zh) | 运维监控平台的告警方法、装置和计算机设备 | |
CN115470075B (zh) | 应用程序故障的检测方法、装置、电子设备及存储介质 | |
CN105005526A (zh) | 一种信息提醒方法及移动终端 | |
CN108628739A (zh) | 一种对Lua脚本进行调试的方法、客户端、服务器及调试器 | |
CN112241362A (zh) | 一种测试方法、装置、服务器及存储介质 | |
CN112749013A (zh) | 线程负载的检测方法、装置、电子设备及存储介质 | |
CN114844768A (zh) | 信息分析方法、装置及电子设备 | |
CN112634973A (zh) | 存储介质的数据重读方法、系统、终端设备以及存储介质 | |
CN115686961A (zh) | 处理器测试方法、装置及电子设备 | |
US20240036969A1 (en) | Method and apparatus for detecting application freezing problem, and device and storage medium | |
CN109189677B (zh) | 一种针对变量数值更新状态的测试方法及装置 | |
CN111045926B (zh) | 一种应用程序卡顿的检测方法、装置、介质和电子设备 | |
CN115952491B (zh) | hook目标函数的方法、装置、电子设备及介质 | |
CN111552618A (zh) | 一种收集日志的方法及设备 | |
CN113687942B (zh) | 检测方法、装置及电子设备 | |
CN106657316B (zh) | 一种消息撤回方法及装置 | |
CN111382017A (zh) | 故障查询方法、装置,服务器及存储介质 | |
CN115543759A (zh) | 操作系统的日志查阅方法、装置、电子设备及存储介质 | |
CN114610530A (zh) | 业务系统的容灾切换方法、装置、电子设备及存储介质 | |
CN114385457A (zh) | 应用程序数据采集方法、装置、设备及存储介质 | |
CN105335657A (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 |