一种函数定位方法、装置、电子设备和存储介质制造方法及图纸

技术编号:37122082 阅读:17 留言:0更新日期:2023-04-01 05:17
本公开涉及一种函数定位方法、装置、电子设备和存储介质,包括:获取目标函数名,在目标二维数组中查找所述目标函数名所在的位置,获取对应的第二维索引值;根据所述第二维索引值,确定所述目标函数名所在位置的第一维索引值,将所述第一维索引值转换得到二进制文件的文件ID;根据所述文件ID,获取对应的二进制文件,对所述二进制文件进行解码,得到所述目标函数名所属的软件模块。本公开能够实现对函数的自动化定位,提高了函数定位的效率,且定位精度高。精度高。精度高。

【技术实现步骤摘要】
一种函数定位方法、装置、电子设备和存储介质


[0001]本公开涉及计算机
,尤其涉及一种函数定位方法、装置、电子设备和计算机可读存储介质。

技术介绍

[0002]相关技术中,研发人员在进行软件模块开发过程中,源码开发的编译链接阶段经常会出现未定义函数的错误,为了解决这个问题,通常需要先确定该函数是由哪个库实现的。一般的步骤是,搜索编译链接环境的include目录,确定该函数对应的头文件,最后确定函数对应的源文件,并获取源文件编译成的库。假设xxx_function函数由xxx.c实现并最终编译输出为xxx.so,接着使用readelf

d xxx.so,查看该命令输出的“Library soname”信息,比如输出了“libxxx.so”,再在Makefile的LDFLAGS增加

lxxx即可,这样编译的时候链接工具将会链接libxxx.so并查找得到xxx_function函数的符号链接成功。同样,对于程序运行时出现异常中断后,需要先使用gdb工具初步分析调用栈,根据调用栈中函数的符号线索,然后按照上述步骤定位函数属于哪个软件模块。
[0003]但是,上述定位函数所属汽车软件模块的过程是人工的,分步骤的,比较繁琐和消耗精力,尤其是在软件模块开发过程中,涉及的软件模块可能成百个,需要逐个软件模块进行遍历查找,导致函数定位的耗时长。
[0004]因此,亟需一种能够快速准确地进行函数定位,提高函数定位效率的方法。

技术实现思路

