基于linux共享内存数据镜像的程序跟踪方法和系统技术方案

技术编号:23604514 阅读:38 留言:0更新日期:2020-03-28 05:39
本发明专利技术公开了一种基于linux共享内存数据镜像的程序跟踪方法和系统,所述方法包括:被跟踪程序在系统中创建一份程序的原本内部变量空间后,通过linux的shmget、shmat系统函数创建共享内存空间,所述共享内存空间作为所述原本内部变量空间的一个副本;被跟踪程序在运行中对变量的数据内容进行修改时,同步修改所述共享内存空间中的变量副本的数据内容;调试工具通过shmget、shmat系统函数找到并连接所述共享内存空间,并在收到调试跟踪指令时读取所述共享内存空间中的变量副本的数据内容,本发明专利技术调试过程不会影响程序内部的变量数值和原程序的运行结果,调试非常灵活,可以实现对被跟踪程序的变量实时查看和跟踪。

Program tracking method and system based on Linux shared memory data image

【技术实现步骤摘要】
基于linux共享内存数据镜像的程序跟踪方法和系统
本专利技术涉及数据调试领域,尤其涉及一种基于linux共享内存数据镜像的程序跟踪方法和系统。
技术介绍
目前大部分的linux程序常规调试有gdb、加printf输出日志等方法打印一些开发人员或者维护人员需要关注的固定信息,这些方法确实非常实用和高效,是linux平台下程序员常用的调试方法,但是这些方法在应用程序会增加额外的开销,所以在正式版本中,可能会关闭调试代码。
技术实现思路
本专利技术要解决的技术问题在于,提供一种新的调试方法,可以便于用户实时查看程序运行时的内部变量数据的当前值和状态变化情况,而且调试过程不会影响程序内部的变量数值和原程序的运行结果。本专利技术解决其技术问题所采用的技术方案是:构造一种基于linux共享内存数据镜像的程序跟踪方法,所述方法包括:被跟踪程序在系统中创建一份程序的原本内部变量空间后,通过linux的shmget、shmat系统函数创建共享内存空间,所述共享内存空间作为所述原本内部变量空间的一个副本;被跟踪程序在运行中对变量的数据内容进行修改时,同步修改所述共享内存空间中的变量副本的数据内容;调试工具通过shmget、shmat系统函数找到并连接所述共享内存空间,并在收到调试跟踪指令时读取所述共享内存空间中的变量副本的数据内容。优选地,所述的通过linux的shmget、shmat系统函数创建共享内存空间,包括:定义用于指向所述共享内存空间的数据指针;通过shmget系统函数创建一份同原本内部变量空间的副本作为所述共享内存空间;通过shmat系统函数将所述共享内存空间映射到所述数据指针上。优选地,所述的同步修改所述共享内存空间中的变量副本的数据内容,包括:在被跟踪程序在运行中对某个变量的数据内容进行修改后,通过所述数据指针找到所述某个变量的变量副本,并将所述某个变量的数据内容赋值给所述变量副本。优选地,所述的调试工具通过shmget、shmat系统函数找到并连接所述共享内存空间,包括:调试工具定义用于指向所述共享内存空间的数据指针;通过shmget系统函数得到被跟踪程序所创建的所述共享内存空间;通过shmat系统函数将所述共享内存空间映射到所述数据指针上,并以只读方式连接到所述共享内存空间映上。本专利技术另一方面还公开了一种基于linux共享内存数据镜像的程序跟踪系统,包括运行于系统上的被跟踪程序和调试工具,所述被跟踪程序包括:共享内存空间创建模块,用于在系统中创建一份程序的原本内部变量空间后,通过linux的shmget、shmat系统函数创建共享内存空间,所述共享内存空间作为所述原本内部变量空间的一个副本;变量同步模块,用于在被跟踪程序在运行中对变量的数据内容进行修改时,同步修改所述共享内存空间中的变量副本的数据内容;所述调试工具包括:共享内存空间连接模块,用于通过shmget、shmat系统函数找到并连接所述共享内存空间;变量跟踪模块,用于在收到调试跟踪指令时读取所述共享内存空间中的变量副本的数据内容。优选地,所述共享内存空间创建模块具体用于定义用于指向所述共享内存空间的数据指针,通过shmget系统函数创建一份同原本内部变量空间的副本作为所述共享内存空间,通过shmat系统函数将所述共享内存空间映射到所述数据指针上。优选地,所述变量同步模块具体用于在被跟踪程序在运行中对某个变量的数据内容进行修改后,通过所述数据指针找到所述某个变量的变量副本,并将所述某个变量的数据内容赋值给所述变量副本。优选地,所述共享内存空间连接模块具体用于定义用于指向所述共享内存空间的数据指针,通过shmget系统函数得到被跟踪程序所创建的所述共享内存空间,通过shmat系统函数将所述共享内存空间映射到所述数据指针上,并以只读方式连接到所述共享内存空间映上。本专利技术的基于linux共享内存数据镜像的程序跟踪方法和系统,具有以下有益效果:本专利技术的方法可以实时查看被跟踪程序运行时的内部变量数据的当前值和状态变化情况,而且调试过程不会影响程序内部的变量数值和原程序的运行结果,不用对被跟踪程序进行大的改动,调试非常灵活,程序员随时都可以通过调试工具对其数据进行查看,而不像一般调试那样需要断点或指定的程序位置或指定时间才打印指定的数据值到日志,可以实现对被跟踪程序的变量实时查看和跟踪。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图:图1是本专利技术基于linux共享内存数据镜像的程序跟踪方法的流程图;图2是本专利技术基于linux共享内存数据镜像的程序跟踪方法的原理图。具体实施方式为了便于理解本专利技术,下面将参照相关附图对本专利技术进行更全面的描述。附图中给出了本专利技术的典型实施例。但是,本专利技术可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本专利技术的公开内容更加透彻全面。应当理解本专利技术实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本专利技术实施例以及实施例中的技术特征可以相互组合。除非另有定义,本文所使用的所有的技术和科学术语与属于本专利技术的
的技术人员通常理解的含义相同。本文中在本专利技术的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本专利技术。实施例一参考图1、2,本专利技术实施例一提供一种基于linux共享内存数据镜像的程序跟踪方法,所述方法包括:S101、被跟踪程序在系统中创建一份程序的原本内部变量空间后,通过linux的shmget、shmat系统函数创建共享内存空间,所述共享内存空间作为所述原本内部变量空间的一个副本;S102、被跟踪程序在运行中对变量的数据内容进行修改时,同步修改所述共享内存空间中的变量副本的数据内容;S103、调试工具通过shmget、shmat系统函数找到并连接所述共享内存空间,并在收到调试跟踪指令时读取所述共享内存空间中的变量副本的数据内容。其中,步骤S101中所述的通过linux的shmget、shmat系统函数创建共享内存空间,包括:定义用于指向所述共享内存空间的数据指针;通过shmget系统函数创建一份同原本内部变量空间的副本作为所述共享内存空间;通过shmat系统函数将所述共享内存空间映射到所述数据指针上。比如,为便于说明,下面以单个变量结构说明,假设之前变量结构体是CanLongFrame,数据指针定义为CanLongFrame*debug_can_long_frame=0,则可以通过debug_shm=shmget((key_t)123,s本文档来自技高网
...

【技术保护点】
1.一种基于linux共享内存数据镜像的程序跟踪方法,其特征在于,所述方法包括:/n被跟踪程序在系统中创建一份程序的原本内部变量空间后,通过linux的shmget、shmat系统函数创建共享内存空间,所述共享内存空间作为所述原本内部变量空间的一个副本;/n被跟踪程序在运行中对变量的数据内容进行修改时,同步修改所述共享内存空间中的变量副本的数据内容;/n调试工具通过shmget、shmat系统函数找到并连接所述共享内存空间,并在收到调试跟踪指令时读取所述共享内存空间中的变量副本的数据内容。/n

【技术特征摘要】
1.一种基于linux共享内存数据镜像的程序跟踪方法,其特征在于,所述方法包括:
被跟踪程序在系统中创建一份程序的原本内部变量空间后,通过linux的shmget、shmat系统函数创建共享内存空间,所述共享内存空间作为所述原本内部变量空间的一个副本;
被跟踪程序在运行中对变量的数据内容进行修改时,同步修改所述共享内存空间中的变量副本的数据内容;
调试工具通过shmget、shmat系统函数找到并连接所述共享内存空间,并在收到调试跟踪指令时读取所述共享内存空间中的变量副本的数据内容。


2.根据权利要求1所述的方法,其特征在于,所述的通过linux的shmget、shmat系统函数创建共享内存空间,包括:
定义用于指向所述共享内存空间的数据指针;
通过shmget系统函数创建一份同原本内部变量空间的副本作为所述共享内存空间;
通过shmat系统函数将所述共享内存空间映射到所述数据指针上。


3.根据权利要求2所述的方法,其特征在于,所述的同步修改所述共享内存空间中的变量副本的数据内容,包括:
在被跟踪程序在运行中对某个变量的数据内容进行修改后,通过所述数据指针找到所述某个变量的变量副本,并将所述某个变量的数据内容赋值给所述变量副本。


4.根据权利要求1所述的方法,其特征在于,所述的调试工具通过shmget、shmat系统函数找到并连接所述共享内存空间,包括:
调试工具定义用于指向所述共享内存空间的数据指针;
通过shmget系统函数得到被跟踪程序所创建的所述共享内存空间;
通过shmat系统函数将所述共享内存空间映射到所述数据指针上,并以只读方式连接...

【专利技术属性】
技术研发人员:郑吉祥
申请(专利权)人:深圳市盛弘电气股份有限公司
类型:发明
国别省市:广东;44

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

1