本发明涉及研发管理技术领域,尤其涉及一种记录代码运行轨迹方法、装置、计算机设备和存储介质。
背景技术:
在产品的生产和检测过程中,常常出现各种各样的问题,这就需要对这些问题进行排查处理。但是,有的时候排查一些生产问题或者一些测试问题的时候,光看日志和埋点只能知道用户的操作轨迹和接口的调用的记录,没有办法知道代码运行的实际轨迹,所以很难定位到问题本身的实际轨迹及运行参数,而且定位问题也会比较麻烦,产生问题的话也无法使用断点调试的方法去调试。
技术实现要素:
有鉴于此,有必要针对在排查代码时,不清楚代码运行的实际轨迹的问题,提供一种记录代码运行轨迹方法、装置、计算机设备和存储介质。
一种记录代码运行轨迹方法,包括:
读取前端代码,对所述代码中所有条件代码插入定位标记;
执行所述代码,当执行到所述条件代码时,将所述条件代码和对应的定位标记生成一个对象,将所述对象存入预设的存储文件夹中;
当所述代码执行完成后,将所述存储文件夹中的所有对象发送至后端数据库进行存储。
一种可能的设计中,所述读取前端代码,对所述代码中所有条件代码插入定位标记,包括:
逐行读取前端代码,采用预设的正则表达式判断一行所述代码是否存在条件代码的关键字,若不存在,则继续进行下一步,若存在,则在当前行的所述条件代码中插入一个定位标记;
继续读取下一行所述代码后,采用所述正则表达式继续判断下一行所述代码是否存在条件代码的关键字,直至遍历完所述代码。
一种可能的设计中,所述则在当前行的所述条件代码中插入一个定位标记,包括:
通过预设的随机数发生器随机生成一个定位标记,将所述定位标记与标记记录表进行比对,若所述标记记录表中含有所述定位标记,则通过所述随机数发生器重新生成一个定位标记后,继续与所述标记记录表进行比对,直至所述标记记录表中不含有生成的定位标记;
若所述标记记录表中不含有所述定位标记,则将所述定位标记插入当前行的所述条件代码中;
将所述定位标记记录在所述标记记录表中。
一种可能的设计中,所述执行所述代码,当执行到所述条件代码时,将所述条件代码和对应的定位标记生成一个对象,将所述对象存入预设的存储文件夹中,包括:
执行所述代码,当执行到一处所述条件代码时,获取所述条件代码及对应的定位标记、所述条件代码中的条件值;
将所述条件代码生成一个对象,所述对象的对象内容为所述定位标记和所述条件值,将所述对象放入预设的存储文件夹中。
一种可能的设计中,所述当所述代码执行完成后,将所述存储文件夹中的所有对象发送至后端数据库进行存储,包括:
当所述代码执行完成后,将所述存储文件夹中的每个所述对象中的定位标记写入预设的代码执行轨迹表中,将所述代码执行轨迹表中的所述定位标记与对应的所述对象进行映射,使得在所述代码执行轨迹表中,每个所述定位标记均与对应的所述对象形成一一对应关系,将所述代码执行轨迹表和所述存储文件夹中的所有对象一起发送至后端数据库进行存储。
一种可能的设计中,所述将所述代码执行轨迹表和所述存储文件夹中的所有对象一起发送至后端数据库进行存储,包括:
将所述代码执行轨迹表和所述存储文件夹一起进行压缩,生成压缩文件,将所述压缩文件进行加密;
向后端服务器发起通信请求,将加密后的所述压缩文件发送至后端数据库进行存储。
一种可能的设计中,所述将所述代码执行轨迹表和所述存储文件夹中的所有对象一起发送至后端数据库进行存储,包括:
通过交互界面获取用户发起的上传请求,展示登陆页面,通过所述登陆页面获取账密信息;
验证所述账密信息,若未通过验证,则返回错误提示,若通过验证,则判断所述账密信息对应的权限,若具有上传权限,则向后端服务器发起通信请求,将所述代码执行轨迹表和所述存储文件夹中的所有对象一起发送至后端数据库进行存储。
一种记录代码运行轨迹装置,包括:
插入定位标记模块,用于读取前端代码,对所述代码中所有条件代码插入定位标记;
生成对象模块,用于执行所述代码,当执行到所述条件代码时,将所述条件代码和对应的定位标记生成一个对象,将所述对象存入预设的存储文件夹中;
发送模块,用于当所述代码执行完成后,将所述存储文件夹中的所有对象发送至后端数据库进行存储。
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行上述记录代码运行轨迹方法的步骤。
一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述记录代码运行轨迹方法的步骤。
上述记录代码运行轨迹方法、装置、计算机设备和存储介质,包括读取前端代码,对所述代码中所有条件代码插入定位标记;执行所述代码,当执行到所述条件代码时,将所述条件代码和对应的定位标记生成一个对象,将所述对象存入预设的存储文件夹中;当所述代码执行完成后,将所述存储文件夹中的所有对象发送至后端数据库进行存储。本发明将代码执行过程中的条件代码生成对象,对象中包括条件代码的各个变量,供研发人员排查或检测代码使用,研发人员可以通过操作单个对象,直接了解代码运行情况,排查出问题所在。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。
图1为本发明一个实施例中的记录代码运行轨迹方法的流程图;
图2为本发明一个实施例中步骤s1的流程图;
图3为本发明一个实施例中插入一个定位标记的流程图;
图4为本发明一个实施例中步骤s2的流程图;
图5为本发明一个实施例中步骤s3的流程图;
图6为本发明一个实施例中记录代码运行轨迹装置的结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。
图1为本发明一个实施例中的记录代码运行轨迹方法的流程图,如图1所示,一种记录代码运行轨迹方法,包括以下步骤:
步骤s1,插入定位标记:读取前端代码,对代码中所有条件代码插入定位标记。
本步骤中的条件代码是指含有判断条件的代码块,判断条件是一种条件语句,根据不同的条件值执行不同的代码,如果条件满足某一条件值,则执行一段代码,否则执行其他代码,如if语句和selectcase语句。
在前端对代码进行打包前,本步骤读取全部的代码,并判断是否含有判断条件的条件代码部分,对全部的条件代码进行定位标记,且每个条件代码的定位标记都不同,以区别各条件代码。
在一个实施例中,步骤s1,如图2所示,包括:
步骤s101,逐行查找关键字:逐行读取前端代码,采用预设的正则表达式判断一行代码是否存在条件代码的关键字,若不存在,则继续进行下一步,若存在,则在当前行的条件代码中插入一个定位标记。
本步骤中的正则表达式是对字符串,包括普通字符,例如,a到z之间的字母,和特殊字符操作的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
由于前端代码的格式一般固定,因此本步骤可以通过正则表达式对每行代码进行查找,判断是否含有特定的多个关键字,例如,通过正则表达式搜索在一行代码中是否含有关键字“if”、“if”或“if”。当存在关键字时,认为当前行代码是条件代码的起始代码,在此行代码中插入一个定位标记。定位标记可以插入在当前行代码的前或后均可。
为了实现每个条件代码均插入不同的定位标记,在插入一个定位标记时,如图3所示,还包括:
步骤s10101,判断唯一性:通过预设的随机数发生器随机生成一个定位标记,将定位标记与标记记录表进行比对,若标记记录表中含有定位标记,则通过随机数发生器重新生成一个定位标记后,继续与标记记录表进行比对,直至标记记录表中不含有生成的定位标记。
本步骤不仅通过随机数发生器随机生成一个定位标记,还需确保此定位标记的唯一性。此定位标记可以是一串数字字符串。本步骤通过与标记记录表进行比对,确保唯一性。可以在步骤s1之前先把标记记录表初始化,即清空标记记录表中的内容,不同的前端代码之间的定位标记可以重复,同一个前端代码的定位标记确保各不相同。
步骤s10102,插入标记:若标记记录表中不含有定位标记,则将定位标记插入当前行的条件代码中。
标记记录表中不含有新生成的定位标记,则表示此定位标记是唯一的,此时将此唯一的定位标记插入条件代码中,插入时可以位于条件代码的前或后。
步骤s10103,记录标记:将定位标记记录在标记记录表中。
为了下一个条件代码对应的定位标记也具有唯一性,本步骤在生成唯一的定位标记后,将定位标记写入标记记录表中,给下一个生成的定位标记进行比对使用。
步骤s102,遍历代码:继续读取下一行代码后,采用正则表达式继续判断下一行代码是否存在条件代码的关键字,直至遍历完所述代码。
本步骤通过正则表达式对每行代码均进行判断,对所有的条件代码均进行定位标记。
本实施例采用正则表达式的方式逐行确定条件代码,并在所有的条件代码中均插入一个唯一的定位标记,为后续生成对象使用。
步骤s2,生成对象:执行代码,当执行到条件代码时,将条件代码和对应的定位标记生成一个对象,将对象存入预设的存储文件夹中。
对象是带有属性和方法的特殊数据类型,属性是与对象相关的值,可以通过向对象赋值,给对象添加属性。方法是能够在对象上执行的动作,也是对象的函数。本步骤通过对每个条件代码分别生成一个独立的对象后进行存储,为后续研发人员查找和判断代码运行情况,提供代码运行的具体情况。
在一个实施例中,步骤s2,如图4所示,包括:
步骤s201,获取数据:执行代码,当执行到一处条件代码时,获取条件代码及对应的定位标记、条件代码中的条件值。
在执行代码过程中,将代码中的定位标记定义为断点,由于定位标记的存在,代码执行到该定位标记处时,可以通过调用wait函数,暂时停止处理此条件代码,而是执行生成对象过程,获取条件代码及其对应的定位标记和条件值。
步骤s202,生成对象并存储:将条件代码生成一个对象,对象的对象内容为定位标记和条件值,将对象放入预设的存储文件夹中。
本步骤在生成一个对象时,可以通过预设的对象构造器,创建一个新的对象实例,对象实例中的方法即为条件代码,对象实例中的属性即为定位标记和条件值。本步骤还将所有的对象均在同一个存储文件夹中进行存储,便于后续对对象的整理和上传。
本实施例通过在代码执行过程中,对每一处的条件代码均生成一个对象的方式,得到代码在执行过程中的所有判断过程中的条件值,为研发人员提供代码执行的过程数据。
步骤s3,发送数据:当代码执行完成后,将存储文件夹中的所有对象发送至后端数据库进行存储。
本步骤对所有条件代码插入定位标记,对所有条件代码生成对象的过程都在前端进行,当某项代码执行完毕后,前端将存储在存储文件夹中的对象需要发送至后端数据库进行存储,供研发人员在需要排查或测试问题时查看。
在一个实施例中,步骤s3,如图5所示,包括:
步骤s301,映射对象:当代码执行完成后,将存储文件夹中的每个对象中的定位标记写入预设的代码执行轨迹表中,将代码执行轨迹表中的定位标记与对应的对象进行映射,使得在代码执行轨迹表中,每个定位标记均与对应的对象形成一一对应关系。
将代码执行轨迹表中的定位标记与对应对象进行映射后,研发人员可以直接打开代码执行轨迹表,根据映射关系,打开对应对象,执行对象,排查问题。
步骤s302,判断上传权限:通过交互界面获取用户发起的上传请求,展示登陆页面,通过登陆页面获取账密信息;验证账密信息,若未通过验证,则返回错误提示,若通过验证,则判断账密信息对应的权限,若具有上传权限,则向后端服务器发起通信请求,将代码执行轨迹表和存储文件夹中的所有对象一起发送至后端数据库进行存储。
将代码执行轨迹表和所有对象是否发送至后端服务器,需要通过交互界面接收到用户的上传请求,才开始进行。若用户不需要上传或用户的上传请求无相应权限,则不进行主动上传工作。
步骤s303,压缩和加密:将代码执行轨迹表和存储文件夹一起进行压缩,生成压缩文件,将压缩文件进行加密。
本步骤在对数据上传前,预先封装压缩脚本,通过调用预设的压缩脚本对代码执行轨迹表和存储文件夹一起进行压缩,压缩脚本可以是gzip的压缩代码。gzip是gnuzip(解压缩)的缩写,是一个gnu自由软件的文件压缩程序。gzip的压缩效率非常高,压缩比能达到1:3。采用本步骤既可以减少存储负担,又保证了传输过程中的安全性。
步骤s304,上传密文:向后端服务器发起通信请求,将加密后的压缩文件发送至后端数据库进行存储。
在向后端服务器发起通信请求时,可以采用超文本传输协议http方法中的get请求的方式进行,实现远程传输的目的。
本实施例通过过交互界面确定用户的上传请求和上传权限,对于具有上传权限的用户,通过get请求向后端数据库上传对代码执行轨迹表和存储文件夹一起进行压缩并加密后的压缩密文,供后续研发人员可以直接通过代码执行轨迹表读取对应的对象,对象查看代码执行情况。
本实施例记录代码运行轨迹方法,通过对前端需要打包的前端代码查找对应的条件代码,并分别插入唯一的定位标记。在代码执行过程中,在执行到条件代码时,对条件代码及其对应的定位标记、条件值一起生成对象进行存储,对所有对象生成代码执行轨迹表,并一起压缩加密后上传至后端数据库,以供研发人员根据代码执行轨迹表直接可以调用对象,查看对象中的代码执行情况。
在一个实施例中,提出了一种记录代码运行轨迹装置,如图6所示,包括如下模块:
插入定位标记模块,用于读取前端代码,对代码中所有条件代码插入定位标记;
生成对象模块,用于执行代码,当执行到条件代码时,将条件代码和对应的定位标记生成一个对象,将对象存入预设的存储文件夹中;
发送模块,用于当代码执行完成后,将存储文件夹中的所有对象发送至后端数据库进行存储。
在一个实施例中,提出了一种计算机设备,包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行计算机可读指令时实现上述各实施例的记录代码运行轨迹方法中的步骤。
在一个实施例中,提出了一种存储有计算机可读指令的存储介质,计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述各实施例的记录代码运行轨迹方法中的步骤。其中,存储介质可以为非易失性存储介质。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁盘或光盘等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明一些示例性实施例,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。