CN109376074A - 获取日志的方法及装置、存储介质、电子装置 - Google Patents
获取日志的方法及装置、存储介质、电子装置 Download PDFInfo
- Publication number
- CN109376074A CN109376074A CN201811076537.0A CN201811076537A CN109376074A CN 109376074 A CN109376074 A CN 109376074A CN 201811076537 A CN201811076537 A CN 201811076537A CN 109376074 A CN109376074 A CN 109376074A
- Authority
- CN
- China
- Prior art keywords
- function
- output function
- source
- target
- log information
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
Abstract
本发明提供了一种获取日志的方法及装置、存储介质、电子装置,其中,该方法包括:在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;使用所述目标输出函数获取日志信息。通过本发明,解决了相关技术中调取日志信息效率低的技术问题。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种获取日志的方法及装置、存储介质、电子装置。
背景技术
日志信息(log)是测试和调试应用程序过程中常用的文件,可以用于发现和定位问题,如,在iOS开发或测试过程中,需要去看自定义的调试信息或者系统log来辅助调式和定位相关问题。
相关技术中,是通过用Xcode下的console log窗口台来展示NSLog打印的内容,其缺点是要必须连接电脑,需要安装Xcode来展示,如果离开了电脑,离开了Xcode就不能获得运行时的log,不便捷,效率低,时效性要求高。相关技术中的另一种方案是苹果公司已经提供了读取Log的ALS api,可以通过asl_search并设置参数来查询log文件,如公开号为CN105204789B的申请文件,公开了一种使用API调试日志打印的方法,相关技术的问题是asl_search接口在iOS 10.0后已废弃,在iOS 10.0后调用返回的结果为空,导致无法调取iOS10.0之后的系统的日志。
针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。
发明内容
本发明实施例提供了一种获取日志的方法及装置、存储介质、电子装置。
根据本发明的一个实施例,提供了一种获取日志的方法,包括:在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;使用所述目标输出函数获取日志信息。
可选的,在使用所述目标输出函数获取日志信息之后,所述方法还包括:在所述应用程序的页面上展示所述日志信息。
可选的,将所述应用程序的源输出函数替换成目标输出函数包括:使用fishhook工具将所述应用程序的源NSLog()函数替换成目标NSLog()函数,其中,所述源输出函数包括所述源NSLog()函数,所述目标输出函数包括所述目标NSLog()函数。
可选的,使用fishhook工具将所述应用程序的源NSLog()函数替换成目标NSLog()函数包括:修改所述源NSLog()函数的函数指针,将所述函数指针指向到所述目标NSLog()函数。
可选的,从所述源输出函数跳转到所述目标输出函数包括:从间接地址表获取符号表索引;通过所述符号表索引得到所述源输出函数对应的符号表表项;通过所述符号表表项查找所述源输出函数的函数名在字符串表的字符串表索引;通过所述字符串表和所述字符串表索引查找所述目标输出函数的函数名;在所述源输出函数的函数名和所述目标输出函数的函数名匹配时,将所述源输出函数的函数表项目替换为所述目标输出函数的函数表项目。
可选的,使用所述目标输出函数获取日志信息包括:使用所述c方法打印所述应用程序的日志信息;在所述c方法内获取所述日志信息。
可选的,在所述应用程序的页面上展示所述日志信息包括:在所述应用程序的debug页面上展示所述日志信息。
可选的,在所述应用程序的页面上展示所述日志信息之后,所述方法包括:在所述应用程序的LogView中接收关键字;以所述关键字为条目过滤所述日志信息,并在所述LogView上展示过滤后的日志信息。
可选的,在所述应用程序的页面上展示所述日志信息包括:将所述日志信息记录到数据源中;将所述数据源回调至所述源输出函数;使用所述源输出函数在LogView中展示所述日志信息。
可选的,在所述应用程序的页面上展示所述日志信息之后,所述方法包括:按照预设周期刷新在所述应用程序的页面上展示的日志信息。
根据本发明的另一个实施例,提供了一种获取日志的装置,包括:替换模块,用于在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;跳转模块,用于在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;获取模块,用于使用所述目标输出函数获取日志信息。
可选的,所述装置还包括:第一展示模块,用于在所述获取模块使用所述目标输出函数获取日志信息之后,在所述应用程序的页面上展示所述日志信息。
可选的,所述替换模块包括:替换单元,用于使用fishhook工具将所述应用程序的源NSLog()函数替换成目标NSLog()函数,其中,所述源输出函数包括所述源NSLog()函数,所述目标输出函数包括所述目标NSLog()函数。
可选的,所述替换单元还用于:修改所述源NSLog()函数的函数指针,将所述函数指针指向到所述目标NSLog()函数。
可选的,所述跳转模块包括:获取单元,用于从间接地址表获取符号表索引;处理单元,用于通过所述符号表索引得到所述源输出函数对应的符号表表项;第一查找单元,用于通过所述符号表表项查找所述源输出函数的函数名在字符串表的字符串表索引;第二查找单元,用于通过所述字符串表和所述字符串表索引查找所述目标输出函数的函数名;替换单元,用于在所述源输出函数的函数名和所述目标输出函数的函数名匹配时,将所述源输出函数的函数表项目替换为所述目标输出函数的函数表项目。
可选的,所述获取模块包括:打印单元,使用所述c方法打印所述应用程序的日志信息;获取单元,用于在所述c方法内获取所述日志信息。
可选的,所述装置包括:接收模块,用于在所述第一展示模块在所述应用程序的页面上展示所述日志信息之后,在所述应用程序的LogView中接收关键字;第二展示模块,用于以所述关键字为条目过滤所述日志信息,并在所述LogView上展示过滤后的日志信息。
可选的,所述第一展示模块包括:记录单元,用于将所述日志信息记录到数据源中;回调单元,用于将所述数据源回调至所述源输出函数;展示单元,用于使用所述源输出函数在LogView中展示所述日志信息。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明,通过将应用程序的源输出函数替换成目标输出函数,其中,所述目标输出函数是hook所述源输出函数的c方法,在调用源输出函数时,跳转到目标输出函数,使用目标输出函数获取日志信息,通过对源输出函数进行hook,可以在新的实现中去获得日志信息,解决了相关技术中调取日志信息效率低的技术问题,在技术设计上可以插件式接入,对业务无侵入性,便于扩展,在实际业务中,可以帮助开发和测试人员提高定位问题的效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的一种获取日志的移动终端的硬件结构框图;
图2是根据本发明实施例的获取日志的方法的流程图;
图3是本发明实施例从源输出函数跳转到目标输出函数的流程图;
图4是本发明实施例中按照关键字展示的示意图;
图5是本发明实施例的时序图;
图6是根据本发明实施例的获取日志的终端的结构框图;
图7是根据本发明实施例的服务器的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的一种获取日志的移动终端的硬件结构框图。如图1所示,移动终端10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的获取日志的方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种运行于终端或服务器的获取日志的方法,图2是根据本发明实施例的获取日志的方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;
步骤S204,在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;
步骤S206,使用所述目标输出函数获取日志信息。
使用上述方法,通过将应用程序的源输出函数替换成目标输出函数,其中,所述目标输出函数是hook所述源输出函数的c方法,在调用源输出函数时,跳转到目标输出函数,使用目标输出函数获取日志信息,通过对源输出函数进行hook,可以在新的实现中去获得日志信息,解决了相关技术中调取日志信息效率低的技术问题,在技术设计上可以插件式接入,对业务无侵入性,便于扩展,在实际业务中,可以帮助开发和测试人员提高定位问题的效率。
本实施例的方案应用在IOS的操作系统中,当然也可以是适用在其他系统中。Hook是fishhook工具的一个操作,用于在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件,fishhook是脸书公司提供的一个动态修改链接Mach-O符号表的开源工具,Mach-O为Mach Object文件格式的缩写,也是用于iOS可执行文件,目标代码,动态库,内核转储的文件格式。日志信息包括时间、类名、函数名,行号、线程号等。
在本实施例中,源输出函数可以是源NSLog()函数,目标输出函数可以是目标NSLog()函数;或者,源NSLog()函数叫NSLog()函数,目标NSLog()函数叫new NSLog()函数。
在本实施例的一个可选实施方式中,将所述应用程序的源输出函数替换成目标输出函数包括:使用fishhook工具将所述应用程序的源NSLog()函数替换成目标NSLog()函数,其中,所述源输出函数包括所述源NSLog()函数,所述目标输出函数包括所述目标NSLog()函数。
在一个示例中,使用fishhook工具将所述应用程序的源NSLog()函数替换成目标NSLog()函数包括:修改所述源NSLog()函数的函数指针,将所述函数指针指向到所述目标NSLog()函数。
本实施例基于fishhook能力,通过交换C函数指针,去动态修改C函数实现,在新的实现(目标NSLog()函数)中去获得了log数据源,从而实现在不更改正常业务处理流程下,对目标对象嵌入附加的操作。
本实施例中的fishhook是保存原符号对应的函数指针,并使用新的函数指针覆盖原有符号的函数指针,实现重绑定。其寻找目标输出函数符号位置,也是从所述源输出函数跳转到所述目标输出函数的流程如图3所示,图3是本发明实施例从源输出函数跳转到目标输出函数的流程图,包括:
S301,从间接地址表获取符号表索引;
fishhook通过修改间接地址表的偏移量动,提供一个假的nlist结构体,从而达到hook的目的;
S302,通过所述符号表索引得到所述源输出函数对应的符号表表项;
S303,通过所述符号表表项查找所述源输出函数的函数名在字符串表的字符串表索引;
S304,通过所述字符串表和所述字符串表索引查找所述目标输出函数的函数名;
S305,在所述源输出函数的函数名和所述目标输出函数的函数名匹配时,将所述源输出函数的函数表项目替换为所述目标输出函数的函数表项目。
在本实施例的一个可选实施方式中,可以在newNSLog实现的方法体内去获得日志内容,使用所述目标输出函数获取日志信息包括:使用所述c方法打印所述应用程序的日志信息;在所述c方法内获取所述日志信息。
在本实施例中,在使用所述目标输出函数获取日志信息之后,还包括:所述应用程序的页面上展示所述日志信息。应用程序的页面可以是应用程序的UI界面,人机交互界面,触控界面,测试界面等。
在本实施例的一个示例中,在所述应用程序的页面上展示所述日志信息包括:在所述应用程序的debug页面上展示所述日志信息。debug页面是调试的前端页面。本实施例在通过hook方式获得log后,在app的debug页面中去展示系统的log数据,同时提供log自动刷新机制,按关键词进行log过滤功能等。
在所述应用程序的页面上展示所述日志信息包括:将所述日志信息记录到数据源中;将所述数据源回调至所述源输出函数;使用所述源输出函数在LogView中展示所述日志信息。
在新的实现中去获得了log数据源,并可以在app页面中进行展示,并且可以对日志提供自动刷新和按关键字进行过滤和高亮的功能。在技术设计上可以插件式接入,对业务无侵入性,也便于扩展,在实际业务中,可以帮助开发和测试人员提高定位问题的效率。
在本实施例的一个示例中,在所述应用程序的页面上展示所述日志信息之后,所述方法包括:
S11,在所述应用程序的LogView中接收关键字;
LogView是在应用程序的测试包中新增的log展示窗口,支持log自动刷新,log搜索;
S12,以所述关键字为条目过滤所述日志信息,并在所述LogView上展示过滤后的日志信息。
图4是本发明实施例中按照关键字展示的示意图,图4中,接收到的关键字是“boot”,包含“boot”的多条日志展示在应用程序的LogView上。
在本实施例的另一个示例中,在所述应用程序的页面上展示所述日志信息之后,所述方法包括:按照预设周期刷新在所述应用程序的页面上展示的日志信息。
在展示的日志中,最常用的级别就是DEBUG,INFO,WARN,ERROR。如何运用合适的Log级别也是非常重要的,在不该用ERROR的地方用了ERROR,可能会给研发人员带来额外的麻烦。
在本实施例的另一个示例中,在展示日志信息,还包括展示日志的级别信息,以便开发人员及时定位错位,提高测试和调试效率,其中,日志级别包括ERROR、WARN、INFO和DEBUG、TRACE,下面进行简单介绍和说明。ERROR:发生了严重的错误,必须马上处理。这种级别的错误是任何系统都无法容忍的。比如:空指针异常,数据库不可用,关键路径的用例无法继续执行。WARN:还会继续执行后面的流程,但应该引起重视。其实在这里我希望有两种级别:一个是存在解决方案的明显的问题(比如,″当前数据不可用,使用缓存数据″),另一个是潜在的问题和建议(比如“程序运行在开发模式下”或者“管理控制台的密码不够安全”)。应用程序可以容忍这些信息,不过它们应该被检查及修复。INFO和DEBUG:开发人员关注的事。TRACE,更为详尽的信息,只是开发阶段使用。在产品上线之后的一小段时间内你可能还需要关注下这些信息,不过这些日志记录只是临时性的,最终应该关掉。
图5是本发明实施例的时序图,用于在整体上介绍本实施例的方案构架,本实施例的构架包括:业务端,AppLogManager(日志管理器),fishhook工具,LogView,下面介绍其功能:
业务端:指app内所有代码中调用到NSLog()方法,包括直接和间接调用,打印的日志信息,是业务端需要关注的。
AppLogManager:对log进行管理的类,提供NSLog被hook后的newNSLog方法,在获得业务端的log信息后,分发到LogView进行展示,并提供数据源。
fishhook:提供一种动态修改c函数实现的核心类。
LogView:在app中进行,展示log信息的窗口,包含展示view,自动刷新log及提供按关键字进行过滤log展示。
图5所示的时序图中,时序流程包括:
步骤一,当用户打开app时,AppLogManager在load方法中,通过fishhook将系统的C函数NSLog()实现替换成newNSLog();
步骤二,业务端代码中调用NSLog()时,由于NSLog()的函数指针已经被替换到指向到newNSLog(),将调用到AppLogManager的newNSLog()方法;
步骤三,在newNSLog()方法中,将打印的日志信息记录到数据源中,并将数据源通过block回调至LogView中进行处理;
步骤四,LogView在获得log信息后,将信息进行记录,并根据是否有搜索关键次进行展示。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
在本实施例中还提供了一种获取日志的装置,可以是终端或服务器,该装置用于实现上述实施例及优选实施方式,包括客户端、服务器等,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是根据本发明实施例的获取日志的终端的结构框图,如图6所示,该装置包括:
替换模块60,用于在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;
跳转模块62,用于在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;
获取模块64,用于使用所述目标输出函数获取日志信息。
在本实施例的一个实施方式中,所述终端还包括:第一展示模块,用于在所述获取模块使用所述目标输出函数获取日志信息之后,在所述应用程序的页面上展示所述日志信息。
在本实施例的一个实施方式中,所述替换模块包括:替换单元,用于使用fishhook工具将所述应用程序的源NSLog()函数替换成目标NSLog()函数,其中,所述源输出函数包括所述源NSLog()函数,所述目标输出函数包括所述目标NSLog()函数。
在本实施例的一个实施方式中,所述替换单元还用于:修改所述源NSLog()函数的函数指针,将所述函数指针指向到所述目标NSLog()函数。
在本实施例的一个实施方式中,所述跳转模块包括:获取单元,用于从间接地址表获取符号表索引;处理单元,用于通过所述符号表索引得到所述源输出函数对应的符号表表项;第一查找单元,用于通过所述符号表表项查找所述源输出函数的函数名在字符串表的字符串表索引;第二查找单元,用于通过所述字符串表和所述字符串表索引查找所述目标输出函数的函数名;替换单元,用于在所述源输出函数的函数名和所述目标输出函数的函数名匹配时,将所述源输出函数的函数表项目替换为所述目标输出函数的函数表项目。
在本实施例的一个实施方式中,所述获取模块包括:打印单元,使用所述c方法打印所述应用程序的日志信息;获取单元,用于在所述c方法内获取所述日志信息。
在本实施例的一个实施方式中,所述终端包括:接收模块,用于在所述第一展示模块在所述应用程序的页面上展示所述日志信息之后,在所述应用程序的LogView中接收关键字;第二展示模块,用于以所述关键字为条目过滤所述日志信息,并在所述LogView上展示过滤后的日志信息。
在本实施例的一个实施方式中,所述第一展示模块包括:记录单元,用于将所述日志信息记录到数据源中;回调单元,用于将所述数据源回调至所述源输出函数;展示单元,用于使用所述源输出函数在LogView中展示所述日志信息。
图7是根据本发明实施例的服务器的结构框图,如图7所示,该装置包括:
替换模块70,用于在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;
跳转模块72,用于在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;
获取模块74,用于使用所述目标输出函数获取日志信息。
在本实施例的一个实施方式中,所述终端还包括:第一展示模块,用于在所述获取模块使用所述目标输出函数获取日志信息之后,在所述应用程序的页面上展示所述日志信息。
在本实施例的一个实施方式中,所述替换模块包括:替换单元,用于使用fishhook工具将所述应用程序的源NSLog()函数替换成目标NSLog()函数,其中,所述源输出函数包括所述源NSLog()函数,所述目标输出函数包括所述目标NSLog()函数。
在本实施例的一个实施方式中,所述替换单元还用于:修改所述源NSLog()函数的函数指针,将所述函数指针指向到所述目标NSLog()函数。
在本实施例的一个实施方式中,所述跳转模块包括:获取单元,用于从间接地址表获取符号表索引;处理单元,用于通过所述符号表索引得到所述源输出函数对应的符号表表项;第一查找单元,用于通过所述符号表表项查找所述源输出函数的函数名在字符串表的字符串表索引;第二查找单元,用于通过所述字符串表和所述字符串表索引查找所述目标输出函数的函数名;替换单元,用于在所述源输出函数的函数名和所述目标输出函数的函数名匹配时,将所述源输出函数的函数表项目替换为所述目标输出函数的函数表项目。
在本实施例的一个实施方式中,所述获取模块包括:打印单元,使用所述c方法打印所述应用程序的日志信息;获取单元,用于在所述c方法内获取所述日志信息。
在本实施例的一个实施方式中,所述终端包括:接收模块,用于在所述第一展示模块在所述应用程序的页面上展示所述日志信息之后,在所述应用程序的LogView中接收关键字;第二展示模块,用于以所述关键字为条目过滤所述日志信息,并在所述LogView上展示过滤后的日志信息。
在本实施例的一个实施方式中,所述第一展示模块包括:记录单元,用于将所述日志信息记录到数据源中;回调单元,用于将所述数据源回调至所述源输出函数;展示单元,用于使用所述源输出函数在LogView中展示所述日志信息。
需要说明的是,终端和服务器仅是方案在执行主体上的差异,上述识别终端中的各个示例和可选方案同样适应在服务器中,并产生相同的技术效果。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
实施例3
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;
S2,在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;
S3,使用所述目标输出函数获取日志信息。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;
S2,在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;
S3,使用所述目标输出函数获取日志信息。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种获取日志的方法,其特征在于,包括:
在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;
在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;
使用所述目标输出函数获取日志信息。
2.根据权利要求1所述的方法,其特征在于,在使用所述目标输出函数获取日志信息之后,所述方法还包括:
在所述应用程序的页面上展示所述日志信息。
3.根据权利要求1所述的方法,其特征在于,将所述应用程序的源输出函数替换成目标输出函数包括:
使用fishhook工具将所述应用程序的源NSLog()函数替换成目标NSLog()函数,其中,所述源输出函数包括所述源NSLog()函数,所述目标输出函数包括所述目标NSLog()函数。
4.根据权利要求3所述的方法,其特征在于,使用fishhook工具将所述应用程序的源NSLog()函数替换成目标NSLog()函数包括:
修改所述源NSLog()函数的函数指针,将所述函数指针指向到所述目标NSLog()函数。
5.根据权利要求1所述的方法,其特征在于,从所述源输出函数跳转到所述目标输出函数包括:
从间接地址表获取符号表索引;
通过所述符号表索引得到所述源输出函数对应的符号表表项;
通过所述符号表表项查找所述源输出函数的函数名在字符串表的字符串表索引;
通过所述字符串表和所述字符串表索引查找所述目标输出函数的函数名;
在所述源输出函数的函数名和所述目标输出函数的函数名匹配时,将所述源输出函数的函数表项目替换为所述目标输出函数的函数表项目。
6.根据权利要求1所述的方法,其特征在于,使用所述目标输出函数获取日志信息包括:
使用所述c方法打印所述应用程序的日志信息;
在所述c方法内获取所述日志信息。
7.根据权利要求2所述的方法,其特征在于,在所述应用程序的页面上展示所述日志信息之后,所述方法包括:
在所述应用程序的LogView中接收关键字;
以所述关键字为条目过滤所述日志信息,并在所述LogView上展示过滤后的日志信息。
8.一种获取日志的装置,其特征在于,包括:
替换模块,用于在启动应用程序后,将所述应用程序的源输出函数替换成目标输出函数,其中,所述源输出函数是用于打印日志信息的c函数,所述目标输出函数是hook所述源输出函数的c方法;
跳转模块,用于在所述应用程序调用所述源输出函数时,从所述源输出函数跳转到所述目标输出函数;
获取模块,用于使用所述目标输出函数获取日志信息。
9.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至7任一项中所述的方法。
10.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1至7任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811076537.0A CN109376074A (zh) | 2018-09-14 | 2018-09-14 | 获取日志的方法及装置、存储介质、电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811076537.0A CN109376074A (zh) | 2018-09-14 | 2018-09-14 | 获取日志的方法及装置、存储介质、电子装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109376074A true CN109376074A (zh) | 2019-02-22 |
Family
ID=65405457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811076537.0A Pending CN109376074A (zh) | 2018-09-14 | 2018-09-14 | 获取日志的方法及装置、存储介质、电子装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109376074A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110022244A (zh) * | 2019-04-03 | 2019-07-16 | 北京字节跳动网络技术有限公司 | 用于发送信息的方法和装置 |
CN110389753A (zh) * | 2019-06-06 | 2019-10-29 | 五八有限公司 | 原生应用的链式调用方法、装置、电子设备及存储介质 |
CN110399107A (zh) * | 2019-07-24 | 2019-11-01 | 深圳市盟天科技有限公司 | 日志打印方法、装置、存储介质及设备 |
CN110515814A (zh) * | 2019-08-16 | 2019-11-29 | 海南车智易通信息技术有限公司 | iOS客户端的全量日志收集方法、装置和移动终端 |
CN111061448A (zh) * | 2019-12-24 | 2020-04-24 | 五八有限公司 | 日志信息的显示方法、装置、电子设备及存储介质 |
CN113220362A (zh) * | 2021-04-30 | 2021-08-06 | 浙江大华技术股份有限公司 | 日志记录获取方法、装置、计算机设备和存储介质 |
CN113553578A (zh) * | 2021-07-08 | 2021-10-26 | 北京奇艺世纪科技有限公司 | 一种日志打印响应方法、装置、电子设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105204789A (zh) * | 2015-08-24 | 2015-12-30 | 北京金山安全软件有限公司 | 一种api调试日志打印方法及装置 |
CN106557300A (zh) * | 2015-09-24 | 2017-04-05 | 腾讯科技(深圳)有限公司 | 一种野指针的函数栈信息确定方法、装置及电子设备 |
CN106845236A (zh) * | 2017-01-18 | 2017-06-13 | 东南大学 | 一种针对iOS平台的应用程序多维度隐私泄露检测方法及系统 |
CN108229152A (zh) * | 2016-12-21 | 2018-06-29 | 武汉安天信息技术有限责任公司 | 基于ios平台动态监控的方法及系统 |
-
2018
- 2018-09-14 CN CN201811076537.0A patent/CN109376074A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105204789A (zh) * | 2015-08-24 | 2015-12-30 | 北京金山安全软件有限公司 | 一种api调试日志打印方法及装置 |
CN106557300A (zh) * | 2015-09-24 | 2017-04-05 | 腾讯科技(深圳)有限公司 | 一种野指针的函数栈信息确定方法、装置及电子设备 |
CN108229152A (zh) * | 2016-12-21 | 2018-06-29 | 武汉安天信息技术有限责任公司 | 基于ios平台动态监控的方法及系统 |
CN106845236A (zh) * | 2017-01-18 | 2017-06-13 | 东南大学 | 一种针对iOS平台的应用程序多维度隐私泄露检测方法及系统 |
Non-Patent Citations (6)
Title |
---|
CHAOYUAN899: "重定向 NSLog 输出到文件", 《HTTPS://WEB.ARCHIVE.ORG/WEB/20171125220351/HTTPS://BLOG.CSDN.NET/CHAOYUAN899/ARTICLE/DETAILS/51816999》 * |
DRAVENESS: "动态修改C语言函数的实现", 《HTTPS://SEGMENTFAULT.COM/A/1190000006080902?_EA=1012269》 * |
KAGENZHAO: "用fishhook hook输出方法(NSLog,print)", 《HTTPS://WWW.JIANSHU.COM/P/98C97A32DA29》 * |
无: "facebook/fishhook", 《HTTPS://WEB.ARCHIVE.ORG/WEB/20160320194400/HTTPS://GITHUB.COM/FACEBOOK/FISHHOOK》 * |
朝元: "使用fishhook hook NSLog 函数", 《HTTPS://MELODYOFNIGHT.GITHUB.IO/2017/02/24/使用FISHHOOK-HOOK-NSLOG-函数/》 * |
窦玉杰、梁子: "《网络管理大全》", 31 May 2006 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110022244A (zh) * | 2019-04-03 | 2019-07-16 | 北京字节跳动网络技术有限公司 | 用于发送信息的方法和装置 |
CN110389753A (zh) * | 2019-06-06 | 2019-10-29 | 五八有限公司 | 原生应用的链式调用方法、装置、电子设备及存储介质 |
CN110389753B (zh) * | 2019-06-06 | 2024-01-23 | 五八有限公司 | 原生应用的链式调用方法、装置、电子设备及存储介质 |
CN110399107A (zh) * | 2019-07-24 | 2019-11-01 | 深圳市盟天科技有限公司 | 日志打印方法、装置、存储介质及设备 |
CN110399107B (zh) * | 2019-07-24 | 2023-08-29 | 深圳市盟天科技有限公司 | 日志打印方法、装置、存储介质及设备 |
CN110515814A (zh) * | 2019-08-16 | 2019-11-29 | 海南车智易通信息技术有限公司 | iOS客户端的全量日志收集方法、装置和移动终端 |
CN110515814B (zh) * | 2019-08-16 | 2023-09-19 | 海南车智易通信息技术有限公司 | iOS客户端的全量日志收集方法、装置和移动终端 |
CN111061448A (zh) * | 2019-12-24 | 2020-04-24 | 五八有限公司 | 日志信息的显示方法、装置、电子设备及存储介质 |
CN113220362A (zh) * | 2021-04-30 | 2021-08-06 | 浙江大华技术股份有限公司 | 日志记录获取方法、装置、计算机设备和存储介质 |
CN113553578A (zh) * | 2021-07-08 | 2021-10-26 | 北京奇艺世纪科技有限公司 | 一种日志打印响应方法、装置、电子设备和存储介质 |
CN113553578B (zh) * | 2021-07-08 | 2024-04-12 | 北京奇艺世纪科技有限公司 | 一种日志打印响应方法、装置、电子设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109376074A (zh) | 获取日志的方法及装置、存储介质、电子装置 | |
US11860821B2 (en) | Generating target application packages for groups of computing devices | |
US7702959B2 (en) | Error management system and method of using the same | |
CN106033393B (zh) | 一种应用程序测试方法及系统以及移动终端 | |
CN105787364B (zh) | 任务的自动化测试方法、装置及系统 | |
CN111143723A (zh) | 页面跳转方法、装置、电子设备及存储介质 | |
CN109829287A (zh) | Api接口权限访问方法、设备、存储介质及装置 | |
CN108491322A (zh) | 自动化测试方法、装置及存储介质 | |
CN108182215A (zh) | 一种结构化查询语言sql性能统计的方法及装置 | |
US20090019046A1 (en) | Multiple configuration item status value analysis | |
CN109558202A (zh) | 基于小程序的列表页面开发方法、装置、设备及存储介质 | |
CN109783351A (zh) | 界面测试方法、装置及计算机可读存储介质 | |
CN112148700A (zh) | 日志数据处理方法、装置、计算机设备和存储介质 | |
Gregorio et al. | Forensic analysis of nucleus RTOS on MTK smartwatches | |
CN106227727A (zh) | 一种分布式系统的日志更新方法、装置与系统 | |
CN104765792B (zh) | 一种维度数据存储的方法、装置及系统 | |
CN112671878B (zh) | 一种区块链的信息订阅方法、装置、服务器和存储介质 | |
CN105988943B (zh) | 一种驱动无线适配器的方法及装置 | |
CN106201790A (zh) | 一种基于dsdt表的调试方法及调试系统 | |
CN105787359B (zh) | 进程守护方法和装置 | |
CN103092942B (zh) | 查询信息获取及展示的客户端、方法及系统 | |
CN105391602B (zh) | 一种数据采集测试方法和装置 | |
CN109491900A (zh) | 接口测试方法、装置、电子设备及计算机可读存储介质 | |
CN109600242A (zh) | 用于家电配网的管理方法、家电、客户端及系统 | |
US9177073B2 (en) | Identifying implicit services links using service usage information |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190222 |
|
RJ01 | Rejection of invention patent application after publication |