CN115033223A - 一种日志生成方法及装置 - Google Patents

一种日志生成方法及装置 Download PDF

Info

Publication number
CN115033223A
CN115033223A CN202210769922.3A CN202210769922A CN115033223A CN 115033223 A CN115033223 A CN 115033223A CN 202210769922 A CN202210769922 A CN 202210769922A CN 115033223 A CN115033223 A CN 115033223A
Authority
CN
China
Prior art keywords
code
file
program
log
code position
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
Application number
CN202210769922.3A
Other languages
English (en)
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.)
Lenovo Beijing Ltd
Original Assignee
Lenovo Beijing 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 Lenovo Beijing Ltd filed Critical Lenovo Beijing Ltd
Priority to CN202210769922.3A priority Critical patent/CN115033223A/zh
Publication of CN115033223A publication Critical patent/CN115033223A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/1805Append-only file systems, e.g. using logs or journals to store data
    • G06F16/1815Journaling file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本公开涉及一种日志生成方法及装置,该日志生成方法包括:确定程序的异常运行情况;根据所述异常运行情况,确定异常发生的代码位置;根据所述代码位置获取所述代码位置之前预设范围内的代码文件;对所述代码文件进行分析,提取所述代码文件中的关键信息;基于所述关键信息生成用于对所述异常进行分析的日志文件。

Description

