CN107168870B - 一种运行时程序信息获取方法 - Google Patents
一种运行时程序信息获取方法 Download PDFInfo
- Publication number
- CN107168870B CN107168870B CN201710293491.7A CN201710293491A CN107168870B CN 107168870 B CN107168870 B CN 107168870B CN 201710293491 A CN201710293491 A CN 201710293491A CN 107168870 B CN107168870 B CN 107168870B
- Authority
- CN
- China
- Prior art keywords
- program
- source program
- external
- external program
- source
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Prevention of errors by analysis, debugging or testing of software
- G06F11/3604—Analysis of software for verifying properties of programs
- G06F11/3612—Analysis of software for verifying properties of programs by runtime analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种运行时程序信息获取方法,包括如下步骤:步骤1、创建一外部程序,所述外部程序包括方法指针注册模块;步骤2、启动源程序,通过操作系统库调用所述外部程序的方法指针注册模块,将源程序的函数地址传给所述外部程序;步骤3、所述外部程序根据所述函数地址获取所述源程序的内部信息。本发明方法避免对源程序的过渡修改与侵入,保证源程序完整性,提高后续源程序的分析效率。
Description
技术领域
本发明涉及数据分析技术领域,尤其涉及一种高效的运行时程序内部函数指针、变量等获取方法。
背景技术
现有的软件开发中,经常需要对源程序进行分析与调优等操作,这些操作都需要对运行时程序内部信息进行追踪,例如,在源程序二次开发过程中,需要事先对源程序进行分析,会涉及到对源程序内部信息的获取与追踪,在软件单元测试中,也会涉及源程序信息获取。
目前源程序分析中获取内部信息的主流的做法是:(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外,根据需要还可以通过获取内部全局变量等,来跟踪监控源程序,便于后期分析。
本发明通过把源程序的接口暴露给外部程序,由外部程序调用源程序的方式,获得源程序内部信息,几乎不需要修改源程序,即可完成对内部信息的获取,极大的保护了源程序的完整性,提高了内部函数获取效率,从而提高源程序分析效率。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (1)
1.一种运行时程序信息获取方法,其特征在于:为Linux系统在轻量级线程分析中获取轻量级线程ID的如下过程:
创建一外部程序libinstrument.so,所述外部程序包括一个方法指针注册模块register_profile_func和一个保存方法指针的变量void(*callback)()=NULL;
启动源程序,在程序入口main函数通过libdl.so库的api调用所述外部程序的方法指针注册模块,把源程序内部方法指针暴露给所述外部程序,并存储到所述变量中;
所述外部程序得到内部的方法指针后,根据所述方法指针在任意时刻调用并获取内部的线程ID。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201710293491.7A CN107168870B (zh) | 2017-04-28 | 2017-04-28 | 一种运行时程序信息获取方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201710293491.7A CN107168870B (zh) | 2017-04-28 | 2017-04-28 | 一种运行时程序信息获取方法 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN107168870A CN107168870A (zh) | 2017-09-15 |
| CN107168870B true CN107168870B (zh) | 2021-10-29 |
Family
ID=59812410
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201710293491.7A Active CN107168870B (zh) | 2017-04-28 | 2017-04-28 | 一种运行时程序信息获取方法 |
Country Status (1)
| Country | Link |
|---|---|
| CN (1) | CN107168870B (zh) |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN108052394B (zh) * | 2017-12-27 | 2021-11-30 | 福建星瑞格软件有限公司 | 基于sql语句运行时间的资源分配的方法及计算机设备 |
Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1862511A (zh) * | 2006-02-28 | 2006-11-15 | 华为技术有限公司 | 一种软件单元的测试方法 |
| CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
| CN101853205A (zh) * | 2010-06-23 | 2010-10-06 | 山东中创软件商用中间件股份有限公司 | 一种监控程序运行的方法和装置 |
| CN103136047A (zh) * | 2011-11-30 | 2013-06-05 | 大唐联诚信息系统技术有限公司 | 一种多线程管理方法及架构 |
| CN103729288A (zh) * | 2013-11-01 | 2014-04-16 | 华中科技大学 | 一种嵌入式多核环境下应用程序的调试方法 |
| CN104516765A (zh) * | 2013-09-30 | 2015-04-15 | 瑞萨电子株式会社 | 计算机和编译方法 |
| CN106133684A (zh) * | 2014-03-27 | 2016-11-16 | 微软技术许可有限责任公司 | 支持静态编译程序中的动态行为 |
Family Cites Families (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8499287B2 (en) * | 2008-06-23 | 2013-07-30 | Microsoft Corporation | Analysis of thread synchronization events |
| CN101340314A (zh) * | 2008-08-11 | 2009-01-07 | 中兴通讯股份有限公司 | 一种嵌入式系统的实时调试定位方法及其装置 |
| US8255633B2 (en) * | 2009-11-13 | 2012-08-28 | International Business Machines Corporation | List based prefetch |
| CN102053808B (zh) * | 2010-11-30 | 2012-10-10 | Tcl集团股份有限公司 | 一种打印软件信息的方法、装置及带网口的设备 |
-
2017
- 2017-04-28 CN CN201710293491.7A patent/CN107168870B/zh active Active
Patent Citations (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN1873626A (zh) * | 2005-06-01 | 2006-12-06 | 中兴通讯股份有限公司 | 一种自动生成桩和驱动函数的单元测试系统及方法 |
| CN1862511A (zh) * | 2006-02-28 | 2006-11-15 | 华为技术有限公司 | 一种软件单元的测试方法 |
| CN101853205A (zh) * | 2010-06-23 | 2010-10-06 | 山东中创软件商用中间件股份有限公司 | 一种监控程序运行的方法和装置 |
| CN103136047A (zh) * | 2011-11-30 | 2013-06-05 | 大唐联诚信息系统技术有限公司 | 一种多线程管理方法及架构 |
| CN104516765A (zh) * | 2013-09-30 | 2015-04-15 | 瑞萨电子株式会社 | 计算机和编译方法 |
| CN103729288A (zh) * | 2013-11-01 | 2014-04-16 | 华中科技大学 | 一种嵌入式多核环境下应用程序的调试方法 |
| CN106133684A (zh) * | 2014-03-27 | 2016-11-16 | 微软技术许可有限责任公司 | 支持静态编译程序中的动态行为 |
Non-Patent Citations (7)
| Title |
|---|
| Fast and Precise Symbolic Analysis of Concurrency Bugs in Device Drivers (T);Pantazis Deligiannis等;《2015 30th IEEE/ACM International Conference on Automated Software Engineering (ASE)》;20160107;第166-177页 * |
| How to get thread id of a pthread in linux c program?;Ravi Chandra;《https://stackoverflow.com/questions/21091000/how-to-get-thread-id-of-a-pthread-in-linux-c-program》;20140113;第1-7页 * |
| Linux C获取线程ID;云颖;《https://my.oschina.net/u/140714/blog/147987》;20130729;第1页 * |
| 一种快速定位bug的记录-回放调试系统;江山等;《计算机应用与软件》;20161015;第33卷(第10期);第219-222页 * |
| 基于推测多线程技术的程序可视化方法与实现;赵永刚等;《西安邮电学院学报》;20100910;第15卷(第5期);第69-74页 * |
| 嵌入式aCoral多线程调试器的研究与实现;赵俊涛;《中国优秀硕士学位论文全文数据库 信息科技辑》;20160315;第I138-1187页 * |
| 获取指定程序的所有线程ID号;bamboo_lady;《https://www.cnblogs.com/liuliu-NoGirl/p/3341121.html》;20130926;第1-3页 * |
Also Published As
| Publication number | Publication date |
|---|---|
| CN107168870A (zh) | 2017-09-15 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN111090536B (zh) | 一种获取内存泄露信息的方法、装置、介质和电子设备 | |
| US8719791B1 (en) | Display of aggregated stack traces in a source code viewer | |
| US20150026664A1 (en) | Method and system for automated test case selection | |
| US9870309B2 (en) | Variable tracking in program debugging | |
| TWI684916B (zh) | 函式選取方法和伺服器 | |
| US9367427B2 (en) | Embedding and executing trace functions in code to gather trace data | |
| US9355003B2 (en) | Capturing trace information using annotated trace output | |
| US11113050B2 (en) | Application architecture generation | |
| CN104102574A (zh) | 应用程序测试方法及装置 | |
| CN112799940A (zh) | 回归测试方法、装置、计算机系统和计算机可读存储介质 | |
| CN111782519A (zh) | 测试方法、装置和电子设备 | |
| CN111177113A (zh) | 数据迁移方法、装置、计算机设备和存储介质 | |
| CN116627850B (zh) | 函数调试方法、装置、存储介质以及电子设备 | |
| CN115185570A (zh) | 基于jira系统的任务流处理方法、系统、设备、介质和计算机程序产品 | |
| EP3447635A1 (en) | Application architecture generation | |
| CN113688031B (zh) | 一种基于字节码增强技术的测试定位方法 | |
| US9691123B2 (en) | Instrumentation of graphics instructions | |
| CN113806229A (zh) | 接口变更的测试脚本复用方法、装置、设备、介质及产品 | |
| CN107122203B (zh) | 一种配置文件的设置方法及装置 | |
| CN107168870B (zh) | 一种运行时程序信息获取方法 | |
| CN110908882A (zh) | 一种应用程序的性能分析方法、装置、终端设备及介质 | |
| CN113467815B (zh) | 热更新的应用修复方法、装置、终端设备及存储介质 | |
| US9436587B2 (en) | Test context generation | |
| CN116432185B (zh) | 一种异常检测方法、装置、可读存储介质及电子设备 | |
| CN117389660A (zh) | 检测jar包同名类的方法和系统 |
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 | ||
| CB02 | Change of applicant information |
Address after: 350000 21 / F, building 5, f District, Fuzhou Software Park, 89 software Avenue, Gulou District, Fuzhou City, Fujian Province Applicant after: FUJIAN SINOREGAL SOFTWARE Co.,Ltd. Address before: Floor 20-21, building 5, area F, Fuzhou Software Park, 89 software Avenue, Gulou District, Fuzhou City, Fujian Province 350000 Applicant before: FUJIAN SINOREGAL SOFTWARE Co.,Ltd. |
|
| CB02 | Change of applicant information | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |