CN110147294B - 调试信息的获取方法、装置、终端及计算机可读存储介质 - Google Patents
调试信息的获取方法、装置、终端及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110147294B CN110147294B CN201910436999.7A CN201910436999A CN110147294B CN 110147294 B CN110147294 B CN 110147294B CN 201910436999 A CN201910436999 A CN 201910436999A CN 110147294 B CN110147294 B CN 110147294B
- Authority
- CN
- China
- Prior art keywords
- information
- core dump
- dump file
- application process
- debugging
- 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/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0766—Error or fault reporting or storing
- G06F11/0778—Dumping, i.e. gathering error/state information after a fault for later diagnosis
-
- 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)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请属于通信技术领域,尤其涉及一种调试信息的获取方法、装置、终端及计算机可读存储介质,其中,所述获取方法包括:获取发生异常的应用进程的第一核心转储文件;调用调试接口,并根据所述应用进程对应的应用程序的可执行文件对所述第一核心转储文件进行解析,得到第一调试信息,所述第一调试信息包含Java层调用栈信息,解决了Android应用程序的进程发生异常时无法获取到完整的调试信息的技术问题。
Description
技术领域
本申请属于通信技术领域,尤其涉及一种调试信息的获取方法、装置、终端及计算机可读存储介质。
背景技术
目前,在安卓(Android)应用程序的进程发生异常时,通常需要获取调试信息进行问题分析,并修复分析出的问题,使得应用程序能够正常运行。然而,当Android应用程序的进程发生异常的复现概率较低时,通常无法进行在线调试,而需要获取该进程的核心转储(core dump)文件,并对该文件进行解析才能得到更多有效的调试信息。
但是,目前Android应用程序的进程发生异常时无法获取到完整的调试信息。
发明内容
本申请实施例提供一种调试信息的获取方法、装置、终端及计算机可读存储介质,可以解决Android应用程序的进程发生异常时无法获取到完整的调试信息的技术问题。
本申请实施例第一方面提供一种调试信息的获取方法,包括:
获取发生异常的应用进程的第一核心转储文件;
调用调试接口,并根据所述应用进程对应的应用程序的可执行文件对所述第一核心转储文件进行解析,得到第一调试信息,所述第一调试信息包含Java层调用栈信息。
本申请实施例第二方面提供一种调试信息的获取装置,包括:
获取单元,用于获取发生异常的应用进程的第一核心转储文件;
解析单元,用于调用调试接口,并根据所述应用进程对应的应用程序的可执行文件对所述第一核心转储文件进行解析,得到第一调试信息,所述第一调试信息包含Java层调用栈信息。
本申请实施例第三方面提供一种终端,包括存储器、处理器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述方法的步骤。
本申请实施例第四方面提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述方法的步骤。
本申请实施例中,通过获取发生异常的应用进程的第一核心转储文件,并调用调试接口,根据应用进程对应的应用程序的可执行文件对第一核心转储文件进行解析,得到第一调试信息,该第一调试信息为包含Java层调用栈信息的完整的调试信息,解决了Android应用程序的进程发生异常时无法获取到完整的调试信息的技术问题。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1是本申请实施例提供的一种调试信息的获取方法的第一实现流程示意图;
图2是本申请实施例提供的一种调试信息的获取方法步骤102的具体实现流程示意图;
图3是本申请实施例提供的odex格式的可执行文件记录的Java层的各个变量和各个类之间的对应关系的结构示意图;
图4是本申请实施例提供的一种调试信息的获取方法步骤202的具体实现示意图;
图5是本申请实施例提供的一种调试信息的获取方法的第二实现流程示意图;
图6是本申请实施例提供的一种调试信息的获取方法步骤103的具体实现示意图;
图7是本申请实施例提供的一种调试信息的获取方法的第三实现流程示意图;
图8是本申请实施例提供的调试信息的获取装置的结构示意图;
图9是本申请实施例提供的终端的结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。同时,在本申请的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
为了说明本申请上述的技术方案,下面通过具体实施例来进行说明。
目前,当Android应用程序的进程发生异常的复现概率较低时,通常无法进行在线调试,需要依靠命令行工具logcat得到程序的log信息,并依据该log信息进行问题分析。然而,由于logcat中的有效消息很少,不足以进行问题分析。因此,需要获取该进程的核心转储文件core dump,并对该文件进行解析才能得到更多有效的调试信息。
由于目前Android平台使用的是ART机制的虚拟机,不是基于Java机制的虚拟机,因此,即使获取到core dump文件,也无法从core dump文件中提取出有效的java层的调用栈信息,造成获取的调试信息不够完整。
本申请实施例中,通过获取发生异常的应用进程的第一核心转储文件,并调用调试接口,根据应用进程对应的应用程序的可执行文件对第一核心转储文件进行解析,得到第一调试信息,该第一调试信息为包含Java层调用栈信息的完整的调试信息,解决了Android应用程序的进程发生异常时无法获取到完整的调试信息的技术问题。
如图1示出了本申请实施例提供的一种调试信息的获取方法的实现流程示意图,该方法应用于终端,可以由终端上配置的调试信息的获取装置执行,适用于需获取包含Java层调用栈信息的调试信息的情形。其中,所述终端可以为电脑、服务器等智能终端,所述调试信息的获取方法可以包括步骤101至步骤102。
步骤101,获取发生异常的应用进程的第一核心转储文件。
本申请获取调试信息的方式是在应用进程的异常无法复现,或复现概率低的情况下,直接在应用进程发生异常后,获取发生异常的应用进程的离线的第一核心转储文件,对该第一核心转储文件进行解析,得到第一调试信息。
在实际应用场景中,当手机等终端设备上运行的应用程序的应用进程发生异常时,该终端设备的操作系统的保护机制会生成第一核心转储文件,该第一核心转储文件记录有应用进程发生异常时的内存调用、堆栈引用等信息,可以帮助开发人员或维护人员了解异常发生当时的环境参数和信息。
其中,该应用进程可以为系统核心进程,也可以为某一应用的应用进程。
上述获取应用进程的第一核心转储文件的方式可以包括从服务器中获取应用进程的第一核心转储文件,或者从应用进程发生异常时的工作目录下拷贝第一核心转储文件。
例如,上述终端设备上运行的应用程序的应用进程发生异常时,终端设备的操作系统生成应用进程的第一核心转储文件,并将其发送到预设的服务器中,以便开发人员或维护人员能够从服务器中获取应用进程的第一核心转储文件,不会发生第一核心转储文件丢失的情况。
在本申请的一些实施方式中,上述获取发生异常的应用进程的第一核心转储文件,可以包括:按照预设监控周期,获取发生异常的应用进程的第一核心转储文件。
由于应用程序的应用进程发生异常时,将不能正常提供相应的服务,因此,为了使应用进程发生异常时,可以被尽快地发现,本申请实施例中,可以通过按照预设监控周期,从服务器中或者被监控的终端设备中查看并获取发生异常的应用进程的第一核心转储文件,以便应用程序的应用进程发生异常后,能够被及时发现。
步骤102,调用调试接口,并根据应用进程对应的应用程序的可执行文件对第一核心转储文件进行解析,得到第一调试信息,该第一调试信息包含Java层调用栈信息。
其中,上述调试接口为与第一核心转储文件的文件格式相匹配,并且可以对第一核心转储文件进行解析的调试接口。例如,当第一核心转储文件的文件格式为elf格式的核心转储文件时,则该调试接口为可以对elf格式的文件进行解析的调试接口。又例如,当第一核心转储文件的文件格式为elf格式的核心转储文件时,该调试接口可以为gdb调试接口。
其中,上述调试接口为调试工具的接口函数,为了实现调试工具代码层的调用,本申请实施例中,可以不直接调用调试工具的可执行文件,而是以调试接口的方式进行调用,简化了代码的复杂度。
实际应用中,Android应用的源代码主要分为java代码与C/C++代码两部分,由于目前Android平台使用的是ART虚拟机,不是基于Java机制的虚拟机。并且,由于ART虚拟机只能将Java代码编译成oat格式或odex格式的文件,而目前没有可以对oat格式或odex格式的文件进行直接解析得到java层调用栈信息的调试工具,因此,无法从获取到的oat格式或odex格式的文件中直接得到包含java层调用栈信息的第一调试信息。
但是,由于上述第一核心转储文件中的内容经解析后可以得到包含oat格式的文件经解析后得到的内容,因此,可以通过调用调试接口,并根据应用进程对应的应用程序的可执行文件对上述第一核心转储文件进行解析得到包含java层调用栈信息的第一调试信息。
需要说明的是,由于Java层的调用栈信息在上述第一核心转储文件中的表现是比较散乱的,因此,若直接利用调试接口对上述第一核心转储文件进行解析时,通常只能解析得到kernel层和native层的调用栈信息,即C/C++的信息,并不能直接从第一核心转储文件中解析得到Java层的调用栈信息。
因此,为了克服这一技术壁垒,本申请实施例中,根据Android虚拟机的原理,通过调用调试接口并结合应用程序的可执行文件的方式从第一核心转储文件中解析得到包含Java层的调用栈信息的第一调试信息。
如图2所示,在本申请的一些实施方式中,上述调用调试接口,并根据应用进程对应的应用程序的可执行文件对第一核心转储文件进行解析,可以包括:步骤201至步骤202。
步骤201,获取应用进程对应的应用程序安装时生成的可执行文件;该可执行文件记录有Java层的各个变量和各个类之间的对应关系;
步骤202,利用调试命令获取第一核心转储文件中的全局变量类,并根据上述可执行文件记录的Java层的各个变量和各个类之间的对应关系对全局变量中包含的各个类进行访问,得到Java层调用栈信息。
具体的,任何java层的APK在安装的时候,利用android的PMS机制都会编译成可执行文件,可执行文件里详细记录了apk java源码的情况,可执行文件里同时还记录了java代码的各个变量和类之间的关系,并且也会保存java代码的字符串信息。
例如,该可执行文件可以为odex格式的可执行文件,如图3所示,为odex格式的可执行文件记录的Java层的各个变量和各个类之间的对应关系的结构示意图,其中,class_defs为类定义列表。magic为odex版本标识。file_size为整个文件(包括标头)的大小,以字节为单位。header_size为标头(整个区段)的大小,以字节为单位。string_ids_size与string_ids_off为字符串标识符列表中的字符串数量与文件偏移。type_ids_size与type_ids_off为类型标识符列表中的元素数量及文件偏移。proto_ids_size与proto_ids_off为原型标识符列表中的元素数量及文件偏移。field_ids_size与field_ids_off为字段标识符列表中的元素数量及文件偏移。method_ids_size与method_ids_off为方法标识符列表中的元素数量及文件偏移。class_defs_size与class_defs_off为类定义列表中的元素数量及文件偏移。data_size与data_off为data区段的大小及文件偏移。string_ids为字符串标识符列表;type_ids为类型标识符列表;proto_ids为方法原型标识符列表;field_ids为字段标识符列表;method_ids为方法标识符列表。
其中,上述Java层调用栈信息可以包括:静态信息和动态信息。静态信息可以包括:全局变量、线程信息、类信息和方法信息;动态信息可以包括:实例变量、局部变量和栈信息。
例如,如图4所示,为本申请步骤202获取Java层调用栈信息中类信息的一种具体实现方式示意图,在利用调试命令获取第一核心转储文件中的全局变量类,并根据上述可执行文件记录的Java层的各个变量和各个类之间的对应关系对全局变量类中包含的各个类进行访问得到Java层调用栈信息中的类信息的过程中,首先通过调试命令(例如,gdb命令)获取到上述第一核心转储文件中的全局变量类art::Runtime::instance__的值,接着再通过全局变量类art::Runtime::instance__得到全局变量类下面的其中一个类class_linker_,然后再得到class_linker_下面的class_table_类,class_table_类存储有Java层所有类的地址信息,其中,class_table_类中的data_成员的一个reference_值可以强制转为art::mirror::Class类,art::mirror::Class类包括具体每一个类的详细信息,dex_cache_又是art::mirror::Class类的一个类,dex_file表示的是具体一个类下面的成员的详细信息,可以通过dex_file得到包含上述类信息的字符串信息。
需要说明的是,上述Java层调用栈信息可以是在得到全局变量类art::Runtime::instance_之后,对所述全局变量类中包含的各个类进行逐层访问得到;但是在获取变量信息或线程信息的过程中会出现仅仅只有变量的id号的情况,这需要根据id号查找可执行文件记录的Java层的各个变量(包括变量名和变量id)和各个类之间的对应关系才可以得到id号相关的变量名和相应的类,所以在对所述全局变量类中包含的各个类进行访问的过程中,还需要结合可执行文件记录的Java层的各个变量和各个类之间的对应关系信息,得到完整的调试信息。
需要说明的是,上述图4描述的仅仅是获取Java层调用栈信息的类信息的路径,在本申请的一些实施方式中,在获取Java层调用栈信息时,还可以包括更多的路径获取更多相关的Java层调用栈信息。例如,获取线程信息、方法信息等等,此处不再赘述。
本申请实施例中,通过获取发生异常的应用进程的第一核心转储文件,并调用调试接口,根据应用进程对应的应用程序的可执行文件对第一核心转储文件进行解析,得到第一调试信息,该第一调试信息为包含Java层调用栈信息的完整的调试信息,解决了Android应用程序的进程发生异常时无法获取到完整的调试信息的技术问题。
在本申请的一些实施方式中,如图5所示,上述步骤102之后还可以包括步骤103:对上述第一调试信息进行可视化处理,得到第二调试信息。
本申请实施例中,在获取到包含Java层调用栈信息的第一调试信息之后,可以通过对上述第一调试信息进行可视化处理,以便得到可以供开发人员或维护人员直接阅读的第二调试信息;进而使得开发人员或维护人员可以清楚直观地查看到完整的调试信息,解决了Android应用程序的进程发生异常时无法获取到完整的调试信息的技术问题。
在本申请的一些实施方式中,上述对第一调试信息进行可视化处理可以包括:对第一调试信息进行封装,并将封装后的第一调试信息发送给可视化工具进行可视化处理,得到第二调试信息。
例如,如图6所示,利用jdwp协议对上述第一调试信息进行封装,并按照jdwp协议的命令发送顺序将上述封装后的第一调试信息通过socket发送给android studio进行显示。
上述jdwp协议分为命令包和回复包,它是一种android studio支持的标准协议,所以将调试接口解析出来的调试信息按照jdwp协议的格式进行封装,并按照jdwp的命令发送顺序将相应的数据发送到android studio,android studio就会将应用进程所有的信息显示出来。
本申请实施例中,通过将调试接口得到的进程第一调试信息先按照jdwp协议进行打包,然后在android studio端再对jdwp协议进行解包操作,实现调试信息的可视化。
上述命令包里包含了头部信息和数据,上述回复包里也包含了头部信息和数据。其中,上述命令包的头信息可以包括:length(4bytes),id(4bytes),flags(1byte),command set(1byte),command(1byte)。上述回复包的头信息可以包括:length(4bytes),id(4bytes),flags(1byte),error code(2bytes)。
上述android studio为Android平台开发程序的集成开发环境。
本申请实施例中,通过对封装后的第一调试信息进行可视化处理,使得开发人员或维护人员可以清楚直观地查看到完整的调试信息,解决了Android应用程序的进程发生异常时无法获取到完整的调试信息的技术问题。
在本申请的一些实施方式中,还可以利用其它协议对上述第一调试信息进行封装,只要能够实现上述第一调试信息的传输即可;并且还可以利用其它可视化工具对封装后的第一调试信息进行可视化处理。
例如,利用eclipse工具对上述第一调试信息进行可视化处理,得到第二调试信息,并且,在得到第二调试信息后,可以对上述第二调试信息通过显示或打印的方式进行输出。
如图7所示,在上述描述的各实施方式中,上述对第一调试信息进行可视化处理之后,还可以包括:步骤104至105。
步骤104,接收第二核心转储文件获取指令,并根据第二核心转储文件获取指令获取第二核心转储文件,该第二核心转储文件为应用进程发生异常时,运行应用进程的操作系统生成的核心转储文件;
步骤105,对上述第二核心转储文件进行解析,得到上述应用进程的第三调试信息。
例如,当上述应用进程的第一核心转储文件不足以分析出应用进程发生异常的原因时,则可以通过获取包含系统运行的全部信息的第二核心转储文件,并对该第二核心转储文件进行解析,得到应用进程的第三调试信息,从而彻底解决应用进程出现的问题。
其中,上述第二核心转储文件获取指令可以为开发人员或维护人员在可视化工具的交互界面中触发的获取指令。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为根据本发明,某些步骤可以采用其它顺序进行。
图8示出了本申请实施例提供的一种调试信息的获取装置800的结构示意图,包括获取单元801和解析单元802。
获取单元801,用于获取发生异常的应用进程的第一核心转储文件;
解析单元802,用于调用调试接口,并根据应用进程对应的应用程序的可执行文件对第一核心转储文件进行解析,得到第一调试信息,该第一调试信息包含Java层调用栈信息。
在本申请的一些实施方式中,上述解析单元,还包括:
获取子单元,用于获取应用进程对应的应用程序安装时生成的可执行文件;可执行文件记录有Java层的各个变量和各个类之间的对应关系;
解析子单元,用于利用调试命令获取第一核心转储文件中的全局变量类,并根据可执行文件记录的Java层的各个变量和各个类之间的对应关系对全局变量类中包含的各个类进行访问,得到Java层调用栈信息。
在本申请的一些实施方式中,上述调试信息的获取装置800还可以包括可视化单元,该可视化单元用于对第一调试信息进行可视化处理,得到第二调试信息。
在本申请的一些实施方式中,上述可视化单元,还用于:对第一调试信息进行封装,并将封装后的第一调试信息发送给可视化工具进行可视化处理,得到第二调试信息。
例如,利用jdwp协议对上述第一调试信息进行封装,并按照jdwp协议的命令发送顺序将封装后的第一调试信息发送给android studio进行可视化处理,得到并显示第二调试信息。
在本申请的一些实施方式中,上述解析子单元,还可以包括:在对第一调试信息进行可视化处理之后,接收第二核心转储文件获取指令,并根据第二核心转储文件获取指令获取第二核心转储文件,该第二核心转储文件为应用进程发生异常时,运行应用进程的操作系统生成的核心转储文件;再对第二核心转储文件进行解析,得到应用进程的第三调试信息。
在本申请一些实施方式中,上述获取单元,还用于按照预设监控周期,获取发生异常的应用进程的第一核心转储文件。
需要说明的是,为描述的方便和简洁,上述描述的调试信息的获取装置800的具体工作过程,可以参考上述图1至图7中描述的方法的对应过程,在此不再赘述。
如图9所示,本申请提供一种用于实现上述调试信息的获取方法的终端,该终端可以为智能手机、平板电脑、个人电脑(PC)、学习机等终端,包括:处理器91、存储器92、一个或多个输入设备93(图9中仅示出一个)和一个或多个输出设备94(图9中仅示出一个)。处理器91、存储器92、输入设备93和输出设备94通过总线95连接。
应当理解,在本申请实施例中,所称处理器91可以是中央处理单元(CentralProcessing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
输入设备93可以包括虚拟键盘、触控板、指纹采传感器(用于采集用户的指纹信息和指纹的方向信息)、麦克风等,输出设备94可以包括显示器、扬声器等。
存储器92可以包括只读存储器和随机存取存储器,并向处理器91提供指令和数据。存储器92的一部分或全部还可以包括非易失性随机存取存储器。例如,存储器92还可以存储设备类型的信息。
上述存储器92存储有计算机程序,上述计算机程序可在上述处理器91上运行,例如,上述计算机程序为调试信息的获取方法的程序。上述处理器91执行上述计算机程序时实现上述调试信息的获取方法实施例中的步骤,例如图1所示的步骤101至步骤102。或者,上述处理器91执行上述计算机程序时实现上述各装置实施例中各模块/单元的功能,例如图8所示单元801至802的功能。
上述计算机程序可以被分割成一个或多个模块/单元,上述一个或者多个模块/单元被存储在上述存储器92中,并由上述处理器91执行,以完成本申请。上述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述上述计算机程序在上述进行拍照的终端中的执行过程。例如,上述计算机程序可以被分割成获取单元、解析单元和可视化单元,各单元具体功能如下:
获取单元,用于获取发生异常的应用进程的第一核心转储文件;
解析单元,用于调用调试接口,并根据应用进程对应的应用程序的可执行文件对第一核心转储文件进行解析,得到第一调试信息,第一调试信息包含Java层调用栈信息。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/终端和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端实施例仅仅是示意性的,例如,上述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,上述计算机程序包括计算机程序代码,上述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。上述计算机可读介质可以包括:能够携带上述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,上述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上上述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (7)
1.一种调试信息的获取方法,其特征在于,包括:
获取发生异常的应用进程的第一核心转储文件,所述应用进程的异常无法复现;
通过调用调试接口,并根据所述应用进程对应的应用程序的可执行文件对所述第一核心转储文件进行解析,得到第一调试信息,所述第一调试信息包含Java层调用栈信息;
所述调用调试接口,并根据所述应用进程对应的应用程序的可执行文件对所述第一核心转储文件进行解析,包括:
获取所述应用进程对应的应用程序安装时生成的可执行文件,所述可执行文件记录有Java层的各个变量和各个类之间的对应关系;
在获取变量信息或线程信息的过程中只有变量的id号时,利用调试命令获取所述第一核心转储文件中的全局变量类,并根据所述可执行文件记录的Java层的各个变量和各个类之间的对应关系对所述全局变量类中包含的各个类进行访问,得到所述Java层调用栈信息;
在得到所述第一调试信息之后,还包括:
对所述第一调试信息进行可视化处理,得到第二调试信息;
在所述对所述第一调试信息进行可视化处理之后,还包括:
接收第二核心转储文件获取指令,并根据所述第二核心转储文件获取指令获取第二核心转储文件,所述第二核心转储文件为所述应用进程发生异常时,运行所述应用进程的操作系统生成的核心转储文件;
当所述应用进程的第一核心转储文件不足以分析出应用进程发生异常的原因时,通过获取包含系统运行的全部信息的第二核心转储文件,并对所述第二核心转储文件进行解析,得到所述应用进程的第三调试信息。
2.如权利要求1所述的获取方法,其特征在于,所述对所述第一调试信息进行可视化处理,得到第二调试信息,包括:
对所述第一调试信息进行封装,并将封装后的所述第一调试信息发送给可视化工具进行可视化处理,得到第二调试信息。
3.如权利要求2所述的获取方法,其特征在于,所述对所述第一调试信息进行封装,并将封装后的所述第一调试信息发送给可视化工具进行可视化处理,得到第二调试信息,包括:
利用jdwp协议对所述第一调试信息进行封装,并按照jdwp协议的命令发送顺序将所述封装后的第一调试信息发送给android studio进行可视化处理,得到并显示所述第二调试信息。
4.如权利要求1所述的获取方法,其特征在于,所述获取发生异常的应用进程的第一核心转储文件,包括:
按照预设监控周期,获取发生异常的应用进程的第一核心转储文件。
5.一种调试信息的获取装置,其特征在于,包括:
获取单元,用于获取发生异常的应用进程的第一核心转储文件,所述应用进程的异常无法复现;
解析单元,用于调用调试接口,并根据所述应用进程对应的应用程序的可执行文件对所述第一核心转储文件进行解析,得到第一调试信息,所述第一调试信息包含Java层调用栈信息;
可视化单元,用于对第一调试信息进行可视化处理,得到第二调试信息;
所述解析单元,包括:
获取子单元,用于获取应用进程对应的应用程序安装时生成的可执行文件;可执行文件记录有Java层的各个变量和各个类之间的对应关系;
解析子单元,用于在获取变量信息或线程信息的过程中只有变量的id号时,利用调试命令获取第一核心转储文件中的全局变量类,并根据可执行文件记录的Java层的各个变量和各个类之间的对应关系对全局变量类中包含的各个类进行访问,得到Java层调用栈信息;
所述解析单元,还用于在对第一调试信息进行可视化处理之后,接收第二核心转储文件获取指令,并根据第二核心转储文件获取指令获取第二核心转储文件,该第二核心转储文件为应用进程发生异常时,运行应用进程的操作系统生成的核心转储文件;当所述应用进程的第一核心转储文件不足以分析出应用进程发生异常的原因时,通过获取包含系统运行的全部信息的第二核心转储文件,并对所述第二核心转储文件进行解析,得到应用进程的第三调试信息。
6.一种终端,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至4任意一项所述方法的步骤。
7.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至4任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910436999.7A CN110147294B (zh) | 2019-05-23 | 2019-05-23 | 调试信息的获取方法、装置、终端及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910436999.7A CN110147294B (zh) | 2019-05-23 | 2019-05-23 | 调试信息的获取方法、装置、终端及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110147294A CN110147294A (zh) | 2019-08-20 |
CN110147294B true CN110147294B (zh) | 2023-10-03 |
Family
ID=67592902
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910436999.7A Active CN110147294B (zh) | 2019-05-23 | 2019-05-23 | 调试信息的获取方法、装置、终端及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110147294B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111563000B (zh) * | 2020-04-28 | 2023-08-18 | 深圳市震有软件科技有限公司 | 一种文件生成方法、智能终端及存储介质 |
CN113434325A (zh) * | 2021-07-01 | 2021-09-24 | 斑马网络技术有限公司 | 一种核心转储调试的方法、电子设备及系统 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000066929A (ja) * | 1998-08-18 | 2000-03-03 | Nec Corp | コアファイル管理システムおよびコアファイル管理方法 |
CN1704908A (zh) * | 2004-05-26 | 2005-12-07 | 华为技术有限公司 | 定位程序异常的方法 |
US7028056B1 (en) * | 2000-04-14 | 2006-04-11 | Microsoft Corporation | Method and arrangements for generating debugging information following software failures |
CN103019941A (zh) * | 2012-12-28 | 2013-04-03 | 大唐微电子技术有限公司 | 程序调试方法和装置 |
CN103678109A (zh) * | 2012-09-25 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 一种转储文件分析方法、装置和系统 |
CN106445787A (zh) * | 2016-09-30 | 2017-02-22 | 北京金山安全软件有限公司 | 一种监控服务器核心转储文件的方法、装置及电子设备 |
CN106598871A (zh) * | 2016-12-29 | 2017-04-26 | 山东鲁能智能技术有限公司 | Linux下的崩溃文件自动化分析方法及系统 |
WO2018082176A1 (zh) * | 2016-11-03 | 2018-05-11 | 华为技术有限公司 | 处理终端设备的故障的方法和终端设备 |
CN108763060A (zh) * | 2018-04-27 | 2018-11-06 | 广州华多网络科技有限公司 | Android系统中Native层崩溃溯源方法、装置、存储介质及终端 |
CN109358975A (zh) * | 2018-09-28 | 2019-02-19 | 珠海市君天电子科技有限公司 | 一种软件运行异常的分析方法、装置、电子设备及存储介质 |
CN109582542A (zh) * | 2018-12-04 | 2019-04-05 | 中国航空工业集团公司西安航空计算技术研究所 | 一种嵌入式系统核心转储的方法 |
-
2019
- 2019-05-23 CN CN201910436999.7A patent/CN110147294B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000066929A (ja) * | 1998-08-18 | 2000-03-03 | Nec Corp | コアファイル管理システムおよびコアファイル管理方法 |
US7028056B1 (en) * | 2000-04-14 | 2006-04-11 | Microsoft Corporation | Method and arrangements for generating debugging information following software failures |
CN1704908A (zh) * | 2004-05-26 | 2005-12-07 | 华为技术有限公司 | 定位程序异常的方法 |
CN103678109A (zh) * | 2012-09-25 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 一种转储文件分析方法、装置和系统 |
CN103019941A (zh) * | 2012-12-28 | 2013-04-03 | 大唐微电子技术有限公司 | 程序调试方法和装置 |
CN106445787A (zh) * | 2016-09-30 | 2017-02-22 | 北京金山安全软件有限公司 | 一种监控服务器核心转储文件的方法、装置及电子设备 |
WO2018082176A1 (zh) * | 2016-11-03 | 2018-05-11 | 华为技术有限公司 | 处理终端设备的故障的方法和终端设备 |
CN106598871A (zh) * | 2016-12-29 | 2017-04-26 | 山东鲁能智能技术有限公司 | Linux下的崩溃文件自动化分析方法及系统 |
CN108763060A (zh) * | 2018-04-27 | 2018-11-06 | 广州华多网络科技有限公司 | Android系统中Native层崩溃溯源方法、装置、存储介质及终端 |
CN109358975A (zh) * | 2018-09-28 | 2019-02-19 | 珠海市君天电子科技有限公司 | 一种软件运行异常的分析方法、装置、电子设备及存储介质 |
CN109582542A (zh) * | 2018-12-04 | 2019-04-05 | 中国航空工业集团公司西安航空计算技术研究所 | 一种嵌入式系统核心转储的方法 |
Non-Patent Citations (5)
Title |
---|
JAVA卡调试平台的设计与实现;李恺鑫;《中国优秀硕士学位论文全文数据库信息科技辑》;20120415;第2012年卷(第04期);第1.2.1、2.5.2节 * |
JCVM异常处理机制;张大伟等;《计算机工程》;20030831;第29卷(第14期);第24-26页 * |
Linux应用程序调试技术的研究;彭闻宇;陈朔鹰;;微计算机信息(第29期);全文 * |
Linux应用程序调试技术的研究;彭闻宇等;《微计算机信息》;20061020;第22卷(第29期);第181-183页 * |
On reducing of core dump file size;Sergey S. Grekhov 等;IEEE EUROCON 2009;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110147294A (zh) | 2019-08-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106294102B (zh) | 应用程序的测试方法、客户端、服务器及系统 | |
CN110941528A (zh) | 一种基于故障的日志埋点设置方法、装置及系统 | |
CN111309505B (zh) | 页面异常处理方法、装置、电子设备 | |
CN110147294B (zh) | 调试信息的获取方法、装置、终端及计算机可读存储介质 | |
CN110297776B (zh) | 检测报告生成、接收方法、装置、设备及存储介质 | |
CN112631590B (zh) | 组件库生成方法、装置、电子设备和计算机可读介质 | |
CN114238948A (zh) | 一种应用程序检测方法、装置、电子设备及存储介质 | |
CN112729868A (zh) | 一种车辆诊断方法、装置、设备及介质 | |
CN109739704A (zh) | 一种接口测试方法、服务端及计算机可读存储介质 | |
CN114895935A (zh) | 刷写车辆ecu的方法、装置、电子设备及存储介质 | |
CN117370203B (zh) | 自动化测试方法、系统、电子设备及存储介质 | |
CN112131127B (zh) | 接口测试方法、装置、系统及电子设备 | |
CN112115060A (zh) | 基于终端的音频测试方法与系统 | |
US20200117572A1 (en) | Problem diagnosis technique of memory corruption based on regular expression generated during application compiling | |
CN112256564B (zh) | 应用程序的运行方法、装置及电子设备 | |
CN115113898A (zh) | 微应用的动态更新方法、装置、计算机设备和存储介质 | |
CN113419738A (zh) | 接口文档的生成方法、装置及接口管理设备 | |
CN114675989A (zh) | 数据校验方法、装置、电子设备及存储介质 | |
CN113467815A (zh) | 热更新的应用修复方法、装置、终端设备及存储介质 | |
CN113535580A (zh) | 一种cts测试方法、装置及测试设备 | |
CN111026575B (zh) | 一种异常处理方法、装置及电子设备 | |
CN114780952B (zh) | 敏感应用调用场景的检测方法、系统及存储介质 | |
CN116126427B (zh) | 基于面向切面编程的无侵入sdk辅助集成插件的实现方法 | |
CN111198721A (zh) | 应用程序运行方法和装置 | |
CN114791821A (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 |