一种日志生成方法及装置
技术领域
本公开涉及计算机技术领域,具体涉及一种日志生成方法及装置。
背景技术
程序调试运行时,有时会出现运行错误,在特定代码行崩溃。此时,可以使用调试工具捕获崩溃点当前的状态。然而,导致程序崩溃的原因有可能是崩溃点前面的一些代码中的变量运行出错或者状态错误。因此,将“崩溃点前面一定范围(如前100行)中的特定变量状态”输出,有助于分析崩溃原因。
目前,输出“崩溃点前面一定范围中的特定变量状态”需要开发人员手动在程序源码崩溃代码前面一定范围人工编写代码以输出调试日志。这样程序再次运行崩溃后,可以打印输出调试日志。但是,手动编写代码添加调试日志费时费力,且编写的调试日志代码重复、机械、分散,不易维护。
发明内容
本公开实施例的目的在于提供一种日志生成方法及装置,以解决现有技术中需要手动编写调试日志费时费力,且编写的日志代码不易维护的技术问题。
一方面,本公开实施例提供了一种日志生成方法,包括:
确定程序的异常运行情况;
根据所述异常运行情况,确定异常发生的代码位置;
根据所述代码位置获取所述代码位置之前预设范围内的代码文件;
对所述代码文件进行分析,提取所述代码文件中的关键信息;
基于所述关键信息生成用于对所述异常进行分析的日志文件。
在一些实施例中,根据所述代码位置获取所述代码位置之前预设范围内的代码文件,包括:
对所述代码位置的程序代码进行分析,确定所述程序代码的代码结构;
根据所述代码结构,从所述代码位置之前的程序代码中查找与所述代码位置的程序代码关联的关联代码;
将包含所述关联代码的完整的程序执行函数确定为所述代码文件。
在一些实施例中,根据所述代码位置获取所述代码位置之前预设范围内的代码文件,包括:
获取所述代码位置之前预设数量代码行的代码文件。
在一些实施例中,所述方法还包括:
如果所述异常发生的代码位置为所述程序的起始位置,将所述程序的全部程序代码确定为所述代码文件。
在一些实施例中,基于所述关键信息生成用于对所述异常进行分析的日志文件,包括:
基于所述关键信息生成对应的日志代码;
将所述日志代码插入所述异常发生的代码位置,编译生成可执行程序;
在所述可执行程序的运行过程中,基于生成的所述日志代码,生成对应的日志文件并输出。
在一些实施例中,所述关键信息包括关键变量、所述关键变量对应的变量参数、关键函数、所述关键函数对应的函数参数、所述关键函数对应的返回值以及所述关键函数的执行顺序中的至少一种。
在一些实施例中,所述方法还包括:
以浮窗或图层形式在所述程序的显示界面输出显示所述日志文件,其中,所述日志文件显示于所述显示界面的顶部或所述异常发生的代码位置的一侧。
在一些实施例中,确定程序的异常运行情况之后,所述方法还包括:
响应于针对所述异常的调试触发操作,确定异常发生的代码位置。
在一些实施例中,所述方法还包括:
在所述异常再次发生时,调用所述日志文件对所述异常进行分析,其中,所述日志文件预先存储于终端设备或服务器。
另一方面,本公开实施例还提供了一种日志生成装置,包括:
第一确定模块,配置为确定程序的异常运行情况;
第二确定模块,配置为根据所述异常运行情况,确定异常发生的代码位置;
获取模块,配置为根据所述代码位置获取所述代码位置之前预设范围内的代码文件;
提取模块,配置为对所述代码文件进行分析,提取所述代码文件中的关键信息;
生成模块,配置为基于所述关键信息生成用于对所述异常进行分析的日志文件。
本公开实施例提供的日志生成方法及装置,通过确定程序的异常运行情况,并根据所述异常运行情况,确定异常发生的代码位置;然后,根据所述代码位置获取所述代码位置之前预设范围内的代码文件;之后,对所述代码文件进行分析,提取所述代码文件中的关键信息;最后,基于所述关键信息生成用于对所述异常进行分析的日志文件,可以根据异常发生的代码位置之前预设范围内的代码文件自动生成用于对所示异常进行分析的日志文件,能够有效提高日志文件生成效率,无需人工手动编写代码,省时省力;同时,可以将日志文件自动输出,方便用户分析异常,提高程序异常分析效率和效果。
附图说明
图1为本公开实施例的日志生成方法的流程图;
图2为本公开实施例的日志生成方法的另一流程图;
图3为本公开实施例的日志生成方法的又一流程图;
图4为本公开实施例的日志生成装置的结构示意图。
具体实施方式
此处参考附图描述本公开的各种方案以及特征。
应理解的是,可以对此处申请的实施例做出各种修改。因此,上述说明书不应该视为限制,而仅是作为实施例的范例。本领域的技术人员将想到在本公开的范围和精神内的其他修改。
包含在说明书中并构成说明书的一部分的附图示出了本公开的实施例,并且与上面给出的对本公开的大致描述以及下面给出的对实施例的详细描述一起用于解释本公开的原理。
通过下面参照附图对给定为非限制性实例的实施例的优选形式的描述,本公开的这些和其它特性将会变得显而易见。
还应当理解,尽管已经参照一些具体实例对本公开进行了描述,但本领域技术人员能够确定地实现本公开的很多其它等效形式。
当结合附图时,鉴于以下详细说明,本公开的上述和其他方面、特征和优势将变得更为显而易见。
此后参照附图描述本公开的具体实施例;然而,应当理解,所申请的实施例仅仅是本公开的实例,其可采用多种方式实施。熟知和/或重复的功能和结构并未详细描述以避免不必要或多余的细节使得本公开模糊不清。因此,本文所申请的具体的结构性和功能性细节并非意在限定,而是仅仅作为权利要求的基础和代表性基础用于教导本领域技术人员以实质上任意合适的详细结构多样地使用本公开。
图1示出了本公开实施例的一种日志生成方法的流程图。如图1所示,本公开实施例提供了一种日志生成方法,包括:
S101:确定程序的异常运行情况。
其中,程序为经过编译的能够在终端(例如测试终端或应用终端)运行的可执行文件。开发人员通过开发终端编写程序代码,然后将程序代码过java源码编译器等编译成可以在终端上运行的可执行文件(字节码文件),该可执行文件被调用执行后便能够实现程序的运行。即程序为可执行程序。程序代码可以为Java、PHP或javascript代码等后端或前端代码。
程序在终端运行时,终端的处理器可以通过对应的API接口监听程序的执行进程(包括监听程序中的各个类和各执行函数等),从而监听所述程序的运行,在程序的运行出现错误时抛出异常,从而确定程序的异常运行情况(程序被调用执行时的异常)。
程序的异常运行情况具体可以包括空指针异常、输入输出异常、索引越界异常、数据格式异常、运算异常、访问权限异常、实例化异常、连接错误、方法参数错误、堆栈溢出、内存溢出异常等中的至少一种。其中,空指针异常是指程序运行时调用了未经初始化的对象或不存在的对象,比如图片未经初始化,或者图片创建时的路径错误,调用数组执行图片创建操作中,便容易出现该异常。数据格式异常是指在将一个字符串转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,便会抛出该异常。其他异常运行情况可以参考现有程序运行时的异常,此处不再赘述。
可以理解的是,程序抛出异常时即可确定程序的异常运行情况,无需确定具体的异常类型等。
S102:根据所述异常运行情况,确定异常发生的代码位置。
终端确定程序的异常运行情况后,可以根据异常运行情况捕获对应的异常信息,对捕获的异常信息进行反编译等处理,确定异常发生的具体代码位置。其中,异常信息可以为异常名称、异常类型以及发生异常的进程等信息中的至少一种。例如,Python程序执行时,可以通过内置的try语句进行异常检测和捕获,当程序在执行过程中出现异常时,可以捕获该异常,自动生成对应的异常类型,终端可以根据该异常类型查找对应的代码位置。
一些具体实施例中,在确定存在方法参数错误时,可以通过对异常信息进行反编译处理得到发生异常的类信息、方法(函数)、参数等逐层定位到异常发生(崩溃点)的具体代码位置。
另一些具体实施例中,可以根据对异常信息进行处理得到的异常发生的地址确定异常发生的代码位置。由于在代码编译连接时,每个函数都有起始地址和长度,该地址是程序运行时的地址,而函数内部,每条指令相对于函数开始地址会有偏移。因此,在获取发生异常的地址以后,可以定位到该地址落在哪个函数的区间内,然后找到该函数,进而通过计算偏移,定位到代码行,从而确定异常发生的代码位置。
又一些具体实施中,根据异常运行情况确定异常发生的代码位置时,无需对异常信息进行反编译,可以直接根据发生异常的进程的进程名等信息,定位到异常发生的代码位置。
S103:根据所述代码位置获取所述代码位置之前预设范围内的代码文件。
在确定异常发生的代码位置后,可以根据该代码位置获取该代码位置之前预设范围内的代码文件(例如该代码位置前100行的代码文件),即从发生异常的代码位置进行回溯,寻找影响异常发生的相关代码,以配合捕获的异常发生的代码位置的异常信息更加准确地分析异常发生的原因。
S104:对所述代码文件进行分析,提取所述代码文件中的关键信息。
其中,所述关键信息包括关键变量、所述关键变量对应的变量参数、关键函数、所述关键函数对应的函数参数、所述关键函数对应的返回值以及所述关键函数的执行顺序(关键函数调用时序)中的至少一种。
由于程序代码主要由一个或多个函数组成(包括在函数中定义变量等),本步骤中在获取所述代码位置之前预设范围内的代码文件后,可以逐行对上述代码文件进行分析,提取其中的关键变量及对应的变量参数、关键函数(例如函数名)及其参数、关键调用步骤(例如step1 function A start)等关键信息。
例如,代码文件中包括“print变量a”,即需要定义变量a,因此,可以确定“变量a”为一个较为重要的关键变量。再例如,代码文件中包括“step1 function A start”,即步骤1函数A开始执行,可以确定处于初始步骤的函数A为一关键函数,且该初始被调用的步骤为一关键调用步骤。
在对代码文件进行分析之前,可以对代码文件进行归一化处理,将没有实际意义的代码块(例如注释代码)进行删除,去除代码文件的冗余,提高后续关键信息提取效率。
S105:基于所述关键信息生成用于对所述异常进行分析的日志文件。
提取出所述代码文件中的关键信息后,可以根据提取的关键信息使用代码生成工具等自动生成用于对所述异常进行分析的日志文件,无需用户(包括程序的测试人员、开发人员、使用用户等)手动编写大量日志代码输出调试日志,提高日志编码效率;同时在生成日志文件后,可以在出现异常时将上述日志自动输出,省去用户手动查找日志,提高程序异常分析效率和效果。
本公开实施例提供的日志生成方法通过确定程序的异常运行情况,并根据所述异常运行情况,确定异常发生的代码位置;然后,根据所述代码位置获取所述代码位置之前预设范围内的代码文件;之后,对所述代码文件进行分析,提取所述代码文件中的关键信息;最后,基于所述关键信息生成用于对所述异常进行分析的日志文件,可以根据异常发生的代码位置之前预设范围内的代码文件自动生成用于对所示异常进行分析的日志文件,能够有效提高日志文件生成效率,无需人工手动编写代码,省时省力;同时,可以将日志文件自动输出,方便用户分析异常,提高程序异常分析效率和效果。
上述的日志生成方法既可以用于程序的测试运行阶段(主要在开发终端进行);也可以用于程序在应用终端的运行,程序在应用终端的运行出现异常时,应用终端可以及时将生成的日志文件上传至开发终端。用于运行程序的终端也可以同时为开发终端和应用终端,本公开不具体限定。
在一些实施例中,如图2所示,步骤S103中,根据所述代码位置获取所述代码位置之前预设范围内的代码文件,包括:
S201:对所述代码位置的程序代码进行分析,确定所述程序代码的代码结构;
S202:根据所述代码结构,从所述代码位置之前的程序代码中查找与所述代码位置的程序代码关联的关联代码;
S203:将包含所述关联代码的完整的程序执行函数确定为所述代码文件。
其中,代码结构为程序代码的类型、格式、代码关系等结构,代码类型可以包括定义变量、传入参数、具体函数运算(例如i=i+1)等,代码类型也可包括定义变量或传入参数时具体的变量或参数的类型,例如,数、字符、布尔等类型;代码格式可以包括大括号、中括号、小括号范围内的代码等;代码关系可以包括代码位置所在的代码行是否为独立代码行,或者该代码行内的执行函数是否为独立函数等。关联代码为与所述代码位置的程序代码具有一定关联关系的代码,例如,包含关系、从属关系、逻辑运算关系以及串行或并行关系等。
在确定异常发生的具体代码位置后,获取该代码位置的程序代码(某一代码行的代码),确定其代码结构,例如判断该代码行中是否存在执行函数,若存在,判断该执行函数是独立函数还是与其他代码行存在关联关系的函数中的某一步骤;然后,根据该代码结构从该代码位置进行回溯,查找与所述代码位置的程序代码关联的关联代码,并将包含所述关联代码的完整的程序执行函数确定为所述代码文件。
例如,当该代码位置的程序代码对应的函数为独立函数时,可以根据该独立函数所处的执行步骤,依次向前查找与该独立函数相关联的其他函数,查找出的代码文件可以为一按顺序执行的单级或多级函数;当该代码位置的程序代码为一嵌套结构中的子结构时,可以从该代码位置之前的程序代码中查找该子结构对应的父结构;当该代码位置的程序代码为一if条件语句中的结果时,可以将查找到的与该结果对应的if条件确定为所述代码文件;当该代码位置的程序代码为一执行函数的最后一步骤时,可以查找该步骤之前的执行函数的全部步骤。
以控制语句(while,if,for)为例对代码文件的确定进行说明,
该控制语句的程序代码如下:
while(n){
if(k>0)return 7;
n--;
}
当异常发生的代码位置为n--时,n--为一独立的循环函数,因此,可以向前查找包含该n的全部代码,while(n)至n--的代码行;同时,由于n--为if语句中的结果,因此,条件if(k>0)return 7为确定的代码文件中的代码,由于while(n)位于if(k>0)return 7之前,通过综合判断,确定while(n){至n--的代码行(}位于n--之后,可忽略)为最终确定的代码文件。当n--之前还包含另一个while(n)语句时,两个while(n)语句可能存在关联可以将n--之前包含另一while(n)语句的程序代码确定为另一代码文件,以进一步扩大代码文件的确定范围,提高代码文件确定的全面性和可靠性。
对于例如push({key:‘function1’,params:[]})的代码行,可以直接确定其为独立函数,根据该独立函数所处的执行步骤,依次向前查找与该独立函数相关联的其他函数。其中,push函数可以将数组元素加载到一个数组中。
通过步骤S201至S203,尽可能查找全面的与异常发生的代码位置的程序代码相关联的关联代码,得到完善、有效的代码信息,提高程序异常分析的准确性和有效性。
特别地,当查找到多个并列的关联代码时,可以进一步从中提取出相关性最高的关联代码,以减少确定的代码文件的代码数量,并实现代码文件的精准确定,便于后续的异常分析。
本实施例中,根据异常发生的代码位置的程序代码的代码结构即可确定出所需的预设范围内的代码文件,无需对程序代码的具体内容进行分析,可以提高代码文件的确定效率。另一些实施例中,由于异常发生的代码位置通常为一代码行,代码数量较少,因此,也可以对具体的代码内容进行分析确定预设范围内的代码文件。例如,上述控制语句中,异常发生的代码位置的程序代码为n--时,可以确定是执行循环,然后从该位置向前查找包含n的完整的执行函数。在一些实施例中,步骤S103中,根据所述代码位置获取所述代码位置之前预设范围内的代码文件,包括:
S301:获取所述代码位置之前预设数量代码行的代码文件。
本实施例中,可以直接将代码位置之前预设数量行(例如前100行)的代码文件确定为所需的代码文件,无需根据代码位置的程序代码查找关联代码,代码文件确定方便、快捷。但是该方法可能在关联代码较多时,将部分较为关键的关联代码剔除,影响异常分析结果的准确性。因此,本步骤中,预设数量行不能设置的太少;当然,预设数量行也不能设置的太多,以尽可能获取更加有效的代码文件,如果预设数量行设置的太多可能存在大量的无关代码,影响日志文件生成效率和异常分析结果。
本实施例中,步骤S301可以结合上述步骤S201至步骤S203共同进行,例如,当异常发生的代码位置的程序代码为method("a","b","c");时,可以确定该步骤是对方法method中的变量进行定义,属于这一方法的起始位置,且通过S201至步骤S203可以确定method之前并无相关联的关联代码,此时,可以将所述代码位置之前预设数量代码行的代码文件确定为所述代码位置之前预设范围内的代码文件,对预设数量代码行的代码文件进行分析,以便确定异常发生的原因。该异常发生的原因可能是代码文件中的某一步骤时已经出现错误,但仍可以继续执行,直到在执行method()时崩溃。
在一些实施例中,步骤S104中,对所述代码文件进行分析,提取所述代码文件中的关键信息,包括:
S1041:对所述代码文件进行解析,判断所述代码文件中是否存在与预设代码类型相匹配的程序代码;
S1042:若存在,从所述代码文件中提取与所述预设代码类型相匹配的程序代码;
S1043:从与所述预设代码类型相匹配的程序代码中提取对应的所述关键信息。
具体地,可以预先根据代码类型构建预设代码类型库,预设代码类型可以包括变量类、函数类、赋值类、声明类等。判断所述代码文件中是否存在上述类型的程序代码,例如,根据预设代码类型在代码文件中查找到属于变量类的程序代码“print变量a”,便可将其中的变量a确定为关键变量这一关键信息。通过将代码文件与预设代码类型进行匹配,先定位到包含关键信息的程序代码,再从中提取关键信息,可以提高关键信息提取效率。
另一些实施例中,步骤S104中,对所述代码文件进行分析,提取所述代码文件中的关键信息,包括:
S1044:获取各代码行之间的关联关系;
S1045:基于所述关联关系提取所述代码文件中的关键信息。
本实施例中,可以根据不同代码行之间的关联关系定位到包含关键信息的代码行,然后提取对应的关键信息。其中,关联关系可以包括串行执行、并行执行、传递参数(包括数值和地址等)等中的一种,例如,可以根据步骤S1041至S1043确定出其中的传参函数,然后,传参函数与参数之间的关联关系,分别从包含传参函数和参数的代码行中,提取出具体的传参函数和参数数值作为关键信息,可以有效避免关键信息的遗漏。再例如,当确定代码文件中第一行代码和第六行代码为并行执行关系,可以直接从第一行代码和第六行代码中提取对应的存在并行关系的函数或参数等关键信息,便于对关键信息进行整合分析。
由于所述代码文件中存在一定的无关代码,本实施例中,获取各代码行之间的关联关系,进而根据关联关系提取所述代码文件中的关键信息,一方面可以提高关键信息提取效率,另一方面将关联性较强的关键信息整合在一起,便于后续日志的生成
在一些实施例中,如图3所示,步骤S105中,基于所述关键信息生成用于对所述异常进行分析的日志文件,包括:
S401:基于所述关键信息生成对应的日志代码;
S402:将所述日志代码插入所述异常发生的代码位置,编译生成可执行程序;
S403:在所述可执行程序的运行过程中,基于生成的所述日志代码,生成对应的日志文件并输出。
具体地,程序的开发人员根据提取的关键信息构建代码映射关系,将各关键信息关联整合在一起,并使用javapoet工具等代码生成工具自动生成用于对所述异常进行分析的日志代码,然后通过例如Gradle插件提供的Transform API对出现异常的代码位置的程序代码进行编译,找到字节码插桩入口(异常发生的代码位置),将生成的日志代码插入上述异常发生的代码位置,进而使用ASM字节码工具等,修改异常发生的代码位置的程序代码的字节码文件,将日志代码对应的字节码文件添加至异常发生的代码位置的程序代码的字节码文件,编译生成新的能够直接在终端运行的字节码文件(可执行程序),然后运行该新的可执行程序,在新的可执行程序的运行过程中,基于生成的所述日志代码,自动生成对应的用于对异常进行分析的日志文件并输出。
Gradle Transform为标准API,可以将输入的.java代码文件转变成目标字节码文件,从而实现字节码插桩、代码注入等。ASM字节码工具主要专注于操作的易用性,特别适用于本实施例中动态变化的异常发生的代码位置的程序代码和对应的日志代码的编译。
上述提取的关键信息可以存储于本地终端设备或服务器,以便后续出现异常时复用,再次进行日志代码的生成。特别是在在多线程并发函数,由于不同的函数存在一定的重复代码,因此,可以将包含上述重复代码的关键信息预先存储。
由于日志文件的代码通常单调且重复,因此,生成的日志代码可以为格式代码等能够重复的日志代码,且该能够重复的日志代码可以预先存储,配合再次运行的包含上述日志代码的可执行程序,可以根据可执行程序的运行情况生成对应的日志文件并输出,以便对异常进行准确分析。
上述能够重复的日志代码也可以在出现其他异常时,配合其他格式代码等公共代码,重新进行编译生成新的可执行程序,进一步提高日志文件生成效率,且便于代码的管理、维护。
在一些实施例中,所述方法还包括:
如果所述异常发生的代码位置为所述程序的起始位置,将所述程序的全部程序代码确定为所述代码文件。
即在确定出所述异常发生的代码位置为整个程序代码的初始位置时,由于其前面不包含代码行,可以将该程序全部的程序代码确定为所述代码文件,从而对整个程序代码进行整体分析,以分析异常发生的原因。
在一些实施例中,所述方法还包括:
以浮窗或图层形式在所述程序的显示界面输出显示所述日志文件,其中,所述日志文件显示于所述显示界面的顶部或所述异常发生的代码位置的一侧。
本步骤中,可以在生成日志文件后将日志文件输出显示,以方便用户(测试人员或开发人员等)查看日志文件,无需手动从大量的日志文件中查找每个异常发生的代码位置对应的代码文件。日志文件可以以浮窗或图层的形式在终端的程序的显示界面输出显示,例如,显示界面同时显示异常发生的代码位置,当用户将鼠标指向该异常发生的代码位置时,该异常发生的代码位置对应的日志文件便弹出显示;当鼠标远离该异常发生的代码位置时,该异常发生的代码位置对应的日志文件的弹窗便消失,如此,方便用户在同一显示界面对不同异常发生的代码位置的异常运行情况进行分析,避免分析错误。
为方便用户查看,可以将日志文件显示于所述显示界面的顶部,也可以将所述异常发生的代码位置的一侧,从而可以将日志文件突出显示。
在一些实施例中,所述方法还包括:
S106:基于生成的所述日志文件对所述异常进行处理。
通过步骤S105生成对应的日志文件后,终端可以基于生成的所述日志文件和异常发生的代码位置的程序代码对异常进行处理,例如,Python程序中采用try-except语句进行异常捕获处理,try中的代码块捕获异常后,可以查找到合适的except块(与异常类型对应),except块根据生成的所述日志文件和异常发生的代码位置的程序代码对该异常进行处理,以便异常处理后程序的继续执行,提高程序运行的可靠性以及人机交互的友好性。
在一些实施例中,通过步骤S101确定程序的异常运行情况之后,所述方法还包括:
响应于针对所述异常的调试触发操作,确定异常发生的代码位置。
其中,调试触发操作可以为用户的点击操作、指向操作等。异常发生时,用户可以通过进行调试触发操作触发调试动作,调试动作触发后终端便根据所述异常运行情况,确定异常发生的代码位置,进而自动分析异常发生的代码位置之前预设范围内的代码文件,根据从代码文件中提取出的关键信息自动生成对应的日志文件并输出,如此,可以根据用户需要确定是否进行日志生成,提高用户使用体验。
另外,响应于针对所述异常的调试触发操作,确定异常发生的代码位置,进而生成对应的日志文件,有利于程序的可靠运行和提高用户体验。
当终端为测试终端时,为便于测试人员查看异常以及对应的日志文件,即使用户不针对所述异常进行调试触发操作,也可以生成并输出对应的日志文件。而当终端为应用终端时,为提高用户体验,当程序运行出现异常时,如果终端在预设时间内未收到针对所述异常的调试触发操作,则确定无需向用户输出日志文件,此时,终端可以自动确定异常发生的代码位置,进而生成对应的日志文件,并根据生成的日志文件对所述异常自动进行处理,保证程序的自动可靠执行,且能够避免用户察觉,提高用户使用体验。
在一些实施例中,所述方法还包括:
在所述异常再次发生时,调用所述日志文件对所述异常进行分析,其中,所述日志文件预先存储于终端设备或服务器。
本实施例中,可以在异常运行情况对应的日志文件首次生成时,将其存储在本地终端设备或服务器等第三方终端,在所述异常再次发生时,可以直接调用预先存储的日志文件进行异常分析,提高异常分析效率。
图4为本公开实施例的日志生成装置的结构示意图。如图4所示,本公开实施例提供了一种日志生成装置,包括:
第一确定模块10,配置为确定程序的异常运行情况;
第二确定模块20,配置为根据所述异常运行情况,确定异常发生的代码位置;
获取模块30,配置为根据所述代码位置获取所述代码位置之前预设范围内的代码文件;
提取模块40,配置为对所述代码文件进行分析,提取所述代码文件中的关键信息;
生成模块50,配置为基于所述关键信息生成用于对所述异常进行分析的日志文件。
在一些实施例中,获取模块30进一步配置为:
对所述代码位置的程序代码进行分析,确定所述程序代码的代码结构;
根据所述代码结构,从所述代码位置之前的程序代码中查找与所述代码位置的程序代码关联的关联代码;
将包含所述关联代码的完整的程序执行函数确定为所述代码文件。
在一些实施例中,获取模块30进一步配置为:
获取所述代码位置之前预设数量代码行的代码文件。
在一些实施例中,还包括第三确定模块,配置为:
如果所述异常发生的代码位置为所述程序的起始位置,将所述程序的全部程序代码确定为所述代码文件。
在一些实施例中,生成模块进一步配置为:
基于所述关键信息生成对应的日志代码;
将所述日志代码插入所述异常发生的代码位置,编译生成对应的日志文件。
在一些实施例中,所述关键信息包括关键变量、所述关键变量对应的变量参数、关键函数、所述关键函数对应的函数参数、所述关键函数对应的返回值以及所述关键函数的执行顺序中的至少一种。
在一些实施例中,还包括输出模块,配置为:
以浮窗或图层形式在所述程序的显示界面输出显示所述日志文件,其中,所述日志文件显示于所述显示界面的顶部或所述异常发生的代码位置的一侧。
在一些实施例中,第一确定模块10确定程序的异常运行情况之后,第二确定模块20进一步配置为:
响应于针对所述异常的调试触发操作,确定异常发生的代码位置。
在一些实施例中,还包括调用模块,配置为:
在所述异常再次发生时,调用所述日志文件对所述异常进行分析,其中,所述日志文件预先存储于终端设备或服务器。
本公开实施例提供的日志生成装置与上述实施例中日志生成方法相对应,基于上述的日志生成方法,本领域的技术人员能够了解本公开实施例中日志生成装置具体实施方式以及其各种变化形式,日志生成方法实施例中的任何可选项也适用于日志生成装置,此处不再赘述。
本公开实施例还提供了一种终端设备,包括:处理器和存储器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令时,实现上述的日志生成方法。
本公开实施例的终端设备可以包括但不限于诸如服务器、台式计算机、数字TV等固定终端设备,以及诸如手持设备(例如手机、平板电脑等)、车载设备、可穿戴设备(例如智能手表、智能手环等)等移动终端设备。
本公开实施例还提供了一种计算机可读存储介质,其上存储有计算机执行指令,所述计算机执行指令被处理器执行时实现上述的日志生成方法。
本公开实施例的计算机可读存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。本公开实施例中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
本公开实施例中,可以以一种或多种程序设计语言或其组合来编写用于执行本公开操作的计算机执行指令程序代码,所述程序设计语言包括Java、C++、PHP、Python等。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或终端上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
以上实施例仅为本公开的示例性实施例,不用于限制本公开,本公开的保护范围由权利要求书限定。本领域技术人员可以在本公开的实质和保护范围内,对本公开做出各种修改或等同替换,这种修改或等同替换也应视为落在本公开的保护范围内。

