追踪可执行程序中的目标变量的方法和系统技术方案

技术编号:30893258 阅读:15 留言:0更新日期:2021-11-22 23:34
提供一种追踪可执行程序中的目标变量的方法和系统。该方法包括:读取描述信息,描述信息标识目标变量所属区域的基地址的获取来源及目标变量在所属区域的地址偏移;使用可执行程序的进程标识,从描述信息所标识的获取来源,获取目标变量所属区域的基地址;根据基地址和地址偏移,确定目标变量的实际地址;以及从实际地址读取目标变量。该方法通过目标变量的地址偏移确定目标变量在可执行程序的进程空间内的实际地址,并追踪该地址上的数据变化,无需用户添加调试语句,也无需源代码支持,并可追踪可执行程序中的任意目标变量。并可追踪可执行程序中的任意目标变量。并可追踪可执行程序中的任意目标变量。

【技术实现步骤摘要】
追踪可执行程序中的目标变量的方法和系统


[0001]本公开涉及操作系统流域,具体而言,涉及一种追踪可执行程序中的目标变量的方法和系统。

技术介绍

[0002]传统处理器追踪模块(Processor trace)实现对程序流,内存读写,总线事件的数据收集。在linux等较为复杂的操作系统中,往往定义一些具有复杂结构的任务结构体,然后将一些动态生成的缓冲区、锁、状态机、配置等数据放到这种结构体中。可利用传统处理器/总线追踪模块在程序执行时追踪这种结构体。
[0003]但是利用处理器追踪模块会收集到大量数据(数十MB~GB),由于数据量过于庞大,因此分析软件处理数据的性能开销较大,而且,为了在接收到的数据中所需数据,用户需要对代码有全面和深刻的了解,例如如果发现进程锁状态错误或调度错误,希望查看进程运行时各个锁的变化,则需要对代码中所有的锁定义和锁访问代码有全面和深刻的了解,并在锁访问代码前后插入调试语句。但是这种侵入式的代码插入对用户要求太高而且并不方便。
[0004]因此,有必要提供一种更简便的在程序执行时追踪目标变量的技术方案。

技术实现思路

