CN110471837A - 程序检测方法、装置及计算机可读存储介质 - Google Patents
程序检测方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110471837A CN110471837A CN201910604806.4A CN201910604806A CN110471837A CN 110471837 A CN110471837 A CN 110471837A CN 201910604806 A CN201910604806 A CN 201910604806A CN 110471837 A CN110471837 A CN 110471837A
- Authority
- CN
- China
- Prior art keywords
- program
- dynamic link
- function name
- link library
- target program
- 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
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000001514 detection method Methods 0.000 claims abstract description 36
- 238000012372 quality testing Methods 0.000 claims abstract description 36
- 230000006870 function Effects 0.000 claims description 181
- 238000012545 processing Methods 0.000 abstract description 7
- 238000012360 testing method Methods 0.000 description 14
- 230000003068 static effect Effects 0.000 description 8
- 230000007547 defect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008439 repair process Effects 0.000 description 2
- 230000006641 stabilisation Effects 0.000 description 2
- 238000011105 stabilization Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000012917 library technology Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
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/3604—Software analysis for verifying properties of programs
- G06F11/3616—Software analysis for verifying properties of programs using software metrics
-
- 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
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及数据处理技术领域,公开了一种程序检测方法,该方法包括:读取目标程序,目标程序为指定用户上传至代码库的Linux程序;对目标程序进行质量检测,若目标程序通过质量检测,获取目标程序调用的多个动态链接库;从多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;获取所述待检测动态链接库包含的符号表;获取符号表包含的多个函数名称;判断多个函数名称中是否存在重复的函数名称;若多个函数名称中存在重复的函数名称,发送目标程序存在链接库调用错误的风险提醒。本发明还提出一种程序检测装置以及一种计算机可读存储介质。本发明可以避免出现因程序调用动态链接库而产生的运行错误,有利于提高程序运行时的稳定性。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种程序检测方法、装置及计算机可读存储介质。
背景技术
在程序开发中,为了能够做到代码模块的重用,开发者会根据实际需要将功能函数做成库,例如动态链接库。动态链接库技术是将可重用代码保存在一个单独的库文件中,当编译器对调用了动态链接库的程序进行编译时,在可执行文件中保留一个函数调用的标记,当运行该程序时,由操作系统依据标记将调用的动态链接库文件加入到内存,并映射到程序的地址空间中,使程序能够正常调用到库文件中的函数。然而,目前在程序中调用动态链接库时,若不同的动态链接库中存在相同的函数名或者同一个动态链接库中存在相同的函数名,都可能导致程序运行出错,需要花费大量的时间进行问题排查,大大降低程序运行时的稳定性。
发明内容
本发明提供一种程序检测方法、装置及计算机可读存储介质,其主要目的在于避免出现因程序调用动态链接库而产生的运行错误,有利于提高程序运行时的稳定性。
为实现上述目的,本发明还提供一种程序检测方法,该方法包括:
读取目标程序,其中,所述目标程序为指定用户上传至代码库的Linux程序;
对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库;
从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;
获取所述待检测动态链接库包含的符号表;
获取所述符号表包含的多个函数名称;
判断所述多个函数名称中是否存在重复的函数名称;
若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。
可选地,所述判断所述多个函数名称中是否存在重复的函数名称包括:
统计所述多个函数名称中每个函数名称的出现次数;
当存在出现次数大于1的函数名称时,确定所述多个函数名称中存在重复的函数名称。
可选地,所述方法还包括:
若所述多个函数名称中存在重复的函数名称,将所述重复的函数名称进行重命名。
可选地,所述获取所述待检测动态链接库包含的符号表包括:
通过代码分析工具nm获取所述待检测动态链接库包含的符号表。
可选地,所述获取所述目标程序调用的多个动态链接库包括:
通过代码分析工具ldd获取所述目标程序调用的多个动态链接库。
此外,为实现上述目的,本发明还提供一种程序检测装置,该装置包括存储器和处理器,所述存储器中存储有可在所述处理器上运行的程序检测程序,所述程序检测程序被所述处理器执行时实现如下步骤:
读取目标程序,其中,所述目标程序为指定用户上传至代码库的Linux程序;
对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库;
从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;
获取所述待检测动态链接库包含的符号表;
获取所述符号表包含的多个函数名称;
判断所述多个函数名称中是否存在重复的函数名称;
若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。
可选地,所述程序检测程序可被所述处理器执行,还实现如下步骤:
统计所述多个函数名称中每个函数名称的出现次数;
当存在出现次数大于1的函数名称时,确定所述多个函数名称中存在重复的函数名称。
可选地,所述程序检测程序可被所述处理器执行,还实现如下步骤:
若所述多个函数名称中存在重复的函数名称,将所述重复的函数名称进行重命名。
可选地,所述程序检测程序可被所述处理器执行,还实现如下步骤:
通过代码分析工具nm获取所述待检测动态链接库包含的符号表。
可选地,所述程序检测程序可被所述处理器执行,还实现如下步骤:
通过代码分析工具ldd获取所述目标程序调用的多个动态链接库。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有程序检测程序,所述程序检测程序可被一个或者多个处理器执行,以实现如上所述的程序检测方法的步骤。
本发明提出的程序检测方法、装置及计算机可读存储介质,读取目标程序,其中,所述目标程序为指定用户上传至代码库的Linux程序;对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库;从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;获取所述待检测动态链接库包含的符号表;获取所述符号表包含的多个函数名称;判断所述多个函数名称中是否存在重复的函数名称;若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。通过检测程序所调用的动态连接库中的函数名称是否重复,当存在函数名称重复时进行风险提醒,所以在程序在调用动态链接库时,不会因存在相同的函数名称而出现调用错误,实现了避免出现因程序调用动态链接库而产生的运行错误的问题,有利于提高程序运行时的稳定性。
附图说明
图1为本发明一实施例提供的程序检测方法的流程示意图;
图2为本发明一实施例提供的程序检测装置的内部结构示意图;
图3为本发明一实施例提供的程序检测装置中程序检测程序的模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种程序检测方法。参照图1所示,为本发明一实施例提供的程序检测方法的流程示意图。该方法可以由一个电子装置执行。
在本实施例中,程序检测方法包括:
步骤S11,读取目标程序。
本实施例中,所述目标程序是需要通过本发明所述的程序检测方法进行检测的程序。
优选的,所述目标程序为指定用户上传至代码库的Linux程序。所述Linux是指运行于Linux系统下的程序。
一种可选实施例中,指定用户为预设的用户白名单中的用户。用户白名单中保存的用户为编写的程序出现过动态链接库调用错误的用户,或者,用户白名单中保存的用户为共同开发一个项目的多个用户。
步骤S12,对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库。
一种可选实施例中,对目标代码进行质量检测包括对代码进行静态测试、内存泄漏测试、代码覆盖率测试、静态测试之中的一项或多项,判断通过质量检测得到的代码缺陷的数量是否低于预设数量,若是,确定目标程序通过质量监测。
另一可选实施例中,对目标代码进行质量检测包括对代码进行静态测试、内存泄漏测试、代码覆盖率测试、静态测试之中的一项或多项,判断通过质量检测得到的代码缺陷是否包含预设代码缺陷(例如,冗余代码段),若否,确定目标程序通过质量监测。
在本实施例中,先对目标程序进行质量检测,当质量检测通过之后再获取目标程序调用的多个动态链接库,进而检测是否存在动态链接库调用错误的风险,可以避免因为程序错误而导致的检测结果不准确问题,提高检测的准确性。
动态链接库(Dynamic Link Library,DLL)是一个可以被其他多个程序同时共享的程序模块,动态链接库中包含了可以被共享的代码和数据资源。
在linux操作系统中,动态链接库的文件格式为“.so”。
本实施例中所获取到的目标程序调用的动态链接库为多个,如两个、三个、五个等。
本实施例中,目标程序调用的多个动态链接库可以是其他工程项目(即目标程序所属工程项目以外的工程项目)中创建的,目标程序调用的动态链接库也可以是所述目标程序所属工程项目创建的,目标程序调用的动态链接库还可以是其他常用动态链接库,如gdi32.dll。
在实施时,可以在编译运行目标程序之前,通过本发明所述的程序检测方法对目标程序进行检测。或者,也可以在目标程序编译运行报错之后,通过本发明所述的程序检测方法对目标程序进行检测,以及时发现程序运行报错是否与链接库调用错误有关。
进一步的,所述获取所述目标程序调用的多个动态链接库包括:
通过代码分析工具ldd获取所述目标程序调用的多个动态链接库。
Linux程序所调用的动态链接库为so文件,即格式为“.so”格式的文件。
所述ldd工具是进行代码分析的工具,具体的,ldd可以用来分析程序运行所依赖的动态链接库。
本实施例中,通过代码分析工具ldd可以快速的获取到目标程序所调用的多个动态链接库。
步骤S13,从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库。
一种可选实施例中,每次代码提交至版本库时,在数据库的表中保存代码中动态链接库的名称,还可以通过动态标识保存该动态链接库是否为新的动态链接库。则在获取到目标程序调用的多个动态链接库时,将动态链接库的名称与数据库的表中动态链接库的名称进行匹配,确定目标程序调用的多个动态链接库中与数据库的表中能够匹配的动态链接库不是新增的动态链接库,确定目标程序调用的多个动态链接库中与数据库的表中不匹配的动态链接库是新增的动态链接库。
通过本实施例,可以对每次新增的动态链接库进行检测,提高代码质量的同时提高对程序检测的效率。
步骤S14,获取所述待检测动态链接库包含的符号表。
由于每个动态链接库可对应一个符号表,因此,获取待检测动态链接库包含的符号表包括:当所述待检测动态链接库的数量为多个时,获取多个待检测动态链接库中每个动态链接库包含的符号表;当所述待检测动态链接库的数量为一个时,获取所述动态链接库所包含的符号表。
符号表是一种数据结构。动态链接库包含的符号表中记录了该动态链接库内所包含的函数的信息。优选的,获取的符号表为“.symtab”符号表。
进一步的,在本发明优选实施例中,所述获取所述待检测动态链接库包含的符号表包括:
通过代码分析工具nm获取所述待检测动态链接库包含的符号表。
所述nm工具是进行代码分析的工具,具体的,nm可以用来查看程序中所包含的符号表信息。
本实施例中,通过代码分析工具nm可以快速的获取到待检测动态链接库中所包含的符号表。
步骤S15,获取所述符号表包含的多个函数名称。
在本实施例中,当符号表的数量为一个时,获取该符号表中包含的多个函数名称,即获取该符号表中包含的多个函数的名称;当符号表的数量为多个时,获取多个符号表中每个符号表包含的多个函数名称,即获取每个函数表包含的多个函数的名称。
由于动态链接库包含的符号表中记录了该动态链接库内所包含的函数的信息。因此,从符号表中获取到的函数名称即为对应的动态链接库中所包含的函数的名称。
步骤S16,判断所述多个函数名称中是否存在重复的函数名称。
在本实施例中,可以将每个函数名称分别与其他函数名称进行匹配,以确定是否存在重复的函数名称。
进一步的,在本发明另一实施例中,所述判断所述多个函数名称中是否存在重复的函数名称包括:
统计所述多个函数名称中每个函数名称的出现次数;
当存在出现次数大于1的函数名称时,确定所述多个函数名称中存在重复的函数名称。
在本实施例中,通过对每个函数名称的出现次数进行判断,无需一一匹配函数名称,可以快速的确定存在重复的函数名称。
并且,当目标程序存在新增调用的动态链接库时,根据已进行过的函数名称的统计,就能够快速的判断新增调用动态链接库中是否存在重复的函数名称。
例如,根据上述步骤S11至步骤S15得到目标程序所调用的动态链接库中所包含的函数的名称为aa,bb,cc,dd,ee,ff,且每个函数的名称的数量为1,则若目标程序存在新增调用的动态链接库M时,若该动态链接库M中所包含的函数的名称为aa,hh,则根据已有的函数名称的数量统计,可以快速确定aa的函数名称为2,进而能够快速判断存在重复的函数名称。
步骤S17,若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。
当多个函数名称中存在重复的函数名称,则目标程序运行时,可能会出现调用错误,此时通过发送风险提醒可以使相关人员快速地发现可能存在的链接库调用错误问题,进而有利于及时解决问题,以提高程序运行的稳定性。
本实施例提出的程序检测方法,读取目标程序,其中,所述目标程序为指定用户上传至代码库的Linux程序;对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库;从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;获取所述待检测动态链接库包含的符号表;获取所述符号表包含的多个函数名称;判断所述多个函数名称中是否存在重复的函数名称;若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。通过检测程序所调用的动态连接库中的函数名称是否重复,当存在函数名称重复时进行风险提醒,所以在程序在调用动态链接库时,不会因存在相同的函数名称而出现调用错误,实现了避免出现因程序调用动态链接库而产生的运行错误的问题,有利于提高程序运行时的稳定性。
进一步地,在本发明另一实施例中,所述方法还包括:
若所述多个函数名称中存在重复的函数名称,将所述重复的函数名称进行重命名。
在本实施例中,当存在重复的函数名称时,将重复的函数名称进行重命名,无需用户手动修改,实现了快速修复可能寻在的程序问题的目的。
本发明还提供一种程序检测装置。参照图2所示,为本发明一实施例提供的程序检测装置的内部结构示意图。
在本实施例中,程序检测装置1可以是PC(Personal Computer,个人电脑),也可以是智能手机、平板电脑、便携计算机等终端设备。该程序检测装置1至少包括存储器11、处理器12,通信总线13,以及网络接口14。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是程序检测装置1的内部存储单元,例如该程序检测装置1的硬盘。存储器11在另一些实施例中也可以是程序检测装置1的外部存储设备,例如程序检测装置1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括程序检测装置1的内部存储单元也包括外部存储设备。存储器11不仅可以用于存储安装于程序检测装置1的应用软件及各类数据,例如程序检测程序01的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行程序检测程序01等。
通信总线13用于实现这些组件之间的连接通信。
网络接口14可选的可以包括标准的有线接口、无线接口(如WI-FI接口),通常用于在该装置1与其他电子设备之间建立通信连接。
可选地,该装置1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light-Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在程序检测装置1中处理的信息以及用于显示可视化的用户界面。
图2仅示出了具有组件11-14以及程序检测程序01的程序检测装置1,本领域技术人员可以理解的是,图2示出的结构并不构成对程序检测装置1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
在图2所示的装置1实施例中,存储器11中存储有程序检测程序01;处理器12执行存储器11中存储的程序检测程序01时实现如下步骤:
读取目标程序。
本实施例中,所述目标程序是需要通过本发明所述的程序检测方法进行检测的程序。
优选的,所述目标程序为指定用户上传至代码库的Linux程序。所述Linux是指运行于Linux系统下的程序。
一种可选实施例中,指定用户为预设的用户白名单中的用户。用户白名单中保存的用户为编写的程序出现过动态链接库调用错误的用户,或者,用户白名单中保存的用户为共同开发一个项目的多个用户。
对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库。
一种可选实施例中,对目标代码进行质量检测包括对代码进行静态测试、内存泄漏测试、代码覆盖率测试、静态测试之中的一项或多项,判断通过质量检测得到的代码缺陷的数量是否低于预设数量,若是,确定目标程序通过质量监测。
另一可选实施例中,对目标代码进行质量检测包括对代码进行静态测试、内存泄漏测试、代码覆盖率测试、静态测试之中的一项或多项,判断通过质量检测得到的代码缺陷是否包含预设代码缺陷(例如,冗余代码段),若否,确定目标程序通过质量监测。
在本实施例中,先对目标程序进行质量检测,当质量检测通过之后再获取目标程序调用的多个动态链接库,进而检测是否存在动态链接库调用错误的风险,可以避免因为程序错误而导致的检测结果不准确问题,提高检测的准确性。
动态链接库(Dynamic Link Library,DLL)是一个可以被其他多个程序同时共享的程序模块,动态链接库中包含了可以被共享的代码和数据资源。
在linux操作系统中,动态链接库的文件格式为“.so”。
本实施例中所获取到的目标程序调用的动态链接库为多个,如两个、三个、五个等。
本实施例中,目标程序调用的多个动态链接库可以是其他工程项目(即目标程序所属工程项目以外的工程项目)中创建的,目标程序调用的动态链接库也可以是所述目标程序所属工程项目创建的,目标程序调用的动态链接库还可以是其他常用动态链接库,如gdi32.dll。
在实施时,可以在编译运行目标程序之前,通过本发明所述的程序检测装置对目标程序进行检测。或者,也可以在目标程序编译运行报错之后,通过本发明所述的程序检测装置对目标程序进行检测,以及时发现程序运行报错是否与链接库调用错误有关。
进一步的,所述获取所述目标程序调用的多个动态链接库包括:
通过代码分析工具ldd获取所述目标程序调用的多个动态链接库。
所述Linux是指运行于Linux系统下的程序,Linux程序所调用的动态链接库为so文件,即格式为“.so”格式的文件。
所述ldd工具是进行代码分析的工具,具体的,ldd可以用来分析程序运行所依赖的动态链接库。
本实施例中,通过代码分析工具ldd可以快速的获取到目标程序所调用的多个动态链接库。
从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库。
一种可选实施例中,每次代码提交至版本库时,在数据库的表中保存代码中动态链接库的名称,还可以通过动态标识保存该动态链接库是否为新的动态链接库。则在获取到目标程序调用的多个动态链接库时,将动态链接库的名称与数据库的表中动态链接库的名称进行匹配,确定目标程序调用的多个动态链接库中与数据库的表中能够匹配的动态链接库不是新增的动态链接库,确定目标程序调用的多个动态链接库中与数据库的表中不匹配的动态链接库是新增的动态链接库。
通过本实施例,可以对每次新增的动态链接库进行检测,提高代码质量的同时提高对程序检测的效率。
获取所述待检测动态链接库包含的符号表。
由于每个动态链接库可对应一个符号表,因此,获取待检测动态链接库包含的符号表包括:当所述待检测动态链接库的数量为多个时,获取多个待检测动态链接库中每个动态链接库包含的符号表;当所述待检测动态链接库的数量为一个时,获取所述动态链接库所包含的符号表。
符号表是一种数据结构。动态链接库包含的符号表中记录了该动态链接库内所包含的函数的信息。优选的,获取的符号表为“.symtab”符号表。
进一步的,在本发明优选实施例中,所述获取所述待检测动态链接库包含的符号表包括:
通过代码分析工具nm获取所述待检测动态链接库包含的符号表。
所述nm工具是进行代码分析的工具,具体的,nm可以用来查看程序中所包含的符号表信息。
本实施例中,通过代码分析工具nm可以快速的获取到待检测动态链接库中所包含的符号表。
获取所述符号表包含的多个函数名称。
在本实施例中,当符号表的数量为一个时,获取该符号表中包含的多个函数名称,即获取该符号表中包含的多个函数的名称;当符号表的数量为多个时,获取多个符号表中每个符号表包含的多个函数名称,即获取每个函数表包含的多个函数的名称。
由于动态链接库包含的符号表中记录了该动态链接库内所包含的函数的信息。因此,从符号表中获取到的函数名称即为对应的动态链接库中所包含的函数的名称。
判断所述多个函数名称中是否存在重复的函数名称。
在本实施例中,可以将每个函数名称分别与其他函数名称进行匹配,以确定是否存在重复的函数名称。
进一步的,在本发明另一实施例中,所述判断所述多个函数名称中是否存在重复的函数名称包括:
统计所述多个函数名称中每个函数名称的出现次数;
当存在出现次数大于1的函数名称时,确定所述多个函数名称中存在重复的函数名称。
在本实施例中,通过对每个函数名称的出现次数进行判断,无需一一匹配函数名称,可以快速的确定存在重复的函数名称。
并且,当目标程序存在新增调用的动态链接库时,根据已进行过的函数名称的统计,就能够快速的判断新增调用动态链接库中是否存在重复的函数名称。
例如,根据目标程序所调用的动态链接库中所包含的函数的名称为aa,bb,cc,dd,ee,ff,且每个函数的名称的数量为1,则若目标程序存在新增调用的动态链接库M时,若该动态链接库M中所包含的函数的名称为aa,hh,则根据已有的函数名称的数量统计,可以快速确定aa的函数名称为2,进而能够快速判断存在重复的函数名称。
若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。
当多个函数名称中存在重复的函数名称,则目标程序运行时,可能会出现调用错误,此时通过发送风险提醒可以使相关人员快速地发现可能存在的链接库调用错误问题,进而有利于及时解决问题,以提高程序运行的稳定性。
本实施例提出的程序检测装置,读取目标程序,其中,所述目标程序为指定用户上传至代码库的Linux程序;对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库;从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;获取所述待检测动态链接库包含的符号表;获取所述符号表包含的多个函数名称;判断所述多个函数名称中是否存在重复的函数名称;若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。通过检测程序所调用的动态连接库中的函数名称是否重复,当存在函数名称重复时进行风险提醒,所以在程序在调用动态链接库时,不会因存在相同的函数名称而出现调用错误,实现了避免出现因程序调用动态链接库而产生的运行错误的问题,有利于提高程序运行时的稳定性。
进一步地,在本发明另一实施例中,处理器12执行存储器11中存储的程序检测程序01时还实现如下步骤:
若所述多个函数名称中存在重复的函数名称,将所述重复的函数名称进行重命名。
在本实施例中,当存在重复的函数名称时,将重复的函数名称进行重命名,无需用户手动修改,实现了快速修复可能寻在的程序问题的目的。
可选地,在其他实施例中,程序检测程序还可以被分割为一个或者多个模块,一个或者多个模块被存储于存储器11中,并由一个或多个处理器(本实施例为处理器12)所执行以完成本发明,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段,用于描述程序检测程序在程序检测装置中的执行过程。
例如,参照图3所示,为本发明程序检测装置一实施例中的程序检测程序的程序模块示意图,该实施例中,程序检测程序可以被分割为读取模块10、检测模块20、第一获取模块30、第二获取模块40、第三获取模块50、判断模块60和提醒模块70,示例性地:
读取模块10用于:读取目标程序;
检测模块20用于:对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库;
第一获取模块30用于:从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;
第二获取模块40用于:获取所述待检测动态链接库包含的符号表;
第三获取模块50用于:获取所述符号表包含的多个函数名称;
判断模块60用于:判断所述多个函数名称中是否存在重复的函数名称;
提醒模块70用于:若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。
上述读取模块10、检测模块20、第一获取模块30、第二获取模块40、第三获取模块50、判断模块60和提醒模块70等程序模块被执行时所实现的功能或操作步骤与上述实施例大体相同,在此不再赘述。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有程序检测程序,所述程序检测程序可被一个或多个处理器执行,以实现如下操作:
读取目标程序,其中,所述目标程序为指定用户上传至代码库的Linux程序;
对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库;
从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;
获取所述待检测动态链接库包含的符号表;
获取所述符号表包含的多个函数名称;
判断所述多个函数名称中是否存在重复的函数名称;
若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。
本发明计算机可读存储介质具体实施方式与上述程序检测装置和方法各实施例基本相同,在此不作累述。
需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种程序检测方法,其特征在于,所述方法包括:
读取目标程序,其中,所述目标程序为指定用户上传至代码库的Linux程序;
对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库;
从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;
获取所述待检测动态链接库包含的符号表;
获取所述符号表包含的多个函数名称;
判断所述多个函数名称中是否存在重复的函数名称;
若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。
2.如权利要求1所述的程序检测方法,其特征在于,所述判断所述多个函数名称中是否存在重复的函数名称包括:
统计所述多个函数名称中每个函数名称的出现次数;
当存在出现次数大于1的函数名称时,确定所述多个函数名称中存在重复的函数名称。
3.如权利要求1所述的程序检测方法,其特征在于,所述方法还包括:
若所述多个函数名称中存在重复的函数名称,将所述重复的函数名称进行重命名。
4.如权利要求1至3中任一项所述的程序检测方法,其特征在于,所述获取所述待检测动态链接库包含的符号表包括:
通过代码分析工具nm获取所述待检测动态链接库包含的符号表。
5.如权利要求1至3中任一项所述的程序检测方法,其特征在于,所述获取所述目标程序调用的多个动态链接库包括:
通过代码分析工具ldd获取所述目标程序调用的多个动态链接库。
6.一种程序检测装置,其特征在于,所述装置包括存储器和处理器,所述存储器上存储有可在所述处理器上运行的程序检测程序,所述程序检测程序被所述处理器执行时实现如下步骤:
读取目标程序,其中,所述目标程序为指定用户上传至代码库的Linux程序;
对所述目标程序进行质量检测,若所述目标程序通过质量检测,获取所述目标程序调用的多个动态链接库;
从所述多个动态链接库中获取新增的动态链接库,得到待检测动态链接库;
获取所述待检测动态链接库包含的符号表;
获取所述符号表包含的多个函数名称;
判断所述多个函数名称中是否存在重复的函数名称;
若所述多个函数名称中存在重复的函数名称,发送所述目标程序存在链接库调用错误的风险提醒。
7.如权利要求6所述的程序检测装置,其特征在于,所述程序检测程序可被所述处理器执行,还实现如下步骤:
统计所述多个函数名称中每个函数名称的出现次数;
当存在出现次数大于1的函数名称时,确定所述多个函数名称中存在重复的函数名称。
8.如权利要求6所述的程序检测装置,其特征在于,所述程序检测程序可被所述处理器执行,还实现如下步骤:
若所述多个函数名称中存在重复的函数名称,将所述重复的函数名称进行重命名。
9.如权利要求6至8中任一项所述的程序检测装置,其特征在于,所述程序检测程序可被所述处理器执行,还实现如下步骤:
通过代码分析工具nm获取所述待检测动态链接库包含的符号表。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有程序检测程序,所述程序检测程序可被一个或者多个处理器执行,以实现如权利要求1至5中任一项所述的程序检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910604806.4A CN110471837A (zh) | 2019-07-05 | 2019-07-05 | 程序检测方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910604806.4A CN110471837A (zh) | 2019-07-05 | 2019-07-05 | 程序检测方法、装置及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110471837A true CN110471837A (zh) | 2019-11-19 |
Family
ID=68506848
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910604806.4A Pending CN110471837A (zh) | 2019-07-05 | 2019-07-05 | 程序检测方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110471837A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111045936A (zh) * | 2019-11-29 | 2020-04-21 | 北京浪潮数据技术有限公司 | 软件测试数据组织方法、系统、装置及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6665735B1 (en) * | 1997-10-06 | 2003-12-16 | Kabushiki Kaisha Toshiba | Method of changing a dynamic link library function efficiently and a computer system for executing the same |
CN104536812A (zh) * | 2014-12-30 | 2015-04-22 | 北京无线电计量测试研究所 | 一种基于LabVIEW的动态链接库的调用方法 |
CN107992749A (zh) * | 2017-12-11 | 2018-05-04 | 北京奇虎科技有限公司 | 一种检测补丁包冲突的方法及装置 |
CN109614106A (zh) * | 2018-12-21 | 2019-04-12 | 北京龙创悦动网络科技有限公司 | 一种c++程序编译方法和装置 |
-
2019
- 2019-07-05 CN CN201910604806.4A patent/CN110471837A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6665735B1 (en) * | 1997-10-06 | 2003-12-16 | Kabushiki Kaisha Toshiba | Method of changing a dynamic link library function efficiently and a computer system for executing the same |
CN104536812A (zh) * | 2014-12-30 | 2015-04-22 | 北京无线电计量测试研究所 | 一种基于LabVIEW的动态链接库的调用方法 |
CN107992749A (zh) * | 2017-12-11 | 2018-05-04 | 北京奇虎科技有限公司 | 一种检测补丁包冲突的方法及装置 |
CN109614106A (zh) * | 2018-12-21 | 2019-04-12 | 北京龙创悦动网络科技有限公司 | 一种c++程序编译方法和装置 |
Non-Patent Citations (1)
Title |
---|
镇关西: "Linux动态链接库同名符号装载问题(二)", pages 1, Retrieved from the Internet <URL:https://blog.csdn.net/littlefang/article/details/37929213> * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111045936A (zh) * | 2019-11-29 | 2020-04-21 | 北京浪潮数据技术有限公司 | 软件测试数据组织方法、系统、装置及可读存储介质 |
CN111045936B (zh) * | 2019-11-29 | 2022-03-22 | 北京浪潮数据技术有限公司 | 软件测试数据组织方法、系统、装置及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8875110B2 (en) | Code inspection executing system for performing a code inspection of ABAP source codes | |
CN105630463B (zh) | 用于检测jar包冲突的方法及装置 | |
US9268672B1 (en) | Automated test case generation for applications | |
CN108519945A (zh) | 覆盖率测试方法、装置及存储设备 | |
CN110990020A (zh) | 一种软件编译方法、装置及电子设备和存储介质 | |
US20140157239A1 (en) | System and method for peer-based code quality analysis reporting | |
CN110413506A (zh) | 测试用例推荐方法、装置、设备及存储介质 | |
CN103257919B (zh) | 脚本程序检查方法和装置 | |
CN111459495B (zh) | 单元测试代码文件生成方法、电子装置及存储介质 | |
CN110377321A (zh) | 应用程序升级的方法、装置、终端及存储介质 | |
CN102855178A (zh) | 一种单元测试中生成Mock库的方法和装置 | |
CN103186461A (zh) | 一种现场数据的保存方法和恢复方法以及相关装置 | |
CN112799937B (zh) | 基于GitHub自动化检测Maven项目中依赖冲突问题的方法 | |
CN108845839A (zh) | 应用页面加载方法、装置及计算机可读存储介质 | |
CN112559337A (zh) | 代码覆盖率测试方法、装置、电子设备及存储介质 | |
CN108959067A (zh) | 搜索引擎的测试方法、装置及计算机可读存储介质 | |
CN111008017B (zh) | 一种基于oclint的待提交文件预审方法及相关组件 | |
CN112860556A (zh) | 覆盖率统计方法、装置、计算机系统和可读存储介质 | |
CN103064780B (zh) | 一种软件测试的方法及装置 | |
CN103365772B (zh) | 软件测试自动评价装置以及方法 | |
Faiz et al. | Flutter Framework Code Portability Measurement on Multiplatform Applications with ISO 9126 | |
CN110471837A (zh) | 程序检测方法、装置及计算机可读存储介质 | |
CN113434542A (zh) | 数据关系识别方法、装置、电子设备及存储介质 | |
CN112579475A (zh) | 代码测试方法、装置、设备及可读存储介质 | |
CN104536897B (zh) | 基于关键字的自动测试方法及系统 |
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 |