Claims (10)

1.一种日志生成方法,包括:
确定程序的异常运行情况;
根据所述异常运行情况,确定异常发生的代码位置;
根据所述代码位置获取所述代码位置之前预设范围内的代码文件;
对所述代码文件进行分析,提取所述代码文件中的关键信息;
基于所述关键信息生成用于对所述异常进行分析的日志文件。
2.根据权利要求1所述的方法,其中,根据所述代码位置获取所述代码位置之前预设范围内的代码文件,包括:
对所述代码位置的程序代码进行分析,确定所述程序代码的代码结构;
根据所述代码结构,从所述代码位置之前的程序代码中查找与所述代码位置的程序代码关联的关联代码;
将包含所述关联代码的完整的程序执行函数确定为所述代码文件。
3.根据权利要求1所述的方法,其中,根据所述代码位置获取所述代码位置之前预设范围内的代码文件,包括:
获取所述代码位置之前预设数量代码行的代码文件。
4.根据权利要求1所述的方法,其中,所述方法还包括:
如果所述异常发生的代码位置为所述程序的起始位置,将所述程序的全部程序代码确定为所述代码文件。
5.根据权利要求1所述的方法,其中,基于所述关键信息生成用于对所述异常进行分析的日志文件,包括:
基于所述关键信息生成对应的日志代码;
将所述日志代码插入所述异常发生的代码位置,编译生成可执行程序;
在所述可执行程序的运行过程中,基于生成的所述日志代码,生成对应的日志文件并输出。
6.根据权利要求1所述的方法,其中,所述关键信息包括关键变量、所述关键变量对应的变量参数、关键函数、所述关键函数对应的函数参数、所述关键函数对应的返回值以及所述关键函数的执行顺序中的至少一种。
7.根据权利要求1所述的方法,其中,所述方法还包括:
以浮窗或图层形式在所述程序的显示界面输出显示所述日志文件,其中,所述日志文件显示于所述显示界面的顶部或所述异常发生的代码位置的一侧。
8.根据权利要求1所述的方法,其中,确定程序的异常运行情况之后,所述方法还包括:
响应于针对所述异常的调试触发操作,确定异常发生的代码位置。
9.根据权利要求1所述的方法,其中,所述方法还包括:
在所述异常再次发生时,调用所述日志文件对所述异常进行分析,其中,所述日志文件预先存储于终端设备或服务器。
10.一种日志生成装置,包括:
第一确定模块,配置为确定程序的异常运行情况;
第二确定模块,配置为根据所述异常运行情况,确定异常发生的代码位置;
获取模块,配置为根据所述代码位置获取所述代码位置之前预设范围内的代码文件;
提取模块,配置为对所述代码文件进行分析,提取所述代码文件中的关键信息;
生成模块,配置为基于所述关键信息生成用于对所述异常进行分析的日志文件。
CN202210769922.3A 2022-06-30 2022-06-30 一种日志生成方法及装置 Pending CN115033223A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210769922.3A CN115033223A (zh) 2022-06-30 2022-06-30 一种日志生成方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210769922.3A CN115033223A (zh) 2022-06-30 2022-06-30 一种日志生成方法及装置

