一种运行时程序信息获取方法与流程

文档序号:11250788阅读:239来源:国知局

本发明涉及数据分析技术领域,尤其涉及一种高效的运行时程序内部函数指针、变量等获取方法。



背景技术:

现有的软件开发中,经常需要对源程序进行分析与调优等操作,这些操作都需要对运行时程序内部信息进行追踪,例如,在源程序二次开发过程中,需要事先对源程序进行分析,会涉及到对源程序内部信息的获取与追踪,在软件单元测试中,也会涉及源程序信息获取。

目前源程序分析中获取内部信息的主流的做法是:(1)在源程序中加入很多的打印语句去打印出局部变量或全局变量;(2)利用gdb等其他第三方工具去运行源程序,从而单步运行观察局部变量和全局变量,在大项目中,工作量极大。

对于软件单元测试,也因不容易获取内部函数信息,常通过预先设定输入参数,并给出期待值,然后对方法的返回值和期待值做对比,这种方式需要搭建测试环境、准备输入输出比较麻烦,效率不高。

因此,急需一种高效率的,又能尽可能减少对源程序的修改与侵入的运行时程序内部数据获取方法,提高源程序分析效率。



技术实现要素:

本发明要解决的技术问题,在于提供一种运行时程序信息获取方法,避免对源程序的过渡修改与侵入,保证源程序完整性,提高后续源程序的分析效率。

本发明是这样实现的:一种运行时程序信息获取方法,包括如下步骤:

步骤1、创建一外部程序,所述外部程序包括方法指针注册模块;

步骤2、启动源程序,通过操作系统库调用所述外部程序的方法指针注册模块,将源程序的函数地址传给所述外部程序;

步骤3、所述外部程序根据所述函数地址获取所述源程序的内部信息。

进一步的,所述操作系统库为windows的dll库或linux的libdl.so库。

进一步的,所述内部信息包括线程id和全局变量。

本发明具有如下优点:通过把源程序的接口暴露给外部程序,由外部程序去调用主程序获取内部变量,从而进一步获取源程序的内部信息,无需对源程序进行大量修改操作,保证了源程序的完整性,极大的降低了因源程序的修改与侵入对分析结果造成的影响,大大提高源程序分析效率。

附图说明

下面参照附图结合实施例对本发明作进一步的说明。

图1为本发明一种运行时程序信息获取方法流程图。

具体实施方式

如图1所示,本发明一种运行时程序信息获取方法,包括如下步骤:

步骤1、创建一外部程序,所述外部程序包括方法指针注册模块,所述外部程序还包括一用于存储内部信息的存储模块;

步骤2、启动源程序,通过操作系统库调用所述外部程序的方法指针注册模块,将源程序的函数地址传给所述外部程序,所述操作系统库为windows的dll库或linux的libdl.so库;

步骤3、所述外部程序根据所述函数地址获取所述源程序的内部信息,所述内部信息包括线程id和全局变量。

实施例一

在轻量级线程分析中,以linux系统为例,采用本发明方法获取轻量级线程id的方法如下:

创建一外部程序(libinstrument.so),包括一个方法指针注册模块和一个保存方法指针的变量(void(*callback)()=null);

启动源程序,在程序入口(main函数)通过dl库(libdl.so库的api)调用所述外部程序的方法指针注册模块(register_profile_func),把源程序内部方法指针暴露给所述外部程序,并存储到所述变量中;

所述外部程序得到内部的方法指针后,根据所述方法指针可任意时刻调用并获取内部的线程id。

本实施例采用把源程序的接口暴露给外部程序,由外部程序调用源程序获取内部的轻量级线程id,几乎不需要修改源程序,即可完成对轻量级线程信息的获取,为后期源程序分析提供重要依据。

实施例二

在软件单元测试中,采用本发明方法获取源程序函数指针,进而调用主程序函数执行测试,以windows系统下的软件单元测试为例,具体包括如下步骤:

在dll库中编写测试代码和外部程序,所述外部程序包括用于获取函数地址的方法指针注册模块;

在源程序内,获取dll库操作权,通过dll库调用所述外部程序的方法指针注册模块,将所述源程序的内部函数地址暴露给所述外部程序;

根据所述函数地址在dll库中调用所述源程序函数执行测试。

上述测试方法,较通过采集输入输出参数方式的测试快很多,大大提高测试效率,同时提高了测试质量。

本发明中,除了可以获取源程序的线程id外,根据需要还可以通过获取内部全局变量等,来跟踪监控源程序,便于后期分析。

本发明通过把源程序的接口暴露给外部程序,由外部程序调用源程序的方式,获得源程序内部信息,几乎不需要修改源程序,即可完成对内部信息的获取,极大的保护了源程序的完整性,提高了内部函数获取效率,从而提高源程序分析效率。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。



技术特征:

技术总结
本发明提供一种运行时程序信息获取方法,包括如下步骤:步骤1、创建一外部程序,所述外部程序包括方法指针注册模块;步骤2、启动源程序,通过操作系统库调用所述外部程序的方法指针注册模块,将源程序的函数地址传给所述外部程序;步骤3、所述外部程序根据所述函数地址获取所述源程序的内部信息。本发明方法避免对源程序的过渡修改与侵入,保证源程序完整性,提高后续源程序的分析效率。

技术研发人员:林禹;林畅辉
受保护的技术使用者:福建星瑞格软件有限公司
技术研发日:2017.04.28
技术公布日:2017.09.15
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1