System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及计算机,特别涉及一种源代码的处理方法、装置及电子设备。
技术介绍
1、随着汽车的智能化发展,汽车软件在车辆使用中扮演了重要角色。由于汽车软件的功能模块需要在不同平台之间移植,移植过程中往往需要梳理功能模块之间的依赖关系以对平台进行适配。通过人工去确定每个函数中的依赖关系只能达到事倍功半的效果,而提取依赖关系在理解代码和代码移植中扮演着不可或缺的角色。
2、现有技术中,在源代码完成开发之后,通常使用静态代码分析工具对源代码进行软件测试,以保障软件质量,然而这些静态代码分析工具多侧重于词法分析、语法分析、类型分析、控制流分析和数据流分析等基本分析,存在代码中的依赖关系梳理困难的问题。为了提高代码移植的效率性,如何在对源代码进行软件测试时提取代码中的依赖信息成为亟待解决的问题。
技术实现思路
1、为了解决现有技术的问题,本申请提供了一种源代码的处理方法、装置及电子设备,结合常见的静态代码分析技术和依赖信息提取方法,自动化提取功能模块中各个函数的依赖关系,帮助进行代码理解和代码移植,解决了如何在对源代码进行软件测试时提取代码中的依赖信息的问题。
2、根据本申请的一方面,提供了一种源代码的处理方法,所述方法包括:
3、获取项目的源代码和配置信息;所述配置信息表征所述项目运行需要的信息;
4、基于所述配置信息对所述源代码进行语法分析处理,生成所述源代码的抽象语法树;
5、确定所述抽象语法树中关联函数的目标节点,对所述目标节点
6、基于所述目标节点的解析处理结果进行代码块划分,得到所述目标节点的代码块划分结果,基于所述目标节点的代码块划分结果进行控制流解析,生成所述目标节点的控制流图;
7、基于所述目标节点的控制流图进行依赖分析,得到所述目标节点的依赖信息。
8、在一种可能的实现方式中,所述配置信息包括附加包含目录、附加宏定义和所述项目的项目路径,所述附加包含目录为所述项目依赖的头文件,所述附加宏定义为所述项目依赖的宏,
9、所述基于所述配置信息对所述源代码进行语法分析处理,生成所述源代码的抽象语法树,包括:
10、根据所述附加包含目录、所述附加宏定义和所述项目的项目路径生成编译参数;
11、基于所述编译参数调用编译器对所述源代码进行语法分析,生成所述源代码的抽象语法树。
12、在一种可能的实现方式中,所述抽象语法树的每个节点包括类型信息;所述确定所述抽象语法树中关联函数的目标节点,包括:
13、遍历所述抽象语法树的每个节点,对于遍历到的当前节点,若所述当前节点的类型信息与函数类型相匹配,则确定所述节点为所述目标节点。
14、在一种可能的实现方式中,所述对所述目标节点进行解析处理,得到所述目标节点的解析处理结果,包括:
15、对所述目标节点表征的函数进行语句分析,得到所述函数的函数名、函数形参、返回值类型和语句;
16、基于所述函数的函数名、函数形参、返回值类型和语句,得到为所述目标节点的解析处理结果。
17、在一种可能的实现方式中,所述基于所述目标节点的解析处理结果进行代码块划分,得到所述目标节点的代码块划分结果,包括:
18、根据所述目标节点的解析处理结果中所述函数的语句,将所述函数划分为多个代码块;
19、确定所述多个代码块为所述目标节点的代码块划分结果。
20、在一种可能的实现方式中,所述方法还包括:
21、若所述节点的类型信息与数据类型相匹配,则确定所述节点为类型节点,对所述类型节点表征的数据类型进行类型解析,得到所述类型节点所对应数据类型的类型信息;
22、基于所述类型节点所对应数据类型的类型信息,确定每个代码块中类型节点的类型解析结果。
23、在一种可能的实现方式中,所述基于所述目标节点的控制流图进行依赖分析,得到所述目标节点的依赖信息,包括:
24、基于所述控制流图,提取每个代码块中引用的全局变量、函数调用信息和类型依赖信息,得到每个代码块的依赖信息;所述类型依赖信息包括每个代码块中类型节点的类型解析结果;
25、基于每个代码块的依赖信息组成所述节点的依赖信息。
26、在一种可能的实现方式中,所述方法还包括:
27、在所述源代码的抽象语法树的生成发生异常的情况下,生成异常报告;
28、基于所述异常报告输出所述源代码的错误信息。
29、另一方面,提供了一种源代码的处理装置,所述装置包括:
30、信息获取模块,用于获取项目的源代码和配置信息;所述配置信息表征所述项目运行需要的信息;
31、抽象语法树生成模块,用于基于所述配置信息对所述源代码进行语法分析处理,生成所述源代码的抽象语法树;
32、解析处理模块,用于确定所述抽象语法树中关联函数的目标节点,对所述目标节点进行解析处理,得到所述目标节点的解析处理结果;所述解析处理结果表征所述目标节点的函数信息;
33、代码块划分模块,用于基于所述目标节点的解析处理结果进行代码块划分,得到所述目标节点的代码块划分结果,基于所述目标节点的代码块划分结果进行控制流解析,生成所述目标节点的控制流图;
34、依赖信息确定模块,用于基于所述目标节点的控制流图进行依赖分析,得到所述目标节点的依赖信息。
35、在一种可能的实现方式中,所述配置信息包括附加包含目录、附加宏定义和所述项目的项目路径,所述附加包含目录为所述项目依赖的头文件,所述附加宏定义为所述项目依赖的宏,
36、所述抽象语法树生成模块,用于:
37、根据所述附加包含目录、所述附加宏定义和所述项目的项目路径生成编译参数;
38、基于所述编译参数调用编译器对所述源代码进行语法分析,生成所述源代码的抽象语法树。
39、在一种可能的实现方式中,所述抽象语法树的每个节点包括类型信息;所述解析处理模块包括目标节点确定单元,所述目标节点确定单元用于:
40、遍历所述抽象语法树的每个节点,对于遍历到的当前节点,若所述当前节点的类型信息与函数类型相匹配,则确定所述节点为所述目标节点。
41、在一种可能的实现方式中,所述解析处理模块还包括函数解析单元,所述函数解析单元用于:
42、对所述目标节点表征的函数进行语句分析,得到所述函数的函数名、函数形参、返回值类型和语句;
43、基于所述函数的函数名、函数形参、返回值类型和语句,得到为所述目标节点的解析处理结果。
44、在一种可能的实现方式中,所述代码块划分模块,用于:
45、根据所述目标节点的解析处理结果中所述函数的语句,将所述函数划分为多个代码块;
46本文档来自技高网...
【技术保护点】
1.一种源代码的处理方法,其特征在于,所述方法包括:
2.根据权利要求1所述的源代码的处理方法,其特征在于,所述配置信息包括附加包含目录、附加宏定义和所述项目的项目路径,所述附加包含目录为所述项目依赖的头文件,所述附加宏定义为所述项目依赖的宏,
3.根据权利要求1所述的源代码的处理方法,其特征在于,所述抽象语法树的每个节点包括类型信息;所述确定所述抽象语法树中关联函数的目标节点,包括:
4.根据权利要求3所述的源代码的处理方法,其特征在于,所述对所述目标节点进行解析处理,得到所述目标节点的解析处理结果,包括:
5.根据权利要求4所述的源代码的处理方法,其特征在于,所述基于所述目标节点的解析处理结果进行代码块划分,得到所述目标节点的代码块划分结果,包括:
6.根据权利要求5所述的源代码的处理方法,其特征在于,所述方法还包括:
7.根据权利要求6所述的源代码的处理方法,其特征在于,所述基于所述目标节点的控制流图进行依赖分析,得到所述目标节点的依赖信息,包括:
8.根据权利要求1所述的源代码的处理方法,
9.一种源代码的处理装置,其特征在于,所述装置包括:
10.一种电子设备,其特征在于,包括处理器和存储器,所述存储器中存储有至少一条指令或者至少一段程序,所述至少一条指令或者所述至少一段程序由所述处理器加载并执行以实现如权利要求1至8中任一项所述的源代码的处理方法。
...【技术特征摘要】
1.一种源代码的处理方法,其特征在于,所述方法包括:
2.根据权利要求1所述的源代码的处理方法,其特征在于,所述配置信息包括附加包含目录、附加宏定义和所述项目的项目路径,所述附加包含目录为所述项目依赖的头文件,所述附加宏定义为所述项目依赖的宏,
3.根据权利要求1所述的源代码的处理方法,其特征在于,所述抽象语法树的每个节点包括类型信息;所述确定所述抽象语法树中关联函数的目标节点,包括:
4.根据权利要求3所述的源代码的处理方法,其特征在于,所述对所述目标节点进行解析处理,得到所述目标节点的解析处理结果,包括:
5.根据权利要求4所述的源代码的处理方法,其特征在于,所述基于所述目标节点的解析处理结果进行代...
【专利技术属性】
技术研发人员:姚依淼,江俊冶,陆长艳,
申请(专利权)人:中汽创智科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。