[0005]为克服相关技术中存在的问题,本公开提供一种函数定位方法、装置、电子设备和计算机可读存储介质。
[0006]根据本公开实施例的第一方面,提供一种函数定位方法,包括获取目标函数名,在目标二维数组中查找所述目标函数名所在的位置,获取对应的第二维索引值;根据所述第二维索引值,确定所述目标函数名所在位置的第一维索引值,将所述第一维索引值转换得到二进制文件的文件ID;根据所述文件ID,获取对应的二进制文件,对所述二进制文件进行解码,得到所述目标函数名所属的软件模块。
[0007]在一些实施例中,所述目标二维数组的生成,包括:获取软件模块,并根据所述软件模块生成二进制文件;对所述二进制文件进行解析,提取所述二进制文件符号表中的函数名;获取所述二进制文件的文件ID,根据所述文件ID和函数名,分别获取变长二维数组的第一维索引值和第二维索引值;根据所述第一维索引值和第二维索引值生成目标二维数组,并将所述函数名以字符串的形式存储于所述目标二维数组对应的位置。
[0008]在一些实施例中,所述根据所述文件ID和函数名,分别获取变长二维数组的第一维索引值和第二维索引值,包括:获取所述二进制文件的所述文件ID和所述函数名;采用枚举类型变量或宏定义的方式,对所述文件ID和所述函数名进行映射;将所述文件ID映射为枚举类型变量或宏定义的元素,获取所述文件ID元素,所述文件ID元素用于作为所述变长
二维数组的第一维索引值;将所述函数名映射为枚举类型变量或宏定义的元素,获取所述函数名元素,所述函数名元素用于作为所述变长二维数组的第二维索引值。
[0009]在一些实施例中,所述根据所述第一维索引值和第二维索引值生成目标二维数组,并将所述函数名以字符串的形式存储于所述目标二维数组对应的位置,包括:根据所述文件ID元素获取所述变长二维数组的第一维索引值;获取所述文件ID对应的函数名,根据所述函数名获取对应的函数名元素,得到所述变长二维数组的第二维索引值,所述文件ID对应若干个所述函数名;根据所述第一维索引值和所述第二维索引值,获取对应所述二进制文件的目标二维数组;将所述函数名以字符串的形式存储于所述目标二维数组对应的位置。
[0010]在一些实施例中,所述获取目标函数名,在目标二维数组中查找所述目标函数名所在的位置,获取对应的第二维索引值,包括:在编译链接过程中出现未定义函数或运行时出现异常中断时,获取对应的目标函数名;根据所述目标函数名在所述目标二维数组中进行遍历查找,直至在所述目标二维数组中查找到所述目标函数名;获取所述目标函数名的在所述目标二维数组中的目标位置,根据所述目标位置确定所述目标函数名对应的第二维索引值。
[0011]在一些实施例中,所述根据所述第二维索引值,确定所述目标函数名所在位置的第一维索引值,将所述第一维索引值转换得到二进制文件的文件ID,包括:根据所述第二维索引值和所述目标位置,确定所述目标函数名所在位置的第一维索引值;根据所述第一维索引值和对应的映射规则,转换得到二进制文件的文件ID。
[0012]在一些实施例中,所述根据所述文件ID,获取对应的二进制文件,对所述二进制文件进行解码,得到所述目标函数名所属的软件模块,包括:根据所述文件ID,在数据库中查找对应的二进制文件;对所述二进制文件进行解码,获取对应的解码文件;根据所述解码文件确定所述二进制文件对应的软件模块,得到所述目标函数名所属的软件模块。
[0013]根据本公开实施例的第二方面,提供一种函数定位装置,包括目标函数名查找模块,用于获取目标函数名,在目标二维数组中查找所述目标函数名所在的位置,获取对应的第二维索引值;文件ID转换模块,用于根据所述第二维索引值,确定所述目标函数名所在位置的第一维索引值,将所述第一维索引值转换得到二进制文件的文件ID;软件模块获取模块,用于根据所述文件ID,获取对应的二进制文件,对所述二进制文件进行解码,获取所述目标函数名所属的软件模块。
[0014]根据本公开实施例的第三方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现本公开第一方面所提供的函数定位方法。
[0015]根据本公开实施例的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,该程序指令被处理器执行时实现本公开第一方面所提供的函数定位方法的步骤。
[0016]本公开的实施例提供的技术方案可以包括以下有益效果:通过获取目标函数名,在目标二维数组中查找目标函数名所在的位置,得到目标函数名所在位置的第二维索引值,并根据第二维索引值确定目标函数名所在位置的第一维索引值,将第一维索引值转换得到二进制文件的文件ID,根据文件ID获取对应的二进制文件,解码得到目标函数名所属
的软件模块,从而实现函数的自动化定位,提升了函数定位的效率,且定位精度高。
[0017]应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
[0018]此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
[0019]图1是根据一示例性实施例示出的一种函数定位方法的流程图。
[0020]图2为一示例性实施例示出的目标二维数组的生成方法的流程图。
[0021]图3为一示例性实施例示出的索引值获取方本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种函数定位方法,其特征在于,包括:获取目标函数名,在目标二维数组中查找所述目标函数名所在的位置,获取对应的第二维索引值;根据所述第二维索引值,确定所述目标函数名所在位置的第一维索引值,将所述第一维索引值转换得到二进制文件的文件ID;根据所述文件ID,获取对应的二进制文件,对所述二进制文件进行解码,得到所述目标函数名所属的软件模块。2.根据权利要求1所述的函数定位方法,其特征在于,所述目标二维数组的生成,包括:获取软件模块,并根据所述软件模块生成二进制文件;对所述二进制文件进行解析,提取所述二进制文件符号表中的函数名;获取所述二进制文件的文件ID,根据所述文件ID和函数名,分别获取变长二维数组的第一维索引值和第二维索引值;根据所述第一维索引值和第二维索引值生成目标二维数组,并将所述函数名以字符串的形式存储于所述目标二维数组对应的位置。3.根据权利要求2所述的函数定位方法,其特征在于,所述根据所述文件ID和函数名,分别获取变长二维数组的第一维索引值和第二维索引值,包括:获取所述二进制文件的所述文件ID和所述函数名;采用枚举类型变量或宏定义的方式,对所述文件ID和所述函数名进行映射;将所述文件ID映射为枚举类型变量或宏定义的元素,获取所述文件ID元素,所述文件ID元素用于作为所述变长二维数组的第一维索引值;将所述函数名映射为枚举类型变量或宏定义的元素,获取所述函数名元素,所述函数名元素用于作为所述变长二维数组的第二维索引值。4.根据权利要求3所述的函数定位方法,其特征在于,所述根据所述第一维索引值和第二维索引值生成目标二维数组,并将所述函数名以字符串的形式存储于所述目标二维数组对应的位置,包括:根据所述文件ID元素获取所述变长二维数组的第一维索引值;获取所述文件ID对应的函数名,根据所述函数名获取对应的函数名元素,得到所述变长二维数组的第二维索引值,所述文件ID对应若干个所述函数名;根据所述第一维索引值和所述第二维索引值,获取对应所述二进制文件的目标二维数组;将所述函数名以字符串的形式存储于所述目标二维数组对应的位置。5.根据权利要求1所述的函数定位方法,其特征在于,所述获取目标函数名,在目标二维数组中查找所述...

【专利技术属性】
技术研发人员:熊磊陈永波
申请(专利权)人:国科础石重庆软件有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1