Publications (1)

Publication Number Publication Date
CN115033223A true CN115033223A (zh) 2022-09-09

Family

ID=83129434

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210769922.3A Pending CN115033223A (zh) 2022-06-30 2022-06-30 一种日志生成方法及装置

Country Status (1)

Country Link
CN (1) CN115033223A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115658553A (zh) * 2022-12-26 2023-01-31 西安葡萄城软件有限公司 一种基于低代码平台的调试方法、系统及装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115658553A (zh) * 2022-12-26 2023-01-31 西安葡萄城软件有限公司 一种基于低代码平台的调试方法、系统及装置

Similar Documents

Publication Publication Date Title
US10621068B2 (en) Software code debugger for quick detection of error root causes
US8359584B2 (en) Debugging from a call graph
Saha et al. Hector: Detecting resource-release omission faults in error-handling code for systems software
US8370816B2 (en) Device, method and computer program product for evaluating a debugger script
US10761963B2 (en) Object monitoring in code debugging
JP4395761B2 (ja) プログラムテスト支援装置およびその方法
EP2972882B1 (en) Javascript debugging using just my code
US20210064512A1 (en) Selective memory tracing of program execution
US20100199263A1 (en) Test case pattern matching
CN111459495B (zh) 单元测试代码文件生成方法、电子装置及存储介质
JP5303795B2 (ja) アプリケーションの解析方法、解析システム及び解析プログラム
Madsen et al. Feedback-directed instrumentation for deployed JavaScript applications
Azim et al. Dynamic slicing for android
Machado et al. MZoltar: automatic debugging of Android applications
CN115033223A (zh) 一种日志生成方法及装置
CN114416481A (zh) 日志分析方法、装置、设备及存储介质
KR20140088963A (ko) 애플리케이션 개발을 위한 런타임 에러 테스팅 시스템 및 방법
US8464103B2 (en) Generating a functional coverage model from a trace
CN114510429B (zh) 一种基于动态符号执行的调试方法、系统和介质
US20070168978A1 (en) Computer program code debugging method and system
CN113342431A (zh) 函数调用栈回溯、程序异常处理方法、装置、设备及介质
Mahmud et al. Acid: an api compatibility issue detector for android apps
Prada-Rojas et al. Observation tools for debugging and performance analysis of embedded linux applications
CN112464242A (zh) 一种网页平台漏洞采集方法、系统、终端及存储介质
Kleidermacher Integrating static analysis into a secure software development process

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