CN113672499A - 追踪可执行程序中的目标变量的方法和系统 - Google Patents

追踪可执行程序中的目标变量的方法和系统 Download PDF

Info

Publication number
CN113672499A
CN113672499A CN202110817103.7A CN202110817103A CN113672499A CN 113672499 A CN113672499 A CN 113672499A CN 202110817103 A CN202110817103 A CN 202110817103A CN 113672499 A CN113672499 A CN 113672499A
Authority
CN
China
Prior art keywords
target variable
address
executable program
description information
region
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
Application number
CN202110817103.7A
Other languages
English (en)
Inventor
毛晗
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou C Sky Microsystems Co Ltd
Original Assignee
Pingtouge Hangzhou Semiconductor Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Pingtouge Hangzhou Semiconductor Co ltd filed Critical Pingtouge Hangzhou Semiconductor Co ltd
Priority to CN202110817103.7A priority Critical patent/CN113672499A/zh
Publication of CN113672499A publication Critical patent/CN113672499A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler

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)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

追踪可执行程序中的目标变量的方法和系统
技术领域
本公开涉及操作系统流域,具体而言,涉及一种追踪可执行程序中的目标变量的方法和系统。
背景技术
传统处理器追踪模块(Processor trace)实现对程序流,内存读写,总线事件的数据收集。在linux等较为复杂的操作系统中,往往定义一些具有复杂结构的任务结构体,然后将一些动态生成的缓冲区、锁、状态机、配置等数据放到这种结构体中。可利用传统处理器/总线追踪模块在程序执行时追踪这种结构体。
但是利用处理器追踪模块会收集到大量数据(数十MB~GB),由于数据量过于庞大,因此分析软件处理数据的性能开销较大,而且,为了在接收到的数据中所需数据,用户需要对代码有全面和深刻的了解,例如如果发现进程锁状态错误或调度错误,希望查看进程运行时各个锁的变化,则需要对代码中所有的锁定义和锁访问代码有全面和深刻的了解,并在锁访问代码前后插入调试语句。但是这种侵入式的代码插入对用户要求太高而且并不方便。
因此,有必要提供一种更简便的在程序执行时追踪目标变量的技术方案。
发明内容
有鉴于此,本公开的目的是提供一种追踪可执行程序中的目标变量的方法和系统,以更方便用户在可执行程序执行时追踪目标变量的变化情况。
第一方面,本公开实施例提供一种追踪可执行程序中的目标变量的方法,包括:
读取描述信息,所述描述信息标识所述目标变量所属区域的基地址的获取来源及所述目标变量在所属区域的地址偏移;
使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;
根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;以及
从所述实际地址读取所述目标变量。
可选地,所述读取所述目标变量包括:读取所述目标变量的数据以及收集造成所述数据的变化的指令流信息。
可选地,所述获取来源指定从进程寄存器还是从指定内存获取所述目标变量所属区域的基地址。
可选地,所述描述信息还指定是否存在下一级地址以及是否下一级地址进行跟踪,则所述读取所述目标变量包括:
当存在下一级地址且指定对下一级地址进行跟踪时,从所述实际地址读取下一级地址,并从所述下一级地址读取所述目标变量。
可选地,所述基地址为所述可执行程序的进程空间的基地址或为所述可执行程序的进程空间内特定区域的基地址。
可选地,还包括:加载并解析所述可执行程序,以构建所述描述信息。
可选地,还包括:根据用户指令确定所述目标变量。
可选地,所述加载并解析所述可执行程序,以获得目标变量的描述信息包括:
确定所述目标变量归属的函数路径;
确定所述目标变量归属的数据类型定义;
根据所述函数路径和数据类型定义构建所述描述信息。
可选地,如果所述目标变量归属的数据类型定义为多级数据结构,则根据所述多级数据结构计算到达所述目标变量经过的每个级的地址偏移并累加到达所述目标变量经过的每个级的地址偏移以得到所述目标变量在所属区域的地址偏移。
可选地,所述目标变量的数据类型包括:数值型、字符型、数据结构、类、指向数据结构或类的指针。
第二方面,本公开实施例提供一种追踪可执行程序中的目标变量的系统,包括:软件部分的分析模块和硬件执行的处理器追踪模块,所述分析模块包括:
加载并解析所述可执行程序,以获得所述目标变量的描述信息;
将所述描述信息存储到所述处理器追踪模块的指定寄存器中,所述描述信息标识所述目标变量所属区域的基地址的获取来源及所述目标变量在所属区域的地址偏移,所述目标变量所属区域位于所述可执行程序的进程空间之中;
所述处理器追踪模块包括:
读取指定寄存器内的描述信息;
使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;
根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;以及
从所述实际地址读取所述目标变量。
可选地,所述获取来源指定从进程寄存器还是从指定内存获取所述目标变量所属区域的基地址。
第三方面,本公开实施例提供一种计算设备,包括:
处理单元,用于执行可执行程序,并将所述可执行程序中的目标变量的描述信息存储在所述处理器追踪模块的指定寄存器中,所述描述信息描述了所述目标变量所属区域的基地址的获取来源以及所述目标变量在所属区域的地址偏移,所述目标变量所属区域位于所述可执行程序的进程空间之中;
处理器追踪模块,用于读取指定寄存器内的描述信息;使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;以及从所述实际地址读取所述目标变量。
综上,本公开实施例提供的方法和系统,通过目标变量的地址偏移确定目标变量在可执行程序的进程空间内的实际地址,并追踪该地址上的数据变化,无需用户添加调试语句,也无需源代码支持,并可追踪可执行程序中的任意目标变量。
附图说明
通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是本公开实施例提供的系统的结构示意图;
图2所示为一个访问路径信息实现的简单样例;
图3是本公开实施例提供的方法的流程图。
图4是本公开一实施例所应用的通用计算机系统的结构示意图;
图5是本公开一实施例所应用的嵌入式系统的结构示意图。
具体实施方式
以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
在介绍本公开的各个实施例之前,先对本公开所使用的一些术语或者概念进行解释和澄清。
数据追踪(trace):处理器上将数据通过引脚输出给编码器,编码器对数据进行编码添加包头并按照一定格式进行压缩,压缩后通过内存或外部接口输出给上位机或分析软件,分析软件按照运行程序和追踪包进行数据重构就能,还原出程序运行的完整过程,包含程序流变化,数据访问等等;
锁:在多线程操作时会通过锁机制来保证内部资源访问时都为互斥,没有两个线程同时访问操作同一个变量。每个线程在对资源操作前都尝试先加锁,成功加锁才能操作,操作结束解锁。避免同时修改的逻辑错误。
指令流水线,指令流水线是为提高处理器执行指令的效率,把一条指令的操作分成多个细小的步骤,每个步骤由专门的电路完成的方式。目前主流的指令流水线的技术有三级、四级、五级、七级和超级指令流水线,等等。例如教课书示例的五级指令流水线包括取指、译码、执行、访存和写回。
指针寄存器:不同指令集使用不同寄存器存储进程相关的地址信息,因此具体本公开时,需根据指令集选择相应的寄存器。例如RISC-V中,使用fp作为栈顶寄存器,sp用于获取堆栈中的数据。
用于实施本发明的系统
图1是用于实施本发明的系统100的结构示意图。如图1所示,系统100包括硬件部分101。硬件部分101包括基于总线102将各种元件与处理单元106耦接到一起。根据软硬件结构要求,总线102可以为各种类型总线。例如为AXI总线、OCP(Open Core Protocol)总线协议或者采用特定领域自主开发的专用总线。而且总线结构还可以包括或者不包括例如AHB/APB桥这样的桥接单元。AXI总线是ARM公司提出的AMBA(Advanced MicrocontrollerBus Architecture)3.0及以上协议中最重要的部分,它是面向于高性能、高带宽、低延迟的片内总线。
高速内存103和输入输出接口104通过总线102与处理单元106耦接。高速内存103例如为随机存取存储器和/或只读存储器,例如高速内存103为静态随机存取存储器(SRAM)或为DRAM(动态随机存取存储器)。接口104用于在系统101与外部设备111之间进行数据转换和传输。外部设备111可以是一些输入输出设备或者存储设备。硬件部分101还可以包括用于直接访问外部存储设备的DMA控制器。
系统100还包括软件部分。如图上所示,软件部分示出了操作系统内核121和应用程序A-N。当系统运行时,操作系统内核121和应用程序A-N可通过接口104被拷贝到高速内存104中,以便于处理单元106从高速内存104中读取并执行程序指令。操作系统内核121还可以在产品出厂之前,就被硬拷贝到高速缓存103(例如只读存储器)中。
处理单元106还与处理器跟踪模块105耦接。处理器跟踪模块105是对处理器架构的扩展,它使用专用的硬件设施跟踪软件执行的信息。处理器跟踪模块105收集程序运行过程中的各种信息并按照一定格式组织成数据包输出。由于这种方式对正在跟踪的可执行程序仅有很小的性能损失,因此可利用该方式对动态生成的目标结构体进行跟踪,具体是:先由处理器跟踪模块105输出追踪数据包,然后由分析软件对数据包进行数据重构,还原出可执行程序运行的完整过程,包含程序流变化,数据访问等等,并进行数据预处理,包括信息过滤、将程序流和数据访问关联,然后预处理后的数据中获取目标结构体的跟踪信息,但是正如背景技术所指,这种方式导致分析软件需要较大的性能开销,并且需要用户对代码有全面和深刻的了解。
为了解决这一问题,本公开提供一种在可执行程序执行时追踪目标变量的技术方案,以实现对任意目标变量(包括而不限于背景技术中所述的动态生成的结构体)进行跟踪,并且无需用户对代码有全面和深刻的了解。
参考图上所示,分析程序131用于加载并解析一个可执行程序,以获得目标变量的描述信息。目标变量可以是处理器支持的任意数据类型,既可以为单一类型,例如为整型、浮点型、字符、或字符串型、指向整型、浮点型、字符、或字符串数据的指针,也可以为复合类型,例如数组、数据结构,指向数据结构的指针、类等,其中数据结构还可以是多级数据结构,例如在linux等较为复杂的操作系统中,会定义一些具有复杂结构的任务结构体,然后将一些动态生成的缓冲区、锁、状态机、配置等数据放到这种结构体中,目标变量还可以是数据结构中的某一项,例如上述任务结构体中的锁。目标变量的描述信息用于描述目标变量在一个基地址基础上的地址偏移,该基地址通常是处理器为可执行程序提供的进程空间的基地址,该基地址还可以是处理器为可执行程序提供的进程空间包含的特定区域(目标变量位于其中)的基地址。目标变量的描述信息还应该包括该基地址的获取来源,例如可从指定寄存器或某个内存地址去读取该基地址。在满足上述条件的基础上,可采用任意适宜格式组织目标变量的描述信息。
为了获得目标变量的地址偏移,需要考虑目标变量所归属的函数(或类或类方法中)和所归属的数据结构,例如对于C/C++程序,在主函数main里有个子函数func,在子函数func定义struct file*file_fp,则当希望追踪file_fp时,得到的file_fp的描述信息要考虑到函数关系(main->func)和struct file的数据结构定义。
分析程序131将描述信息和进程标识经由驱动程序1211发送给处理器追踪模块105中的控制单元1051。驱动程序1211是处理器追踪模块105的驱动程序,操作系统内核121作为沟通硬件和软件的桥梁,不仅包括处理器追踪模块105的驱动程序,还包括诸如处理单元106、内存103、存储器等其他硬件的驱动程序,还向各种应用(例如应用程序A-N)提供基础系统服务。另外,由于操作系统内核121会为每个进程维护一个进程寄存器,因此也可以由操作系统内核121将要追踪的进程标识提供给处理器追踪模块105中的控制单元1051。
控制单元1051接收描述信息和进程标识,根据进程标识和描述信息获取目标变量在进程空间中的实际地址,并根据实际地址访问得到目标变量的数据变化并可获得造成数据变化的指令流信息。处理器追踪模块105包括:指令流追踪单元1053和数据追踪单元1054,指令流追踪单元1053记录程序执行中的分支信息,从而帮助构建程序运行过程中的控制流图。数据追踪单元1054记录是记录各个内存访问地址的数据变化。
可选地,如图上所示,控制单元1051内设置触发寄存器1052,所述触发寄存器1052用于存储目标变量的描述信息,所述控制单元根据进程标识和描述信息获取目标变量在进程空间中的实际地址,当检测到实际地址指示的数据变化时,则触发指令流追踪单元1053和数据追踪单元1054,而且记录导致数据变化的所有操作并生成数据包输出给分析程序131。
分析程序131接收到数据包之后,还原出针对目标变量的所有操作信息,并可进一步地定位出导致目标变量的数据变化的操作记录,当然如果数据包只有导致目标变量的数据变化的操作记录,则可以直接得到该操作记录。
本公开实施例提供的系统,解析可执行程序以构建目标变量的描述信息并传送给处理器追踪模块,通过处理器追踪模块收集目标变量的数据变化以及造成目标变量的数据变化的指令流信息,并作为追踪信息输出,由此得到的追踪信息只是关于目标变量的,因此这样得到的追踪信息更具针对性,更能满足用户需求,而且由于本系统无需可执行程序的源代码支持,因此可用于测试和验证仅有可执行程序的软件产品的代码质量。
在一些实施例中,处理器跟踪模块105可配置为关闭或启动。可选地,在处理器跟踪模块105或处理单元106内部设置一个寄存器,在该寄存器存储一个比特的标志位,当标志位例如为0时,表示关闭处理器跟踪模块105,系统也就不产生跟踪信息,当标志位例如为1时,表示处理器跟踪模块105正常工作,该标志位还可和一个存储进程标识的寄存器关联,分析程序131可将要追踪的进程标识存储到该寄存器中,以便于处理器跟踪模块105只输出特定进程的追踪信息。
上文说过目标变量可以是处理器支持的任意数据类型,下面具体示例性地介绍几种类型和如何定义描述信息。我们知道,当可执行程序执行后,系统会为可执行为其分配一个进程空间,通常该进程空间根据功能不同划分为不同区域,例如C/C++编译的可执行程序占用的空间划分区域为:栈区(stack)、堆区(heap)、全局区(静态区)、文字常量区、程序代码区。除了堆区,其余区由编译器在编译阶段实现分配。
下面是一个非常简单的C/C++的源代码,不同类型的数据都注释了其属于的区。
Figure BDA0003170546080000061
Figure BDA0003170546080000071
因此可通过解析可执行文件获得对象在除了堆区之外的各个区的地址偏移量,例如char*p1,*p2都存储在栈上,而如果编译器将int、char、char*的数据类型都使用一个字节存储,则可以计算出b的地址偏移量为0个字节,s的地址偏移量为4个字节,p1的地址偏移量为8个字节。
也就是说,分析模块能够通过解析可执行程序得到每个目标变量的地址偏移。当处理器跟踪模块105接收到进程标识和目标变量的地址偏移时,根据进程标识获可执行程序的进程空间或者可执行程序的进程空间中特定区域(例如堆栈区)的首地址,再根据地址偏移计算出目标变量的实际地址,并读取该实际地址的数据以及收集造成数据变化的指令流信息,例如,处理器追踪模块105在追踪p1指向的字符串空间的数据变化时,需要从实际地址内获取字符串空间的地址,并获得该地址内的数据变化情况以及收集造成数据变化的指令流信息。
在实际工程中,源代码不会向上述示例这么简单,目标变量也更加复杂。在一个实施例中,在处理器追踪模块105中设置触发寄存器(PC trigger寄存器),用于存储目标变量的描述信息。可以由分析模块131根据每个目标变量的地址偏移向触发寄存器按照规定的格式写入该目标变量的描述信息,也可以由控制单元1051根据每个目标变量的地址偏移向触发寄存器按照规定的格式写入该目标变量的描述信息。
在实际工程中,触发寄存器的数据格式有很多设计。图2所示为其中一种。在图2中,规定了R、A、C和L四个标志位以及OFF指定的地址偏移量。四种标志可采用一个比特(bit)存储,其值可置为1或0,OFF可采用32比特或64比特存储。其中R置为1时表示从指定进程寄存器中获取基地址,A置为1时表示基于指定内存获取基地址。由于编译器在将源代码编译为可执行程序时,可指定将可执行程序在运行时其进程空间或者进程空间包含的特定区域的基地址存放在进程寄存器中,或者存放在指定内存中,因此,如果编译器指定可执行程序在运行时其进程空间或者进程空间包含的特定区域的基地址存放在进程寄存器中,则将R置为1,如果编译器指定可执行程序在运行时其进程空间或者进程空间包含的特定区域的基地址存放在指定内存中,将A置为1。C表示是否只对该级目标进行跟踪(0表示是,1表示否)。L表示是否有下一级链接地址的存在(0表示否,1表示是)。
图2中给出了四个示例。第一个示例为:R=1,OFF=+1024(相当于R=1,A=0,C=0,OFF=+1024),则处理器追踪模块105首先通过进程寄存器(TP)获取进程空间或者进程空间包含的特定区域的基地址,之后(+1024)获取要追踪的目标变量。
第二个示例为:A=1,OFF=+64(相当于R=0,A=1,C=0,L=0,OFF=+64),则处理器追踪模块105首先通过指定内存地址获取进程空间或者进程空间包含的特定区域的基地址,之后(+64)获取要追踪的目标变量。
第三个示例为:A=1,OFF=+32(相当于R=0,A=1,C=0,L=0,OFF=+32),则处理器追踪模块105首先通过指定内存地址获取进程空间或者进程空间包含的特定区域的基地址,之后(+32)获取要追踪的目标变量。
第四个示例为:A=1,C=1,L=1,OFF=+64(相当于R=0,A=1,C=1,L=1,OFF=+64),则处理器追踪模块105首先通过指定内存地址获取进程空间或者进程空间包含的特定区域的基地址,之后(+32)获取要追踪的目标变量,由于C表示不仅对该级目标而且要对该级目标的下一级目标进行跟踪,而L表示有下一级链接地址的存在,因此将基于基地址+32获取当前一级的目标变量,然后在追踪目标时,不仅追踪当前一级的目标变量,而且从当前一级的目标变量取出数据作为要追踪的下一级的目标变量。
下面继续结合图2所示的触发寄存器的数据格式的设计与下述C/C++源代码进行示例说明。
struct process{
int pid;
struct task*child;
int cpu;
};
struct task{
int tid;
struct task*next;
struct spin_lock*rq_lock;
};
struct spin_lock{
int lock;
};
int main{
struct*process*a;//变量a
a=(struct*process)malloc(sizeof(struct process));//申请空间
a->child=(struct*task)malloc(sizeof(struct task));//申请空间
}
假设在上述C/C++的源代码对应的可执行程序运行时,要追踪的目标变量为rq_lock。
那么需要向触发寄存器内写入的数据如下所示:A=1,C=1,L=1,OFF=offset1。其中offset1的计算步骤如下所示:首先需要根据数据结构struct process计算structtask*child在struct process的第一偏移量,然后根据数据结构struct task计算rq_lock在struct task中的第二偏移量,将第一偏移量和第二偏移量相加得到offset1。如此,当根据该示例追踪目标变量时,其步骤如下所示:处理器追踪模块105首先通过进程寄存器(TP)获取进程空间或特定区域的基地址,之后通过offset1获取rq_lock,然后追踪rq_lock以及rq_lock下一级的目标变量。
图3是本公开实施例提供的方法的流程图。该流程图包括步骤S301-S304。其中步骤S301-S302可由包括操作系统的软件程序执行。步骤S303-S304则由硬件的处理器追踪模块执行。
步骤S301是解析可执行程序,以获得目标变量的描述信息,所述描述信息描述了所述目标变量所属区域的基地址的获取来源以及所述目标变量在所属区域的地址偏移。
步骤S302是在可执行程序执行时,发送可执行程序的进程标识和描述信息。
步骤S303是读取描述信息,根据其中的读取方式和可执行程序的进程标识获取目标变量所属区域的基地址。
步骤S304是根据目标变量所属区域的基地址和地址偏移计算实际地址,并根据实际地址从进程空间中读取目标变量的数据变化并收集造成数据变化的指令流信息。
在本实施例中,目标变量由用户指示确定,例如用户指示一种数据类型,则目标变量为归属于该数据类型的所有变量,或者用户可以指定一个函数,再例如用户输入正则表达(例如fp*,表示所有以字符fp开头的变量)。
在本实施例中,软件程序在加载和解析可执行程序时,通过查找函数、查找数据结构、查找变量路径等一系列的操作,分别获得目标变量所在的函数,目标变量所在的数据结构,目标变量在所在数据结构中的地址偏移,并基于这些信息构建目标变量的描述信息并将构建好的描述信息存储到硬件的处理器追踪模块的触发寄存器中。其中,由于编译器在编译时会基于配置将进程空间或者进程空间的特定区域的基地址放在进程寄存器或指定的内存地址,因此描述信息中需要指定从进程寄存器还是从指定的内存地址获取进程空间或者进程空间的特定区域的基地址。
在本实施例中,硬件的处理器追踪模块在发现触发寄存器中有新数据后,根据新数据中的相应标志和进程标识从相应的进程寄存器或者从指定的内存地址获取进程空间或者进程空间的相应区域的基地址,然后将基地址加上地址偏移得到要访问的地址,然后监测该地址指示的数据变化,并收集导致数据变化的指令流信息。
在实际工程中,描述信息可采用多种格式表征。在本公开实施例中,提出一个例如图2所示的设定格式,在该设定格式中,包括四种标志R、A、C和L以及一个偏移量OFF,所述四种标志R、A、C和L中的每个标志都可采用一个比特(bit)存储,其值可置为1或0,OFF可采用32比特或64比特存储。其中R置为1时表示从进程寄存器中获取基地址,A置为1时表示基于指定的内存地址获取基地址。由于编译器在将源代码编译为可执行程序时,可指定可执行程序在运行时其进程空间(或者进程空间包含的不同区域)的基地址存放在进程寄存器中,也可以指定存放在指定内存地址,因此,如果编译器指定可执行程序在运行时其进程空间(或者进程空间包含的特定区域)的基地址存放在进程寄存器中,则将R置为1,如果编译器指定可执行程序在运行时其进程空间(或者进程空间包含的不同区域)的基地址存放在指定的内存地址中,将A置为1。C表示是否只对该级目标进行跟踪(0表示是,1表示否)。L表示是否有下一级链接地址的存在(0表示否,1表示是)。
在一些实施例中,目标变量的数据类型包括:数值型、字符型、数据结构、类、指向数据结构或类的指针。
在一些实施例中,所述解析可执行程序包括以下操作:确定目标变量所在的函数路径;确定目标变量相关的数据类型定义;根据函数路径和数据类型定义构建所述描述信息。如果目标变量的数据类型为多级数据结构,则根据多级数据结构的定义确定到达目标变量的路径信息,并在描述信息中体现多级数据结构的各个级的地址偏移。
由于本公开提供的在可执行程序执行时追踪目标变量的方法和系统是对应的,因此在文中以相对简单的方式介绍方法的各个实施例。
本公开实施例提供的处理器的具体应用
图4示出了本公开实施例所应用的通用的计算机体系结构。如图上所示,计算机系统400可以包括一个或多个处理器12,以及存储器14。其中,上述实施例提供的处理器101作为处理器12。
计算机系统400中的存储器14可以主存储器(简称为主存或内存)。用于存储由数据信号表示的指令信息和/或数据信息,例如存放处理器12提供的数据(例如为运算结果),也可以用于实现处理器12与外部存储设备16(或称为辅助存储器或外部存储器)之间的数据交换。
在一些情形下,处理器12可能需要访问存储器14,以获取存储器14中的数据或对存储器14中的数据进行修改。由于存储器14的访问速度较慢,为了缓解处理器12与存储器14之间的速度差距,计算机系统400还包括与总线11耦合的高速缓冲存储器18,高速缓冲存储器18用于对存储器14中的一些可能会被反复调用的程序数据或者报文数据等数据进行缓存。高速缓冲存储器18例如由静态随机存储器(Static Random Access Memory,简称为SRAM)等类型的存储装置实现。高速缓冲存储器18可以为多级结构,例如具有一级缓存(L1Cache)、二级缓存(L2 Cache)和三级缓存(L3 Cache)的三级缓存结构,也可以是三级以上的缓存结构或其他类型缓存结构。在一些实施例中,高速缓冲存储器18的一部分(例如一级缓存,或一级缓存和二级缓存)可以集成在处理器12内部或与处理器12集成于同一片上系统中。
基于此,处理器12可以包括指令执行单元121、内存管理单元122等部分。指令执行单元121在执行一些需要修改内存的指令时发起写访问请求,该写访问请求指定了需要写入内存中的写入数据和相应的物理地址;内存管理单元122用于将这些指令指定的虚拟地址转译为该虚拟地址映射的物理地址,写访问请求指定的物理地址与相应指令指定的物理地址可以一致。
存储器14和高速缓冲存储器18之间的信息交互通常按块来组织。在一些实施例中,高速缓冲存储器18和存储器14可以按照相同的空间尺寸被划分成数据块,数据块可以作为高速缓冲存储器18和存储器14之间的数据交换的最小单位(包括预设长度的一个或多个数据)。为了表述简洁清晰,下面将高速缓冲存储器18中的各个数据块简称为缓存块(可以称为cacheline或高速缓存线),且不同的缓存块具有不同的缓存块地址;将存储器14中的各个数据块简称为内存块,且不同的内存块具有不同的内存块地址。缓存块地址例如包括用于定位数据块的物理地址标签。
由于受到空间和资源的限制,高速缓冲存储器18无法对存储器14中的全部内容都进行缓存,即高速缓冲存储器18的存储容量通常小于存储器14,高速缓冲存储器18提供的各个缓存块地址无法对应存储器14提供的全部内存块地址。处理器12在需要访问内存时,首先经总线11访问高速缓冲存储器18,以判断所要访问的内容是否已被存储于高速缓冲存储器18中,如果是,则高速缓冲存储器18命中,此时处理器12直接从高速缓冲存储器18中调用所要访问的内容;如果处理器12需要访问的内容不在高速缓冲存储器18中,则高速缓冲存储器18,处理器12需要经总线11访问存储器14,以在存储器14中查找相应的信息。因为高速缓冲存储器18的存取速率非常快,因此当高速缓冲存储器18命中时,处理器12的效率可以显著提高,进而也使整个计算机系统400的性能和效率得以提升。
此外,计算机系统400还可以包括存储设备16、显示设备13、音频设备19、鼠标/键盘15等输入/输出设备。存储设备16例如是通过相应接口与总线11耦合的硬盘、光盘以及闪存等用于信息存取的设备。显示设备13例如经相应的显卡与总线11耦合,用于根据总线11提供的显示信号进行显示。
计算机系统400通常还包括通信设备17,因此可以通过各种方式与网络或其他设备通信。通信设备17例如可以包括一种或多种通信模块,作为示例,通信设备17可以包括适用于特定的无线通信协议的无线通信模块。例如,通信设备17可以包括WLAN模块,用于实现符合电气和电子工程师协会(IEEE)制定的402.11标准的Wi-FiTM通信;通信设备17也可以包括WWAN模块,用于实现符合蜂窝或其他无线广域协议的无线广域通信;通信设备17还可以包括蓝牙模块等采用其它协议的通信模块,或其它自定义类型的通信模块;通信设备17也可以是用于串行传输数据的端口。
当然,不同的计算机系统根据主板、操作系统和指令集架构的不同,其结构也可能有所变化。例如目前很多计算机系统设置有连接在总线11和各个输入/输出设备之间的输入/输出控制中心,且该输入/输出控制中心可以集成于处理器12之内或独立于处理器12。
上述计算机系统还包括未示出的各种软件,例如计算机操作系统和各种应用程序,而用于实施本公开提供的方法的程序包括在上述计算机系统中。
图5是本公开实施例所应用的嵌入式系统的结构图。上述实施例提供的处理器101可用作处理器501。
虽然嵌入式系统在硬件结构上与计算机系统具有高度相似性,但是嵌入式系统应用上的特点致使嵌入式系统在硬件的组成和实现形式上与通用计算机系统又有较大区别。
首先,为满足嵌入式系统500在速度、体积和功耗上的要求,操作系统、应用软件、特殊数据等需要长期保存的数据,通常不使用磁盘这类具有大容量且速度较慢的存储介质,而大多使用随机存储器502或闪存(Flash Memory)503。
另外,在嵌入式系统500中,需要A/D(模拟/数字转换)接口505和串行接口506,用于测控的需要,这在通用计算机中用得很少。A/D接口505主要完成测试中所需要的模拟信号到数字信号的转换、和数字信号到模拟信号的转换。嵌入式系统500应用于工业生产时经常需要测试。由于单片机产生的是数字信号,在测试时需要转换成模拟信号用于测试,因此,与通用计算机不同,需要A/D(模拟/数字转换)接口505完成相关转换。另外,工业中经常需要多个嵌入式系统串接在一起,完成相关功能,因此需要用于将多个嵌入式系统串联的串行接口506,而在通用计算机中则大多不需要。
另外,嵌入式系统500作为一个基本的处理单元,常常在工业设计中需要将多个嵌入式系统500联成网络,因此需要将嵌入式系统500联入网络的网络接口507。这在通用计算机中大多也不需要。此外,根据实际应用和规模的不同,有些嵌入式系统500要采用外部总线504。随着嵌入式系统500应用领域的迅速扩张,嵌入式系统500越来越趋于个性化,根据自身特点采用总线的种类也越来越多。另外,为了对嵌入式处理器501内部电路进行测试,处理器芯片普遍采用了边界扫描测试技术。为了适应该测试,采用了调试接口508。
随着超大规模集成电路(Very Large Scale Integration)和半导体工艺的迅速发展,上述的嵌入式系统的部分或者全部可实现在一个硅片上,即为嵌入式片上系统(SoC)。
上述嵌入式系统还包括未示出的各种软件,例如嵌入式操作系统和各种应用程序,而用于实施本公开提供的方法的程序包括在上述嵌入式系统中。
本公开实施例的商业价值
本公开实施例提供的系统和方法有应用场景,主要用于测试各种不具有源代码的应用程序和操作系统内核,可有针对性地完成其中的目标变量的追踪,因此该系统和方法具备了商业价值和经济价值。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如但不限于为电、磁、光、电磁、红外线或半导体的系统、装置或器件,或其他任意以上的组合。计算机可读存储介质的更具体的例子包括:具体一个或多个导线的电连接,便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器、磁存储器或者上述任意合适的组合。在本文中,计算机可读的存储介质可以是任意包含或存储程序的有形介质,该程序可以被处理单元、装置或者器件使用,或者与其结合使用。
计算机可读信号介质可以包括在基带中或者作为截波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或者其他任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质之外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令系统、装置或器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,以及上述任意合适的组合。
可以以一种或者多种程序设计语言或者组合来编写用于执行本公开实施例的计算机程序代码。所述程序设计语言包括面向对象的程序设计语言,例如JAVA、C++,还可以包括常规的过程式程序设计语言,例如C。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(LAN)或广域网(WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
以上所述仅为本公开的优选实施例,并不用于限制本公开,对于本领域技术人员而言,本公开可以有各种改动和变化。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

Claims (13)

1.一种追踪可执行程序中的目标变量的方法,包括:
读取描述信息,所述描述信息标识所述目标变量所属区域的基地址的获取来源及所述目标变量在所属区域的地址偏移;
使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;
根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;以及
从所述实际地址读取所述目标变量。
2.根据权利要求1所述的方法,其中,所述读取所述目标变量包括:读取所述目标变量的数据以及收集造成所述数据的变化的指令流信息。
3.根据权利要求1所述的方法,其中,所述获取来源指定从进程寄存器还是从指定内存获取所述目标变量所属区域的基地址。
4.根据权利要求1所示的方法,其中,所述描述信息还指定是否存在下一级地址以及是否下一级地址进行跟踪,所述读取所述目标变量还包括:
当存在下一级地址且指定对下一级地址进行跟踪时,从所述实际地址读取下一级地址,并从所述下一级地址读取所述目标变量。
5.根据权利要求1所述的方法,其中,所述基地址为所述可执行程序的进程空间的基地址或为所述可执行程序的进程空间内特定区域的基地址。
6.根据权利要求1所述的方法,还包括:加载并解析所述可执行程序,以构建所述描述信息。
7.根据权利要求1所述的方法,还包括:根据用户指令确定所述目标变量。
8.根据权利要求6所述的方法,其中,所述加载并解析所述可执行程序,以获得目标变量的描述信息包括:
确定所述目标变量归属的函数路径;
确定所述目标变量归属的数据类型定义;
根据所述函数路径和数据类型定义构建所述描述信息。
9.根据权利要求8所述的方法,其中,如果所述目标变量归属的数据类型定义为多级数据结构,则根据所述多级数据结构计算到达所述目标变量经过的每个级的地址偏移并累加到达所述目标变量经过的每个级的地址偏移以得到所述目标变量在所属区域的地址偏移。
10.根据权利要求1至9任一项所述的方法,其中,所述目标变量的数据类型包括:数值型、字符型、数据结构、类、指向数据结构或类的指针。
11.一种计算设备,包括:
处理单元,用于执行可执行程序,并将所述可执行程序中的目标变量的描述信息存储在所述处理器追踪模块的指定寄存器中,所述描述信息描述了所述目标变量所属区域的基地址的获取来源以及所述目标变量在所属区域的地址偏移,所述目标变量所属区域位于所述可执行程序的进程空间之中;
处理器追踪模块,用于读取指定寄存器内的描述信息;使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;从所述实际地址读取所述目标变量。
12.一种追踪可执行程序中的目标变量的系统,包括:软件部分的分析模块和硬件执行的处理器追踪模块,所述分析模块包括:
加载并解析所述可执行程序,以获得所述目标变量的描述信息;
将所述描述信息存储到所述处理器追踪模块的指定寄存器中,所述描述信息描述了所述目标变量所属区域的基地址的获取来源以及所述目标变量在所属区域的地址偏移,所述目标变量所属区域位于所述可执行程序的进程空间之中;
所述处理器追踪模块包括:
读取指定寄存器内的描述信息;
使用所述可执行程序的进程标识,从所述描述信息所标识的获取来源,获取所述目标变量所属区域的基地址;
根据所述基地址和所述地址偏移,确定所述目标变量的实际地址;以及
从所述实际地址读取所述目标变量。
13.根据权利要求12所述的系统,其中,所述获取来源指定从进程寄存器还是从指定内存获取所述目标变量所属区域的基地址。
CN202110817103.7A 2021-07-20 2021-07-20 追踪可执行程序中的目标变量的方法和系统 Pending CN113672499A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110817103.7A CN113672499A (zh) 2021-07-20 2021-07-20 追踪可执行程序中的目标变量的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110817103.7A CN113672499A (zh) 2021-07-20 2021-07-20 追踪可执行程序中的目标变量的方法和系统

Publications (1)

Publication Number Publication Date
CN113672499A true CN113672499A (zh) 2021-11-19

Family

ID=78539886

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110817103.7A Pending CN113672499A (zh) 2021-07-20 2021-07-20 追踪可执行程序中的目标变量的方法和系统

Country Status (1)

Country Link
CN (1) CN113672499A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114268514A (zh) * 2021-11-30 2022-04-01 国汽智控(北京)科技有限公司 车辆与上位机的通信方法、装置及系统
WO2024183587A1 (zh) * 2023-03-03 2024-09-12 苏州元脑智能科技有限公司 消息的传输方法及装置、非易失性可读存储介质及电子装置

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5802272A (en) * 1994-12-19 1998-09-01 Digital Equipment Corporation Method and apparatus for tracing unpredictable execution flows in a trace buffer of a high-speed computer system
US20060190930A1 (en) * 2005-02-18 2006-08-24 Hecht Daniel M Post-compile instrumentation of object code for generating execution trace data
CN102063368A (zh) * 2010-12-16 2011-05-18 国网电力科学研究院 基于命名变量的全景数据在线实时调试方法
CN103136107A (zh) * 2011-12-03 2013-06-05 南京南瑞继保电气有限公司 一种嵌入式程序动态分配内存的变量调试方法
CN103150445A (zh) * 2013-03-21 2013-06-12 北京经纬恒润科技有限公司 一种matlab模型变量的剖析方法及装置
WO2015035810A1 (zh) * 2013-09-16 2015-03-19 中兴通讯股份有限公司 一种数据断点监控方法、装置及调试器
US20180267741A1 (en) * 2017-03-16 2018-09-20 Arm Limited Memory access monitoring
CN112639747A (zh) * 2020-04-26 2021-04-09 深圳市大疆创新科技有限公司 处理器的寻址方法、处理器、可移动平台和电子设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5802272A (en) * 1994-12-19 1998-09-01 Digital Equipment Corporation Method and apparatus for tracing unpredictable execution flows in a trace buffer of a high-speed computer system
US20060190930A1 (en) * 2005-02-18 2006-08-24 Hecht Daniel M Post-compile instrumentation of object code for generating execution trace data
CN102063368A (zh) * 2010-12-16 2011-05-18 国网电力科学研究院 基于命名变量的全景数据在线实时调试方法
CN103136107A (zh) * 2011-12-03 2013-06-05 南京南瑞继保电气有限公司 一种嵌入式程序动态分配内存的变量调试方法
CN103150445A (zh) * 2013-03-21 2013-06-12 北京经纬恒润科技有限公司 一种matlab模型变量的剖析方法及装置
WO2015035810A1 (zh) * 2013-09-16 2015-03-19 中兴通讯股份有限公司 一种数据断点监控方法、装置及调试器
US20180267741A1 (en) * 2017-03-16 2018-09-20 Arm Limited Memory access monitoring
CN112639747A (zh) * 2020-04-26 2021-04-09 深圳市大疆创新科技有限公司 处理器的寻址方法、处理器、可移动平台和电子设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114268514A (zh) * 2021-11-30 2022-04-01 国汽智控(北京)科技有限公司 车辆与上位机的通信方法、装置及系统
WO2024183587A1 (zh) * 2023-03-03 2024-09-12 苏州元脑智能科技有限公司 消息的传输方法及装置、非易失性可读存储介质及电子装置

Similar Documents

Publication Publication Date Title
US8108839B2 (en) Method and apparatus for tracing execution of computer programming code using dynamic trace enablement
Xie et al. Context-and path-sensitive memory leak detection
US8229726B1 (en) System for application level analysis of hardware simulations
US10592430B2 (en) Memory structure comprising scratchpad memory
US20100115494A1 (en) System for dynamic program profiling
US20140075249A1 (en) Execution History Tracing Method
US9836379B2 (en) Method and system for generating a memory trace of a program code executable on a programmable target
CN113672499A (zh) 追踪可执行程序中的目标变量的方法和系统
US20220100512A1 (en) Deterministic replay of a multi-threaded trace on a multi-threaded processor
US20230109752A1 (en) Deterministic replay of a multi-threaded trace on a multi-threaded processor
WO2020191549A1 (zh) 一种soc芯片、确定热点函数的方法及终端设备
CN109254883A (zh) 一种片上存储器的调试装置及方法
US6347383B1 (en) Method and system for address trace compression through loop detection and reduction
US10949330B2 (en) Binary instrumentation to trace graphics processor code
US8612952B2 (en) Performance optimization based on data accesses during critical sections
CN113672555B (zh) 处理器核、处理器、片上系统和调试系统
Rodchenko et al. Type information elimination from objects on architectures with tagged pointers support
CN113849397A (zh) 执行引擎、虚拟机、相关装置和相关方法
US20090063805A1 (en) Data acquisition messaging using special purpose registers
CN114780409A (zh) 基于程序运行进程的断点设置方法、电子设备和存储介质
Imhmed Understanding Performance of a Novel Local Memory Store Design through Compiler-Driven Simulation
Cho et al. AndroScope: An Insightful Performance Analyzer for All Software Layers of the Android‐Based Systems
CN114253816A (zh) 确定崩溃日志记录的结构的设备、系统和方法
CN112905474A (zh) 一种基于硬件的高级程序动态控制流追踪方法和装置
Ashraf et al. Memory and communication profiling for accelerator-based platforms

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
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20240226

Address after: 310052 Room 201, floor 2, building 5, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province

Applicant after: C-SKY MICROSYSTEMS Co.,Ltd.

Country or region after: China

Address before: 311121 room 525, floor 5, building 3, No. 969, Wenyi West Road, Wuchang Street, Yuhang District, Hangzhou City, Zhejiang Province

Applicant before: Pingtouge (Hangzhou) Semiconductor Co.,Ltd.

Country or region before: China