CN110221928B - 信息记录方法、装置、终端及存储介质 - Google Patents

信息记录方法、装置、终端及存储介质 Download PDF

Info

Publication number
CN110221928B
CN110221928B CN201910502219.4A CN201910502219A CN110221928B CN 110221928 B CN110221928 B CN 110221928B CN 201910502219 A CN201910502219 A CN 201910502219A CN 110221928 B CN110221928 B CN 110221928B
Authority
CN
China
Prior art keywords
target
thread
stack
information
trace
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
CN201910502219.4A
Other languages
English (en)
Other versions
CN110221928A (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.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp 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 Guangdong Oppo Mobile Telecommunications Corp Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority to CN201910502219.4A priority Critical patent/CN110221928B/zh
Publication of CN110221928A publication Critical patent/CN110221928A/zh
Application granted granted Critical
Publication of CN110221928B publication Critical patent/CN110221928B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例公开了一种信息记录方法、装置、终端及存储介质,属于终端技术领域。所述方法包括:跟踪线程获取与SS进程进行通信的至少一个目标进程,跟踪线程是SS进程中的线程;当检测到***异常时,看门狗线程向跟踪线程发送异常通知消息,看门狗线程是SS进程中的线程;当接收到异常通知消息时,跟踪线程获取各个目标进程对应的目标栈回溯信息;记录目标栈回溯信息。本实施例中,由于记录到发送***异常前与SS进程通信的目标进程的目标栈回溯信息,因此后续能够基于目标栈回溯信息排查出由目标进程卡死导致的***异常,有助于提高***异常原因的排查效率。

Description

信息记录方法、装置、终端及存储介质
技术领域
本申请实施例涉及终端技术领域,特别涉及一种信息记录方法、装置、终端及存储介质。
背景技术
安卓(Android)***架构主要分为四部分,分别为Linux内核层、***运行库层(Libraries)、应用框架层(Application Framework)和应用层(Applications)。其中,应用框架层提供了构建应用程序时可能用到的各种接口,开发者也可以通过使用这些接口来构建自己的应用程序。
相关技术中,应用框架层的***服务(System Server,SS)进程中设置有看门狗(WatchDog)线程,看门狗线程用于监听应用框架层发生的***异常,在检测到***异常时,抓取并记录SS进程中线程的线程状态以及栈回溯信息(call stack trace),以便后续进行异常分析。
发明内容
本申请实施例提供了一种信息记录方法、装置、终端及存储介质。所述技术方案如下:
一方面,本申请实施例提供了一种信息记录方法,所述方法包括:
跟踪线程获取与SS进程进行通信的至少一个目标进程,所述跟踪线程是所述SS进程中的线程;
当检测到***异常时,看门狗线程向所述跟踪线程发送异常通知消息,所述看门狗线程是所述SS进程中的线程;
当接收到所述异常通知消息时,所述跟踪线程获取各个所述目标进程对应的目标栈回溯信息;
记录所述目标栈回溯信息。
另一方面,本申请实施例提供了一种信息记录装置,所述装置包括:
跟踪模块,用于获取与SS进程进行通信的至少一个目标进程,所述跟踪线程是所述SS进程中的线程;
看门狗模块,用于当检测到***异常时,向所述跟踪模块发送异常通知消息,所述看门狗线程是所述SS进程中的线程;
跟踪模块,还用于当接收到所述异常通知消息时,获取各个所述目标进程对应的目标栈回溯信息;
记录模块,用于记录所述目标栈回溯信息。
另一方面,本申请实施例提供了一种终端,所述终端包括:终端包括处理器和存储器;所述存储器存储有至少一条指令,所述至少一条指令用于被所述处理器执行以实现如上述方面所述的信息记录方法。
另一方面,提供了一种计算机可读存储介质,所述存储介质存储有至少一条指令,所述至少一条指令用于被处理器执行以实现如上述方面所述的信息记录方法。
另一方面,还提供了一种计算机程序产品,该计算机程序产品存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现上述方面所述的信息记录方法。
本申请实施例中,通过在SS进程中创建跟踪线程,并利用跟踪线程获取与SS进程进行通信的至少一个目标进程,从而在接收到看门狗线程发送的异常通知消息时,获取各个目标进程对应的目标栈回溯信息,并对该目标栈回溯信息进行记录;由于记录到发送***异常前与SS进程通信的目标进程的目标栈回溯信息,因此后续能够基于目标栈回溯信息排查出由目标进程卡死导致的***异常,有助于提高***异常原因的排查效率。
附图说明
图1示出了本申请一个示例性实施例提供的终端的结构方框图;
图2示出了本申请一个示例性实施例示出的信息记录方法的流程图;
图3示出了本申请另一个示例性实施例示出的信息记录方法的流程图;
图4是图3所示信息记录方法实施过程的示意图;
图5示出了本申请一个实施例提供的信息记录装置的结构框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
参考图1和图2所示,其示出了本申请一个示例性实施例提供的终端100的结构方框图。该终端100可以是手机、平板电脑、笔记本电脑和电子书等。本申请中的终端100可以包括一个或多个如下部件:中央处理器110、存储器120和显示屏130。
处理器110可以包括一个或者多个处理核心。处理器110利用各种接口和线路连接整个终端100内的各个部分,通过运行或执行存储在存储器120内的指令、程序、代码集或指令集,以及调用存储在存储器120内的数据,执行终端100的各种功能和处理数据。可选地,处理器110可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器110可集成中央处理器(CentralProcessing Unit,CPU)、图形处理器(Graphics Processing Unit,GPU)、神经网络处理器(Neural-network Processing Unit,NPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作***、用户界面和应用程序等;GPU用于负责触摸显示屏130所需要显示的内容的渲染和绘制;NPU用于实现人工智能(Artificial Intelligence,AI)功能;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器110中,单独通过一块芯片进行实现。
存储器120可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。可选地,该存储器120包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。存储器120可用于存储指令、程序、代码、代码集或指令集。存储器120可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作***的指令、用于至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现下述各个方法实施例的指令等;存储数据区可存储根据终端100的使用所创建的数据(比如音频数据、电话本)等。
以操作***为安卓(Android)***为例,存储器120中存储的程序和数据如图1所示,存储器120中存储有Linux内核层220、***运行库层240、应用框架层260和应用层280。Linux内核层220为终端100的各种硬件提供了底层的驱动,如显示驱动、音频驱动、摄像头驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。***运行库层240通过一些C/C++库来为Android***提供了主要的特性支持。如SQLite库提供了数据库的支持,OpenGL/ES库提供了3D绘图的支持,Webkit库提供了浏览器内核的支持等。在***运行库层240中还提供有Android运行时库(Android Runtime),它主要提供了一些核心库,能够允许开发者使用Java语言来编写Android应用。应用框架层260提供了构建应用程序时可能用到的各种API,开发者也可以通过使用这些API来构建自己的应用程序,比如活动管理、窗口管理、视图管理、通知管理、内容提供者、包管理、通话管理、资源管理、定位管理。应用层280中运行有至少一个应用程序,这些应用程序可以是操作***自带的联系人程序、短信程序、时钟程序、相机应用等;也可以是第三方开发者所开发的应用程序,比如即时通信程序、相片美化程序等。
显示屏130用于显示用户界面的显示组件。可选的,该显示屏130还具有触控功能,用于接收用户使用手指、触摸笔等任何适合的物体在其上或附近的触摸操作。显示屏130通常设置在终端130的前面板。显示屏130可被设计成为全面屏、曲面屏、异型屏、双面屏或折叠屏。显示屏130还可被设计成为全面屏与曲面屏的结合,异型屏与曲面屏的结合,本实施例对此不加以限定。
除此之外,本领域技术人员可以理解,上述附图所示出的终端100的结构并不构成对终端100的限定,终端可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。比如,终端100中还包括射频电路、输入单元、传感器、音频电路、无线保真(Wireless Fidelity,WiFi)模块、电源、蓝牙模块等部件,在此不再赘述。
相关技术中,为了能够在发生***异常时,确定出SS进程中的异常线程,从而对异常线程进行问题排查和修正,开发人员在SS进程中创建看门狗线程,并利用看门狗线程记录***发生异常时,SS进程中各个线程的线程状态以及栈回溯信息,以便后续基于栈回溯信息进行线程异常分析。
采用上述方法,能够有效排查出SS进程中的异常进程,但是在应用过程中发现,***异常可能并不是由SS进程中线程异常导致,而是由与SS进程进行通信的其他进程卡死导致,这种情况下,采用上述方法无法确定***异常原因(因为SS进程中的线程并无异常),且由于***异常的复现概率较低,因此通过人工复现***异常,从而排查***异常原因的效率较低,且需要花费大量资源。
本申请实施例提供的方案中,通过在SS进程中创建新线程——跟踪线程,利用跟踪线程获取与SS进程进行通信的至少一个目标进程,从而发生***异常时,获取各个目标进程对应的目标栈回溯信息,并对该目标栈回溯信息进行记录,以便后续基于该目标栈回溯信息确定***异常是否由目标进程卡死导致。采用本申请实施例提供的方案,开发人员能够快速排查***异常原因,无需人工复现***异常,有助于提高排查***异常原因的效率。下面采用示意性的实施例进行说明。
请参考图2,其示出了本申请一个示例性实施例示出的信息记录方法的流程图。本实施例以该方法应用于图1所示的终端100来举例说明。该方法包括:
步骤201,跟踪线程获取与SS进程进行通信的至少一个目标进程,跟踪线程是SS进程中的线程。
本申请实施例中的跟踪线程为SS进程中新创建的线程,用于记录与SS进程进行通信的其他进程,可选的,SS进程运行过程中,SS线程保持运行状态,从而持续记录与SS进程进行通信的其他进程。示意性的,SS进程中新增有名为trackBinder的跟踪线程。
在一种可能的实施方式中,跟踪线程获取到至少一个目标进程的目标进程标识(Process ID,PID),该目标进程标识用于唯一标识目标进程。
步骤202,当检测到***异常时,看门狗线程向跟踪线程发送异常通知消息,看门狗线程是SS进程中的线程。
在一种可能的实施方式中,SS进程中的看门狗线程与跟踪线程具有通信功能,在检测到***异常时,看门狗线程除了需要抓取SS进程中线程的栈回溯信息外,还需要通过线程间通信机制,向跟踪线程发送异常通知消息,通知跟踪线程检测到当前发生***异常。
比如,看门狗线程通过安卓message机制向跟踪线程发送异常通知消息。
可选的,看门狗线程按照预定的检测周期(比如检测周期为30s/次)检测是否发生***异常,且向跟踪线程发送的异常通知消息中包括发生***异常的***异常时刻。本申请实施例并不对看门狗线程进行***异常检测的具体方式进行限定。
步骤203,当接收到异常通知消息时,跟踪线程获取各个目标进程对应的目标栈回溯信息。
为了便于后续排查***异常原因,跟踪线程在接收到异常通知消息后,获取各个目标进程对应的目标栈回溯信息,该目标栈回溯信息中包括目标进程中的函数栈(函数调用)。
通过该步骤,跟踪线程能够在发生***异常时,获取到与SS进程进行通信的进程的栈回溯信息,以便后续基于该栈回溯信息确定与SS进程通信的进程是否发生异常,进而导致***异常。
步骤204,记录目标栈回溯信息。
为了方便后续确定***异常原因,在一种可能的实施方式中,写入线程将获取到的目标栈回溯信息写入终端的数据分区的指定文件中,后续通过读取该指定文件即可分析***异常原因。比如,该写入线程可以为signalcatch线程。
综上所述,本申请实施例中,通过在SS进程中创建跟踪线程,并利用跟踪线程获取与SS进程进行通信的至少一个目标进程,从而在接收到看门狗线程发送的异常通知消息时,获取各个目标进程对应的目标栈回溯信息,并对该目标栈回溯信息进行记录;由于记录到发送***异常前与SS进程通信的目标进程的目标栈回溯信息,因此后续能够基于目标栈回溯信息排查出由目标进程卡死导致的***异常,有助于提高***异常原因的排查效率。
在一种可能的实施方式中,终端向服务器发送目标栈回溯信息,以便服务器用于根据目标栈回溯信息确定***异常原因。此外,终端还可以向服务器发送SS进程的栈回溯信息,以便服务器同时基于目标栈回溯信息和SS进程的栈回溯信息确定***异常原因。
可选的,当目标栈回溯信息指示存在函数栈异常时,确定目标进程异常导致***异常;当目标栈回溯信息指示函数栈正常,且SS进程中线程的栈回溯信息指示函数栈异常时,确定SS进程中线程异常导致***异常。
下面采用示意性的实施例,对上述信息记录方法中线程、进程之间的交互过程进行说明。
请参考图3,其示出了本申请另一个示例性实施例示出的信息记录方法的流程图。本实施例以该方法应用于图1所示的终端100来举例说明。该方法包括:
步骤301,跟踪线程获取SS进程的进程标识。
为了确定与SS进程进行通信的其他进程,跟踪线程首先需要获取SS进程当前的进程标识。
在一种可能的实施方式中,跟踪线程从进程控制块(Process Control Block,PCB)中获取SS进程的进程标识,其中,PCB为task_struct的结构体。本申请实施例并不对获取进程标识的具体方式进行限定。
在一个示意性的例子中,跟踪线程获取SS进程的进程标识为$pid。
步骤302,跟踪线程根据进程标识从粘合缓冲区(binder buffer)中查询与SS进程进行通信的目标进程。
由于在安卓***中,进程之间采用的通信方式通常为binder通信,因此跟踪线程从binder buffer中查询与SS进程进行通信的目标进程。其中,binder buffer记录有当前***中进行binder进程通信的各个进程。
在一种可能的实施方式中,跟踪线程根据SS进程的进程标识,在/d/binder/transactions文件中查询目标进程,该/d/binder/transactions文件记录当前***所有正在进行进程binder通信的进程集合。
步骤303,跟踪线程获取各个目标进程的目标进程标识。
在一个示意性的例子中,跟踪线程获取到目标进程的目标进程标识分别为:pid020、pid050、pid0110、pid090、pid030。
步骤304,跟踪线程将目标进程标识写入链表中。
由于***运行过程中,SS进程会与大量目标进程进行通信,而导致***异常的通常是最近与SS进程通信的目标进程,因此,为了提高后续定位异常目标进程的效率,跟踪线程采用链表存储获取到的目标进程标识,其中,该用于存储与SS进程进行通信的最近n个目标进程的目标进程标识,该链表的尺寸可以由开发人员设定。比如,该链表为双向循环链表,用于存储与SS进程进行通信的最近5个目标进程的目标进程标识。
当然,除了使用双向循环链表存储目标进程标识外,还可以采用其他符合先进先出原则的链表或存储结构存储目标进程标识,本申请实施例并不对此构成限定。
在一个示意性的例子中,跟踪线程第一次查询到的目标进程标识包括pid020、pid050、pid0110、pid090、pid030,由于链表的大小为5,因此第一次获取的五个目标进程标识均被写入链表;跟踪线程第二次查询到的目标进程标识包括pid040、pid050时,链表中的pid020和pid050出列,pid040和pid050被写入链表,此时链表中包括pid0110、pid090、pid030、pid040、pid050。
可选的,为了在记录目标进程的前提下,减小***压力,跟踪线程按照预定查询周期,从binder buffer中查询与SS进程进行通信的目标进程,即上述步骤301至304每个预定查询周期执行一次。
并且,为了保证能够记录到发生***异常时,正在与SS进程进行通信的目标进程,该预定查询周期与看门狗线程的检测周期相同,即跟踪线程记录目标线程与看门狗线程检测***异常保持同步。
在一个示意性的例子中,看门狗线程每30s进行一次***异常检测,SS进程每30s查询一次目标进程。
步骤305,当检测到***异常时,看门狗线程向跟踪线程发送异常通知消息,看门狗线程是SS进程中的线程。
在一种可能的实施方式中,看门狗线程按照检测周期进行***异常检测,并在检测到***异常时,通过线程间通信向跟踪线程发送异常通知消息。本步骤的实施方式可以参考上述步骤202,本实施例在此不再赘述。
步骤306,当接收到异常通知消息时,跟踪线程将链表中的目标进程标识写入目标数组。
为了能够在抓取目标进程的栈回溯信息的同时,继续记录与SS进程通信的进程,可选的,跟踪线程将链表中的目标进程标识写入目标数组,以便后续基于目标数组中的目标进程标识抓取栈回溯信息。
可选的,目标数组的数组大小与链表的大小一致,即目标数组用于存储n个目标进程标识。
可选的,跟踪线程将目标进程标识写入目标数组后,将链表中的数据清空,并继续通过上述步骤301至304向链表中写入目标进程的目标进程标识。
步骤307,跟踪线程根据目标数组向回溯栈抓取进程发送抓取指令。
在一种可能的实施方式中,跟踪线程首先唤醒回溯栈抓取进程,然后根据目标数组中的目标进程标识向回溯栈抓取进程发送抓取指令,指示回溯栈抓取进程抓取目标进程的目标栈回溯信息。
可选的,该回溯栈抓取进程为debuggerd进程。
可选的,跟踪线程发送的抓取指令中包括***异常时刻,以便回溯栈抓取线程基于***异常时刻抓取目标进程的目标栈回溯信息。
步骤308,回溯栈抓取进程根据抓取指令抓取各个目标进程在预定时长内的目标栈回溯信息。
相应的,回溯栈抓取进程根据目标进程标识抓取相应的目标栈回溯信息。
在一种可能的实施方式中,当抓取指令中包含***异常时刻时,回溯栈抓取进程基于***异常时刻抓取预定时长内的目标栈回溯信息,其中,该预定时长为***异常时刻之前的一段时长。比如,***异常时刻为10:00:00时,终端即获取9:59:00至10:00:00这一时间段内目标进程的目标栈回溯信息。
步骤309,回溯栈抓取进程向跟踪线程发送完成消息。
针对目标数组中各个目标进程完成栈回溯信息抓取后,回溯栈抓取线程向跟踪线程发送完成消息,告知跟踪线程已完成回溯栈信息抓取。
步骤310,当接收到完成消息时,跟踪线程清空目标数组。
相应的,为了在后续发生***异常时,能够正常抓取回溯栈信息,跟踪线程在接收到完成消息后,清空目标数组中的目标进程标识。
步骤311,跟踪线程向看门狗线程发送抓取通知消息。
为了使看门狗线程知悉已完成目标栈回溯信息抓取,从而抓取SS进程的栈回溯信息,跟踪线程接收到完成消息后,还需要向看门狗线程发送抓取通知消息。
步骤312,当接收到抓取通知消息时,看门狗线程抓取SS进程的栈回溯信息。
当然,当跟踪线程和看门狗线程异步抓取时,跟踪线程无需向看门狗线程发送抓取通知消息,看门狗线程也能够在检测到***异常时,自动抓取SS进程的栈回溯信息,本申请实施例对此不做限定。
通过上述步骤完成目标进程以及SS进程的栈回溯信息抓取后,针对记录栈回溯信息的方式,在一种可能的实施方式中,终端根据***异常时刻将目标栈回溯信息写入数据分区的第一文件,并根据***异常时刻将SS进程的栈回溯信息写入数据分区的第二文件中,其中,第一文件和第二文件可以是同一文件,也可以是不同文件。
可选的,回溯栈抓取进程抓取到目标栈回溯信息后,将目标栈回溯信息写入/data/tombstone/目录下的第一文件中。
当第一文件和第二文件为不同文件时,由于第一文件和第二文件均包含***异常时刻,因此后续可以根据***异常时刻从数据分区中获取匹配的第一文件和第二文件(同一***异常下记录的栈回溯信息),从而提高回溯***异常的效率。
本实施例中,跟踪线程按照预定查询周期查询与SS进程进行通信的目标进程,在实现记录目标进程的前提下,减小***压力;同时,跟踪线程将查询到的最近n个目标进程的进程标识写入链表中,在确保记录下正在与SS进程通信的目标进程的同时,减少链表中的数据量。
此外,终端根据***异常时刻将目标栈回溯信息以及SS进程的栈回溯信息写入数据分区的文件中,有助于后续基于***异常时刻获取相应的文件,从而提高***异常原因的排查效率。
在一个示意性的例子中,SS进程中的跟踪线程为trackBinder线程、回溯栈抓取进程为debuggerd进程,发生***异常时抓取目标回溯栈信息的过程如图4所示。
终端运行过程中,watchDog线程按照30s/次的周期进行***异常检测,Trackbinder线程按照30s/次的周期记录与SS进程进行通信的目标进程,其中,每次记录目标进程时,trackbinder线程获取SS进程的进程标识$PID,并根据$PID查询/d/binder/transactions文件41,得到当前与SS进程进行binder通信的目标进程,从而将目标进程的目标进程标识写入双向循环链表42。
当watchDog线程检测到***异常时,即向trackbinder线程发送异常通知消息,trackbinder线程接收到异常通知消息后,将双向循环链表42中的目标进程标识写入数组43,并向debuggerd进程发送抓取指令。debuggerd进程接收到抓取指令后,根据抓取指令中的目标进程标识,抓取目标进程的目标栈回溯信息,并在完成抓取后,向trackbinder线程发送完成消息。trackbinder线程接收到完成消息后,即清空数组43中的数据,并向watchDog线程发送抓取通知消息,以便watchDog线程抓取SS进程的栈回溯信息。
请参考图5,其示出了本申请一个实施例提供的信息记录装置的结构框图。该装置可以通过软件、硬件或者两者的结合实现成为终端的全部或一部分。该装置包括:
跟踪模块510,用于获取与***服务SS进程进行通信的至少一个目标进程,所述跟踪线程是所述SS进程中的线程;
看门狗模块520,用于当检测到***异常时,向所述跟踪模块发送异常通知消息,所述看门狗线程是所述SS进程中的线程;
跟踪模块510,还用于当接收到所述异常通知消息时,获取各个所述目标进程对应的目标栈回溯信息;
记录模块530,用于记录所述目标栈回溯信息。
可选的,所述跟踪模块510,用于:
获取所述SS进程的进程标识;
根据所述进程标识从粘合缓冲区binder buffer中查询与所述SS进程进行通信的所述目标进程,所述粘合缓冲区记录有当前***中进行binder进程通信的各个进程。
可选的,所述跟踪模块510,用于:
按照预定查询周期,从所述粘合缓冲区中查询与所述SS进程进行通信的所述目标进程,所述预定查询周期与所述看门狗线程的检测周期相同。
可选的,所述跟踪模块510,还用于:
获取各个所述目标进程的目标进程标识;
将所述目标进程标识写入链表中,所述链表用于存储与所述SS进程进行通信的最近n个所述目标进程的所述目标进程标识。
可选的,所述跟踪模块510,用于:
将所述链表中的所述目标进程标识写入目标数组;
根据所述目标数组向回溯栈抓取进程发送抓取指令,所述回溯栈抓取进程用于根据所述抓取指令抓取各个所述目标进程在预定时长内的所述目标栈回溯信息。
可选的,所述跟踪模块510,用于
当接收到所述回溯栈抓取进程发送的完成消息时,清空所述目标数组,并向所述看门狗线程发送抓取通知消息;
所述看门狗模块520,用于当接收到所述抓取通知消息时,抓取所述SS进程的栈回溯信息。
可选的,所述记录模块530,用于
根据***异常时刻将所述目标栈回溯信息写入数据分区的第一文件;
根据所述***异常时刻将所述SS进程的栈回溯信息写入所述数据分区的第二文件中。
可选的,所述装置还包括:
发送模块,用于向服务器发送所述目标栈回溯信息,所述服务器用于根据所述目标栈回溯信息确定***异常原因。
综上所述,本申请实施例中,通过在SS进程中创建跟踪线程,并利用跟踪线程获取与SS进程进行通信的至少一个目标进程,从而在接收到看门狗线程发送的异常通知消息时,获取各个目标进程对应的目标栈回溯信息,并对该目标栈回溯信息进行记录;由于记录到发送***异常前与SS进程通信的目标进程的目标栈回溯信息,因此后续能够基于目标栈回溯信息排查出由目标进程卡死导致的***异常,有助于提高***异常原因的排查效率。
本实施例中,跟踪线程按照预定查询周期查询与SS进程进行通信的目标进程,在实现记录目标进程的前提下,减小***压力;同时,跟踪线程将查询到的最近n个目标进程的进程标识写入链表中,在确保记录下正在与SS进程通信的目标进程的同时,减少链表中的数据量。
此外,终端根据***异常时刻将目标栈回溯信息以及SS进程的栈回溯信息写入数据分区的文件中,有助于后续基于***异常时刻获取相应的文件,从而提高***异常原因的排查效率。
本申请实施例还提供了一种计算机可读介质,该计算机可读介质存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现如上各个实施例所述的信息记录方法。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现如上各个实施例所述的信息记录方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本申请实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (9)

1.一种信息记录方法,其特征在于,所述方法包括:
跟踪线程获取与***服务SS进程进行通信的至少一个目标进程,所述跟踪线程是所述SS进程中的线程;
所述跟踪线程获取各个所述目标进程的目标进程标识;
所述跟踪线程将所述目标进程标识写入链表中,所述链表用于存储与所述SS进程进行通信的最近n个所述目标进程的所述目标进程标识;
当检测到***异常时,看门狗线程向所述跟踪线程发送异常通知消息,所述看门狗线程是所述SS进程中的线程;
当接收到所述异常通知消息时,所述跟踪线程将所述链表中的所述目标进程标识写入目标数组;
所述跟踪线程根据所述目标数组向回溯栈抓取进程发送抓取指令,所述回溯栈抓取进程用于根据所述抓取指令抓取各个所述目标进程在预定时长内的目标栈回溯信息;
记录所述目标栈回溯信息。
2.根据权利要求1所述的方法,其特征在于,所述跟踪线程获取与SS进程进行通信的至少一个目标进程,包括:
所述跟踪线程获取所述SS进程的进程标识;
所述跟踪线程根据所述进程标识从粘合缓冲区binder buffer中查询与所述SS进程进行通信的所述目标进程,所述粘合缓冲区记录有当前***中进行binder进程通信的各个进程。
3.根据权利要求2所述的方法,其特征在于,所述跟踪线程根据所述进程标识从粘合缓冲区中查询与所述SS进程进行通信的所述目标进程,包括:
所述跟踪线程按照预定查询周期,从所述粘合缓冲区中查询与所述SS进程进行通信的所述目标进程,所述预定查询周期与所述看门狗线程的检测周期相同。
4.根据权利要求1所述的方法,其特征在于,所述跟踪线程根据所述目标数组向回溯栈抓取进程发送抓取指令之后,所述方法还包括:
当接收到所述回溯栈抓取进程发送的完成消息时,所述跟踪线程清空所述目标数组,并向所述看门狗线程发送抓取通知消息;
当接收到所述抓取通知消息时,所述看门狗线程抓取所述SS进程的栈回溯信息。
5.根据权利要求4所述的方法,其特征在于,所述记录所述目标栈回溯信息,包括:
根据***异常时刻将所述目标栈回溯信息写入数据分区的第一文件;
所述看门狗线程抓取所述SS进程的栈回溯信息之后,所述方法还包括:
根据所述***异常时刻将所述SS进程的栈回溯信息写入所述数据分区的第二文件中。
6.根据权利要求1至3任一所述的方法,其特征在于,所述记录所述目标栈回溯信息之后,所述方法还包括:
向服务器发送所述目标栈回溯信息,所述服务器用于根据所述目标栈回溯信息确定***异常原因。
7.一种信息记录装置,其特征在于,所述装置包括:
跟踪模块,用于获取与***服务SS进程进行通信的至少一个目标进程;
所述跟踪模块,还用于获取各个所述目标进程的目标进程标识;
所述跟踪模块,还用于将所述目标进程标识写入链表中,所述链表用于存储与所述SS进程进行通信的最近n个所述目标进程的所述目标进程标识;
看门狗模块,用于当检测到***异常时,向所述跟踪模块发送异常通知消息;
所述跟踪模块,还用于当接收到所述异常通知消息时,将所述链表中的所述目标进程标识写入目标数组;
所述跟踪模块,还用于根据所述目标数组向回溯栈抓取进程发送抓取指令,所述回溯栈抓取进程用于根据所述抓取指令抓取各个所述目标进程在预定时长内的目标栈回溯信息;
记录模块,用于记录所述目标栈回溯信息。
8.一种终端,其特征在于,所述终端包括处理器和存储器;所述存储器存储有至少一条指令,所述至少一条指令用于被所述处理器执行以实现如权利要求1至6任一所述的信息记录方法。
9.一种计算机可读存储介质,其特征在于,所述存储介质存储有至少一条指令,所述至少一条指令用于被处理器执行以实现如权利要求1至6任一所述的信息记录方法。
CN201910502219.4A 2019-06-11 2019-06-11 信息记录方法、装置、终端及存储介质 Active CN110221928B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910502219.4A CN110221928B (zh) 2019-06-11 2019-06-11 信息记录方法、装置、终端及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910502219.4A CN110221928B (zh) 2019-06-11 2019-06-11 信息记录方法、装置、终端及存储介质

Publications (2)

Publication Number Publication Date
CN110221928A CN110221928A (zh) 2019-09-10
CN110221928B true CN110221928B (zh) 2021-06-04

Family

ID=67816388

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910502219.4A Active CN110221928B (zh) 2019-06-11 2019-06-11 信息记录方法、装置、终端及存储介质

Country Status (1)

Country Link
CN (1) CN110221928B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6829729B2 (en) * 2001-03-29 2004-12-07 International Business Machines Corporation Method and system for fault isolation methodology for I/O unrecoverable, uncorrectable error
US7243266B2 (en) * 2003-10-09 2007-07-10 Hitachi, Ltd. Computer system and detecting method for detecting a sign of failure of the computer system
CN107133167A (zh) * 2017-04-24 2017-09-05 北京北信源软件股份有限公司 一种Linux***下实时监控进程异常的方法及装置
CN109039952A (zh) * 2018-06-29 2018-12-18 Oppo(重庆)智能科技有限公司 一种移动终端及其进程间通信的限制方法、存储介质
CN109144741A (zh) * 2017-06-13 2019-01-04 广东神马搜索科技有限公司 进程间通信的方法、装置及电子设备
CN109219115A (zh) * 2018-08-20 2019-01-15 奇酷互联网络科技(深圳)有限公司 移动终端及冻结终端应用程序的方法、装置和存储装置
CN109714202A (zh) * 2018-12-21 2019-05-03 郑州云海信息技术有限公司 一种客户端离线原因判别方法和集群式安全管理***

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104852823B (zh) * 2014-02-18 2019-04-12 腾讯科技(深圳)有限公司 进程的监测方法、装置和***
CN105512015B (zh) * 2015-12-15 2018-09-04 北京奇虎科技有限公司 一种安卓目标应用崩溃统计方法和装置
CN105589807B (zh) * 2015-12-21 2018-05-11 中国科学院信息工程研究所 一种应用程序间组件能力泄露动态检测方法和***
CN107818036B (zh) * 2017-10-31 2021-01-15 努比亚技术有限公司 黑屏检测方法、移动终端及计算机可读存储介质
CN107807861B (zh) * 2017-10-31 2021-05-21 努比亚技术有限公司 冻屏解决方法、移动终端及计算机可读存储介质
CN109445917B (zh) * 2018-10-16 2020-12-01 Oppo广东移动通信有限公司 应用处理方法和装置、电子设备、计算机可读存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6829729B2 (en) * 2001-03-29 2004-12-07 International Business Machines Corporation Method and system for fault isolation methodology for I/O unrecoverable, uncorrectable error
US7243266B2 (en) * 2003-10-09 2007-07-10 Hitachi, Ltd. Computer system and detecting method for detecting a sign of failure of the computer system
CN107133167A (zh) * 2017-04-24 2017-09-05 北京北信源软件股份有限公司 一种Linux***下实时监控进程异常的方法及装置
CN109144741A (zh) * 2017-06-13 2019-01-04 广东神马搜索科技有限公司 进程间通信的方法、装置及电子设备
CN109039952A (zh) * 2018-06-29 2018-12-18 Oppo(重庆)智能科技有限公司 一种移动终端及其进程间通信的限制方法、存储介质
CN109219115A (zh) * 2018-08-20 2019-01-15 奇酷互联网络科技(深圳)有限公司 移动终端及冻结终端应用程序的方法、装置和存储装置
CN109714202A (zh) * 2018-12-21 2019-05-03 郑州云海信息技术有限公司 一种客户端离线原因判别方法和集群式安全管理***

Also Published As

Publication number Publication date
CN110221928A (zh) 2019-09-10

Similar Documents

Publication Publication Date Title
WO2020147462A1 (zh) 应用异常恢复
JP6333965B2 (ja) ウェイクロック使用を追跡する技術
EP3309676B1 (en) Method and apparatus for providing screenshot service on terminal device and storage medium and device
CN110879742B (zh) 虚拟机异步创建内部快照方法、装置及存储介质
CN108170552B (zh) 一种抓取Dump文件的方法、装置和设备
CN111858112B (zh) 一种检测内存泄露的方法、客户端及服务器
CN110413432B (zh) 一种信息处理方法、电子设备及存储介质
CN110046497B (zh) 一种函数挂钩实现方法、装置和存储介质
CN107885635B (zh) 黑屏检测方法、移动终端及计算机可读存储介质
CN110716848A (zh) 数据收集方法、装置、电子设备及存储介质
CN112395097A (zh) 一种消息处理方法、装置、设备和存储介质
CN107818036B (zh) 黑屏检测方法、移动终端及计算机可读存储介质
CN116339818B (zh) 代码变更类型的筛选方法、电子设备及可读存储介质
CN110221928B (zh) 信息记录方法、装置、终端及存储介质
CN114296986B (zh) 内存泄漏定位方法、装置、介质和电子设备
CN113687942B (zh) 检测方法、装置及电子设备
CN115952491A (zh) hook目标函数的方法、装置、电子设备及介质
CN114070892A (zh) 数据传输方法和装置
CN112732568B (zh) 一种***日志获取方法、装置、存储介质及终端
CN108809763B (zh) 一种网络性能参数采集方法、终端装置及存储介质
CN111813574A (zh) 图片压缩方法、装置、存储介质和电子设备
CN112463626A (zh) 内存泄漏定位方法、装置、计算机设备及存储介质
CN104850551A (zh) 一种数据处理方法、装置及移动终端
CN112699056B (zh) 一种程序调试方法、计算设备及储存介质
CN113190427B (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