[0005]有鉴于此,本公开的目的是提供一种追踪可执行程序中的目标变量的方法和系统,以更方便用户在可执行程序执行时追踪目标变量的变化情况。
[0006]第一方面,本公开实施例提供一种追踪可执行程序中的目标变量的方法,包括:
[0007]读取描述信息,所述描述信息标识所述目标变量所属区域的基地址的获取来源及所述目标变量在所属区域的地址偏移;
[0008]使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;
[0009]根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;以及
[0010]从所述实际地址读取所述目标变量。
[0011]可选地,所述读取所述目标变量包括:读取所述目标变量的数据以及收集造成所述数据的变化的指令流信息。
[0012]可选地,所述获取来源指定从进程寄存器还是从指定内存获取所述目标变量所属区域的基地址。
[0013]可选地,所述描述信息还指定是否存在下一级地址以及是否下一级地址进行跟踪,则所述读取所述目标变量包括:
[0014]当存在下一级地址且指定对下一级地址进行跟踪时,从所述实际地址读取下一级地址,并从所述下一级地址读取所述目标变量。
[0015]可选地,所述基地址为所述可执行程序的进程空间的基地址或为所述可执行程序
的进程空间内特定区域的基地址。
[0016]可选地,还包括:加载并解析所述可执行程序,以构建所述描述信息。
[0017]可选地,还包括:根据用户指令确定所述目标变量。
[0018]可选地,所述加载并解析所述可执行程序,以获得目标变量的描述信息包括:
[0019]确定所述目标变量归属的函数路径;
[0020]确定所述目标变量归属的数据类型定义;
[0021]根据所述函数路径和数据类型定义构建所述描述信息。
[0022]可选地,如果所述目标变量归属的数据类型定义为多级数据结构,则根据所述多级数据结构计算到达所述目标变量经过的每个级的地址偏移并累加到达所述目标变量经过的每个级的地址偏移以得到所述目标变量在所属区域的地址偏移。
[0023]可选地,所述目标变量的数据类型包括:数值型、字符型、数据结构、类、指向数据结构或类的指针。
[0024]第二方面,本公开实施例提供一种追踪可执行程序中的目标变量的系统,包括:软件部分的分析模块和硬件执行的处理器追踪模块,所述分析模块包括:
[0025]加载并解析所述可执行程序,以获得所述目标变量的描述信息;
[0026]将所述描述信息存储到所述处理器追踪模块的指定寄存器中,所述描述信息标识所述目标变量所属区域的基地址的获取来源及所述目标变量在所属区域的地址偏移,所述目标变量所属区域位于所述可执行程序的进程空间之中;
[0027]所述处理器追踪模块包括:
[0028]读取指定寄存器内的描述信息;
[0029]使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;
[0030]根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;以及
[0031]从所述实际地址读取所述目标变量。
[0032]可选地,所述获取来源指定从进程寄存器还是从指定内存获取所述目标变量所属区域的基地址。
[0033]第三方面,本公开实施例提供一种计算设备,包括:
[0034]处理单元,用于执行可执行程序,并将所述可执行程序中的目标变量的描述信息存储在所述处理器追踪模块的指定寄存器中,所述描述信息描述了所述目标变量所属区域的基地址的获取来源以及所述目标变量在所属区域的地址偏移,所述目标变量所属区域位于所述可执行程序的进程空间之中;
[0035]处理器追踪模块,用于读取指定寄存器内的描述信息;使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;以及从所述实际地址读取所述目标变量。
[0036]综上,本公开实施例提供的方法和系统,通过目标变量的地址偏移确定目标变量在可执行程序的进程空间内的实际地址,并追踪该地址上的数据变化,无需用户添加调试语句,也无需源代码支持,并可追踪可执行程序中的任意目标变量。
附图说明
[0037]通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
[0038]图1是本公开实施例提供的系统的结构示意图;
[0039]图2所示为一个访问路径信息实现的简单样例;
[0040]图3是本公开实施例提供的方法的流程图。
[0041]图4是本公开一实施例所应用的通用计算机系统的结构示意图;
[0042]图5是本公开一实施例所应用的嵌入式系统的结构示意图。
具体实施方式
[0043]以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
[0044]在介绍本公开的各个实施例之前,先对本公开所使用的一些术语或者概念进行解释和澄清。
[0045]数据追踪(trace):处理器上将数据通过引脚输出给编码器,编码器对数据进行编码添加包头并按照一定格式进行压缩,压缩后通过内存或外部接口输出给上位机或分析软件,分析软件按照运行程序和追踪包进行数据重构就能,还原出程序运行的完整过程,包含程序流变化,数据访问等等;
[0046]锁:在多线程操作时会通过本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种追踪可执行程序中的目标变量的方法,包括:读取描述信息,所述描述信息标识所述目标变量所属区域的基地址的获取来源及所述目标变量在所属区域的地址偏移;使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;以及从所述实际地址读取所述目标变量。2.根据权利要求1所述的方法,其中,所述读取所述目标变量包括:读取所述目标变量的数据以及收集造成所述数据的变化的指令流信息。3.根据权利要求1所述的方法,其中,所述获取来源指定从进程寄存器还是从指定内存获取所述目标变量所属区域的基地址。4.根据权利要求1所示的方法,其中,所述描述信息还指定是否存在下一级地址以及是否下一级地址进行跟踪,所述读取所述目标变量还包括:当存在下一级地址且指定对下一级地址进行跟踪时,从所述实际地址读取下一级地址,并从所述下一级地址读取所述目标变量。5.根据权利要求1所述的方法,其中,所述基地址为所述可执行程序的进程空间的基地址或为所述可执行程序的进程空间内特定区域的基地址。6.根据权利要求1所述的方法,还包括:加载并解析所述可执行程序,以构建所述描述信息。7.根据权利要求1所述的方法,还包括:根据用户指令确定所述目标变量。8.根据权利要求6所述的方法,其中,所述加载并解析所述可执行程序,以获得目标变量的描述信息包括:确定所述目标变量归属的函数路径;确定所述目标变量归属的数据类型定义;根据所述函数路径和数据类型定义构建所述描述信息。9.根据权利要求8所述的方法,其中,如果所述目标变量归属的数据类型定义为多级数据结构,则根据所述多级数据结构计算到达所述目标变量经过的每个级的地址偏移并累加到达所述...

【专利技术属性】
技术研发人员:毛晗
申请(专利权)人:平头哥杭州半导体有限公司
类型:发明
国别省市:

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

1