CN114780409A - 基于程序运行进程的断点设置方法、电子设备和存储介质 - Google Patents
基于程序运行进程的断点设置方法、电子设备和存储介质 Download PDFInfo
- Publication number
- CN114780409A CN114780409A CN202210441917.XA CN202210441917A CN114780409A CN 114780409 A CN114780409 A CN 114780409A CN 202210441917 A CN202210441917 A CN 202210441917A CN 114780409 A CN114780409 A CN 114780409A
- Authority
- CN
- China
- Prior art keywords
- breakpoint
- branch node
- jump
- program
- instruction
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 92
- 230000008569 process Effects 0.000 title claims abstract description 36
- 230000002159 abnormal effect Effects 0.000 claims description 28
- 230000002441 reversible effect Effects 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 5
- 238000004891 communication Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 13
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004886 process control Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/362—Debugging of software
- G06F11/3644—Debugging of software by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/362—Debugging of software
- G06F11/366—Debugging of software using diagnostics
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
技术领域
本公开涉及程序调试的技术领域,具体涉及一种基于程序运行进程的断点设置方法、电子设备和存储介质。
背景技术
调试器能够随心所欲地停止程序执行,主要在于软件断点和硬件断点。软件断点体现为添加在程序中的断点指令,程序执行到断点指令则停止(即软件中断)。
在芯片的软件验证过程中,尤其是使用大型软件作为benchmark和使用自动测试技术的情况下,通常需要在程序流程中快速定位故障点以便分析验证。为了定位故障需要导出现场信息,当处理器硬件不带Trace跟踪模块时,导出现场信息需要暂停设置断点。因此断点设置方法对于故障定位具有十分重要的意义。
传统的断点设置方法和缺点:一、从初始断点开始,根据经验人工分析,逐步设置后续断点位置。缺点是对调试人员的知识技能要求极高,且调试效率低,容易出现路径遗漏。二、使用单步断点,每执行完一条指令即记录现场信息。缺点是时间成本极高,只能用在局部程序片段调试中,无法实现程序全路径覆盖的断点设置。
发明内容
为了解决上述技术问题,本公开提供了一种基于程序运行进程的断点设置方法、电子设备和存储介质,可以在程序运行进程全路径覆盖的前提下,将断点集合控制在最小范围,不仅节约时间成本,还能准确快速的定位故障。
一方面本公开提供了一种基于程序运行进程的断点设置方法,其包括:
扫描待运行程序的反汇编文件,识别所有分支节点类型,根据指令集体系架构设置相关分支节点指令信息,获得记录有所有分支节点信息的初始跳转表;
对初始的跳转表进行解析,并执行预设指令设置断点表;
在程序被调度到运行状态时,根据前述断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址,和/或在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该分支节点的断点地址并更新前述的断点表。
可选地,前述的分支节点类型包括无条件分支节点、有条件分支节点、Trap返回分支节点和异常分支节点,
并且,前述对初始的跳转表进行解析,并执行预设指令设置断点表的步骤中包括:
分析跳转表中有条件分支节点信息,判断是否需要调整循环断点间隔粒度;
确定是,则查找并标记跳转表中反向有条件跳转的分支节点,将反向有条件跳转的分支节点在断点表中所对应的目标点从该断点表中移除,或者指令修改其寄存器地址为条件断点;
确定否,分析跳转表中异常分支节点信息,判断是否调整异常断点;
确定是,则根据程序源代码和反汇编文件查找与故障对应的handler入口地址,设置新断点,并将该新断点替换前述入口地址对应的异常断点;
确定否,则结束该程序运行进程中的断点设置。
可选地,前述跳转表中存储的分支节点包括第一分支节点和第二分支节点,该第一分支节点在程序被调度到运行状态时,按照固定断点间隔粒度对程序指令进行顺序设置其断点地址,
该第二分支节点在程序被调度到运行状态时,按照一定粒度对程序指令进行顺序设置断点地址,和/或在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该第二分支节点的断点地址并更新前述的断点表。
可选地,前述的第二分支节点包括第一状态分支节点和第二状态分支节点,前述在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该第二分支节点的断点地址并更新前述的断点表的步骤包括:
在程序被调度到运行状态前,将前述的第一状态分支节点根据预设指令设置前述的断点地址;以及
在程序被调度到运行状态时,将前述的第二状态分支节点根据其分支节点的指令信息执行调整循环断点间隔粒度的步骤动态设置并更新前述的跳转表,以及执行调整异常断点的步骤设置新断点并更新前述的断点表。
可选地,前述根据断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址的步骤包括:
在程序运行到当前分支节点时,查询跳转表,判断当前分支节点是否匹配无条件分支节点的跳转点地址;
确定匹配,则读取跳转的目标寄存器值,确定其目标点的跳转点地址,并在该跳转点地址设置临时断点的执行指令。
可选地,前述根据断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址的步骤还包括:
确定不存在匹配无条件分支节点的跳转点地址后,则查询跳转表,判断当前分支节点是否匹配Trap返回分支节点的跳转点地址;
确定匹配,则读取当前指令级别对应的xepc寄存器值,确定其目标点的跳转点地址,并在该跳转点地址设置临时断点的执行指令。
可选地,前述根据断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址的步骤还包括:
确定不存在匹配Trap返回分支节点的跳转点地址后,则查询跳转表,判断当前分支节点是否匹配异常分支节点的异常入口设置节点地址;
确定匹配,则读取当前指令级别对应的xtvec寄存器值,确定其目标点的跳转点地址;
将该目标点的跳转点地址更新到前述跳转表中当前分支节点的对应位置;
写入断点表并根据分支节点的指令信息设置断点,并判断跳转表中是否存在同类分支节点;
确定存在,则将跳转表中同类分支节点对应的目标点的跳转点地址修改为unknown值,并从该断点表中删除对应的寄存器地址,以及从调试工具中删除其对应的断点。
可选地,前述根据断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址的步骤中还包括:
确定当前分支节点存在故障或程序运行到当前分支节点无异常,循环执行查询跳转表,判断当前分支节点是否匹配无条件分支节点的跳转点地址的步骤及其之后的步骤,直到指令结束当前程序运行进程或遍历该跳转表中所有分支节点无异常为止。
另一方面本公开提供了一种电子设备,其包括:处理器和存储器,其中,该存储器内存储有可被处理器执行的程序,前述程序被该处理器执行时实现如前所述断点设置方法的步骤。
另一方面本公开还提供了一种计算机可读存储介质,其中,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如前所述断点设置方法的步骤。
本公开的有益效果是:本公开提供的一种基于程序运行进程的断点设置方法、电子设备和存储介质,其中,该断点设置方法包括:扫描待运行程序的反汇编文件,识别所有分支节点类型,根据指令集体系架构设置相关分支节点指令信息,获得记录有所有分支节点信息的初始跳转表;对初始的跳转表进行解析,并执行预设指令设置断点表;在程序被调度到运行状态时,根据前述断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址,和/或在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该分支节点的断点地址并更新前述的断点表。由此可实现软件验证过程中的全自动分析,且只需要针对指令集架构(Instruction set architecture,ISA)进行一次配置即可,能有效提高程序的操作运行效率。
其次,该断点设置方法分析了无条件分支节点、有条件分支节点、Trap返回分支节点和异常分支节点等各种非顺序流程,断点设置完成后将覆盖程序运行全路径,没有遗漏,因此可以极大地提高软件验证的准确性和效率。
再者,该断点设置方法能够在程序运行进程全路径覆盖的前提下,通过改变断点间隔粒度,将断点集合控制在最小范围,节约时间成本,有针对性地提高故障定位效率,由此可准确快速地定位故障。
应当说明的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚。
图1示出本公开实施例提供的电子设备的示意图;
图2示出本公开实施例提供的一种基于程序运行进程的断点设置方法的流程示意图;
图3a~图3d分别示出图2所示断点设置方法中无条件分支节点、有条件分支节点、Trap返回分支节点和异常分支节点的模型示意图;
图4示出图2所示断点设置方法在一具体实施方式中根据跳转表设置的断点表的示意图表;
图5示出图2所示断点设置方法在另一具体实施方式中异常分支节点对应的跳转表及其对应的断点表在程序运行时的过程示意图表;
图6示出图2所示断点设置方法的初始断点设置流程的模型示意图;
图7示出图2所示断点设置方法中对第二分支节点的动态断点设置流程的模型示意图。
具体实施方式
为了便于理解本公开,下面将参照相关附图对本公开进行更全面的描述。附图中给出了本公开的较佳实施例。但是,本公开可以通过不同的形式来实现,并不限于本文所描述的实施例。相反的,提供这些实施例的目的是使对本公开内容的理解更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本公开的技术领域的技术人员通常理解的含义相同。在本公开的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本公开。
下面,参照附图对本公开进行详细说明。
系统概述
图1示出本公开实施例中的电子设备的示意性框图。该电子设备10可基于目前市场上各种型号的处理器构建,并由WINDOWSTM操作系统版本、UNIX操作系统、Linux操作系统等操作系统驱动。此外,电子设备10可以是PC机、台式机、笔记本、服务器和移动通信装置等硬件。
如图1所示,本公开实施例的电子设备10可以包括一个或多个处理器12,以及存储器14。
存储器14可以是主存储器(简称为主存或内存)。用于存储由数据信号表示的指令信息和/或数据信息,例如存放处理器12提供的数据(例如为运算结果),也可以用于实现处理器12与外部存储设备17(或称为辅助存储器或外部存储器)之间的数据交换。
在一些情形下,处理器12可能需要访问存储器14,以获取存储器14中的数据或对存储器14中的数据进行修改。由于存储器14的访问速度较慢,为了缓解处理器12与存储器14之间的速度差距,电子设备10还包括与总线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中,则处理器12需要经总线11访问存储器14,以在存储器14中查找相应的信息。因为高速缓冲存储器18的存取速率非常快,因此当高速缓冲存储器18命中时,处理器12的效率可以显著提高,进而也使整个电子设备10的性能和效率得以提升。
此外,电子设备10还可以包括存储设备17、显示设备13、音频设备15、鼠标/键盘16等输入/输出设备。存储设备17例如是通过相应接口与总线11耦合的硬盘、光盘以及闪存等用于信息存取的设备。显示设备13例如经相应的显卡与总线11耦合,用于根据总线11提供的显示信号进行显示。
电子设备10通常还包括通信设备19,因此可以通过各种方式与网络或其他设备通信。通信设备19例如可以包括一种或多种通信模块,作为示例,通信设备19可以包括适用于特定的无线通信协议的无线通信模块。例如,通信设备19可以包括WLAN模块,用于实现符合电气和电子工程师协会(IEEE)制定的802.11标准的Wi-FiTM通信;通信设备19也可以包括WWAN模块,用于实现符合蜂窝或其他无线广域协议的无线广域通信;通信设备19还可以包括蓝牙模块等采用其它协议的通信模块,或其它自定义类型的通信模块;通信设备19也可以是用于串行传输数据的端口。
当然,不同的电子设备10根据主板、操作系统和指令集架构的不同,其结构也可能有所变化。例如目前很多电子设备10设置有连接在总线11和各个输入/输出设备之间的输入/输出控制中心,且该输入/输出控制中心可以集成于处理器12之内或独立于处理器12。
断点设置方法
在芯片的软件验证过程中,尤其是使用大型软件作为benchmark和使用自动测试技术的情况下,通常需要在程序流程中快速定位故障点以便分析验证。为了定位故障需要导出现场信息,当处理器硬件不带Trace跟踪模块时,导出现场信息需要暂停设置断点。因此断点设置方法对于故障定位具有十分重要的意义。传统的断点设置方法是基于单步的断点设置,一方面会导致时间成本急剧上升,不适用于整个程序的故障定位;另一方面当程序并非顺序执行时,各种分支导致断点设置要覆盖程序运行全路径相当困难;同时断点设置需要对处理器的汇编指令集非常熟悉,人工分析的效率很低。鉴于此,本公开提供了一种基于程序运行进程的断点设置方法,该方法通过处理器12执行存储在存储器14内的程序来执行,相关程序也可以是存储在计算机可读存储介质上然后被读入到存储器14中。
图2示出本公开实施例提供的一种基于程序运行进程的断点设置方法的流程示意图,图3a~图3d分别示出图2所示断点设置方法中无条件分支节点、有条件分支节点、Trap返回分支节点和异常分支节点的模型示意图,图4示出图2所示断点设置方法在一具体实施方式中根据跳转表设置的断点表的示意图表,图5示出图2所示断点设置方法在另一具体实施方式中异常分支节点对应的跳转表及其对应的断点表在程序运行时的过程示意图表。参见图2,该断点设置方法包括:
步骤S110:扫描待运行程序的反汇编文件,识别所有分支节点类型,根据指令集体系架构设置相关分支节点指令信息,获得记录有所有分支节点信息的初始跳转表。
在软件验证过程中,软件中断通常有三种情况引起:由中断指令INT引起的中断、由CPU的某些运算错误引起的中断、以及由调试程序debug设置的中断。利用调试工具(或程序)可以从开发环境调试运行的工作流对活动设置断点,工作流有两种基本类型,顺序工作流和状态机工作流,它们的区别主要是前者强调的是顺序过程,后者强调的是状态的改变。顺序工作流的执行过程是一个连续的步骤序列,它在完成一个活动之后会去执行到下一个,它的执行过程是可以预料的,并且总是向前执行直到完成为止。状态机工作流功能最强大,使用方便,状态机中包含一系列状态(包括初始状态和结束状态)和事件。状态机总是停在一个预设的状态中,直到事件触发之后才会跳转到新的状态上。因此,对应工作流设置的断点可以分为“顺序流”断点和“非顺序流”断点。
在步骤S110中,根据非程序流程类型对“非顺序流”断点的分支节点进行分类,则上述的分支节点类型的分支节点类型包括无条件分支节点、有条件分支节点、Trap返回分支节点和异常分支节点。跳转表记录了所有分支节点信息,且对应无条件分支节点、有条件分支节点、Trap返回分支节点和异常分支节点,图3a~图3d对应分别描述了这4类分支节点的跳转模型,其中,跳转表的每条记录称为一个分支节点(或断点)。以图3a中钱箱无条件跳转为例,纵向方格(每条记录)代表程序运行的工作流中的一个分支节点(或断点),当程序运行到A1时,直接跳转到A2对应的目标点1的地址,执行对应的程序指令。
对于“非顺序流”断点,先分析待运行程序的反汇编文件,获得一个初始“跳转表”。具体方法是识别所有分支节点,并按一定格式将所有分支相关的地址记录在表中。这一分析过程可以自动化,只需要根据ISA设置相关分支指令信息即可。
依前文所述,在本公开实施例中,跳转表中存储的分支节点可以包括第一分支节点(“顺序流”断点,下同)和第二分支节点(“非顺序流”断点,下同),该第一分支节点在程序被调度到运行状态时,只需按照固定断点间隔粒度对程序指令进行顺序设置其断点地址即可。该第一分支节点在程序被调度到运行状态时,可以按照一定的断点间隔粒度对程序指令进行顺序设置其断点地址,和/或在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该第二分支节点的断点地址并更新断点表,以针对性地提高故障定位效率。例如为了提高调试速度,可以调整“循环”(后向有条件分支)和“异常”的处理。
因此,可以不依赖硬件Trace模块,使用软件方法分析待测试程序的反汇编,得到初步的全流程分支节点,即初始的跳转表。
步骤S120:对初始的跳转表进行解析,并执行预设指令设置断点表。
在步骤S120中,图4给出了一个本公开实施例提供的断点设置方法在一具体实施方式中根据初始跳转表设置初始断点表的示意图表模型。对初始的跳转表进行解析,依前文所述,该第二分支节点的设置依据跳转表,并根据一定策略进行设置断点表,该过程可自动化。
在本公开实施例中,结合
图6给出的初始断点设置流程的示意模型分析,前述对初始的跳转表进行解析,并执行预设指令设置断点表的步骤之后,该断点设置方法可以执行以下步骤:
分析跳转表中有条件分支节点信息,判断是否需要调整循环断点间隔粒度;
确定是,则查找并标记跳转表中反向有条件跳转的分支节点,将筛选出的反向有条件跳转的分支节点在断点表中所对应的目标点从该断点表中移除,或者指令修改其寄存器地址为条件断点;
确定否,分析跳转表中异常分支节点信息,判断是否调整异常断点;
确定是,则根据程序源代码和反汇编文件查找与故障对应的handler入口地址,设置新断点,并将该新断点替换前述入口地址对应的异常断点;
确定否,则结束该程序运行进程中的断点设置。
在本实施例中,通过分析跳转表,使用上述断点设置策略,可以实现自动产生覆盖全路径的断点表。
步骤S130:在程序被调度到运行状态时,根据前述断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址,和/或在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该分支节点的断点地址并更新前述的断点表。
在一些可选的实施例中,步骤S130可以执行:在程序被调度到运行状态时,将第一分支节点根据前述断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址。
在一些可选的实施例中,步骤S130也可以执行:在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该第二分支节点的断点地址并更新断点表,以针对性地提高故障定位效率。
在一些可选的实施例中,步骤S130也可以执行:在程序被调度到运行状态时,将第一分支节点根据前述断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址,并且在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该第二分支节点的断点地址并更新断点表,以针对性地提高故障定位效率。
在步骤S130中,结合图7所示对第二分支节点的动态断点设置流程的示意模型,在本公开的一个可选实施例中,前述根据断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址的步骤可以包括:
在程序运行到当前分支节点时,查询跳转表,判断当前分支节点是否匹配无条件分支节点的跳转点地址;
确定匹配,则读取跳转的目标寄存器值,确定其目标点的跳转点地址,并在该跳转点地址设置临时断点的执行指令。
在本公开的另一个可选实施例中,前述根据断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址的步骤还可以包括:
确定不存在匹配无条件分支节点的跳转点地址后,则查询跳转表,判断当前分支节点是否匹配Trap返回分支节点的跳转点地址;
确定匹配,则读取当前指令级别对应的xepc寄存器值,确定其目标点的跳转点地址,并在该跳转点地址设置临时断点的执行指令。
在本公开的另一个可选实施例中,前述根据断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址的步骤还包括:
确定不存在匹配Trap返回分支节点的跳转点地址后,则查询跳转表,判断当前分支节点是否匹配异常分支节点的异常入口设置节点地址;
确定匹配,则读取当前指令级别对应的xtvec寄存器值,确定其目标点的跳转点地址;
将该目标点的跳转点地址更新到前述跳转表中当前分支节点的对应位置;
写入断点表并根据分支节点的指令信息设置断点,并判断跳转表中是否存在同类分支节点;
确定存在,则将跳转表中同类分支节点对应的目标点的跳转点地址修改为unknown值,并从该断点表中删除对应的寄存器地址,以及从调试工具中删除其对应的断点。基于上述公开内容,针对第二状态分支节点,可以采用动态方法更新跳转表,实现动态设置断点。针对“循环”(后向有条件分支),以及“异常”,都可以结合源码给出不同且高效的断点设置策略。
本公开实施例提供的断点设置方法全面分析了无条件分支节点、有条件分支节点、Trap返回分支节点和异常分支节点等各种非顺序流程,其断点设置完成后将覆盖程序运行的全路径,没有遗漏,因此可以极大地提高软件验证的准确性和效率。
此外,在本公开实施例提供的断点设置方法中,“非顺序流”断点和“顺序流”断点可以结合使用,一定程度上也扩展了本公开断点设置方法的适用性和兼容性。
在本公开的又一个可选实施例中,前述根据断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址的步骤中还包括:
确定当前分支节点存在故障或程序运行到当前分支节点无异常,循环执行查询跳转表,判断当前分支节点是否匹配无条件分支节点的跳转点地址的步骤及其之后的步骤,直到指令结束当前程序运行进程或遍历该跳转表中所有分支节点无异常为止。
在本公开的一个可选实施例中,前述的第二分支节点包括第一状态分支节点和第二状态分支节点,图5以“异常”类型的分支节点为例,阐释了跳转表和断点表内容在运行时的变化过程。前述在调试的不同阶段通过指令修改断点间隔粒度,调整该第二分支节点的断点设置策略的步骤可以包括:
在程序被调度到运行状态前,将前述的第一状态分支节点根据预设指令设置前述的断点地址;以及
在程序被调度到运行状态时,将前述的第二状态分支节点根据其分支节点的指令信息执行调整循环断点间隔粒度的步骤动态设置并更新前述的跳转表,以及执行调整异常断点的步骤设置新断点并更新前述的断点表,以此来进一步提高调试速度。
因此,该断点设置方法能够在程序运行进程全路径覆盖的前提下,通过改变断点间隔粒度,将断点集合控制在最小范围,节约时间成本,有针对性地提高故障定位效率,由此可准确快速地定位故障。
综上所述,本公开提供的一种基于程序运行进程的断点设置方法、电子设备和存储介质,其中,该断点设置方法包括:扫描待运行程序的反汇编文件,识别所有分支节点类型,根据指令集体系架构设置相关分支节点指令信息,获得记录有所有分支节点信息的初始跳转表;对初始的跳转表进行解析,并执行预设指令设置断点表;在程序被调度到运行状态时,根据前述断点表按照固定断点间隔粒度对预设指令进行顺序设置断点地址,和/或在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该分支节点的断点地址并更新前述的断点表。由此可实现软件验证过程中的全自动分析,且只需要针对指令集架构进行一次配置即可,能有效提高程序的操作运行效率。
其次,该断点设置方法分析了无条件跳转分支节点、有条件分支节点、Trap返回分支节点和异常分支节点等各种非顺序流程,可以在程序测试运行中自动设置断点,避免人工操作可能带来的误差,和减少重复操作的时间,节省操作步骤以提高断点设置效率,在节省人力成本的同时保证断点设置的高效率以及检测的准确率,同时断点设置完成后将覆盖程序运行全路径,没有遗漏,因此可以极大地提高软件验证的准确性和效率。
再者,该断点设置方法能够在程序运行进程全路径覆盖的前提下,通过改变断点间隔粒度,将断点集合控制在最小范围,节约时间成本,有针对性地提高故障定位效率,由此可准确快速地定位故障。
需要领会,以上所述仅为本公开的优选实施例,并不用于限制本公开,对于本领域技术人员而言,本说明书的实施例存在许多变型。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
应该理解,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于装置和系统实施例中描述的方法,所以描述的比较简单,相关之处参见其他实施例的部分说明即可。
应该理解,上述对本说明书特定实施例进行了描述。其它实施例在权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
应该理解,本文用单数形式描述或者在附图中仅显示一个的元件并不代表将该元件的数量限于一个。此外,本文中被描述或示出为分开的模块或元件可被组合为单个模块或元件,且本文中被描述或示出为单个的模块或元件可被拆分为多个模块或元件。
还应理解,本文采用的术语和表述方式只是用于描述,本说明书的一个或多个实施例并不应局限于这些术语和表述。使用这些术语和表述并不意味着排除任何示意和描述(或其中部分)的等效特征,应认识到可能存在的各种修改也应包含在权利要求范围内。其他修改、变化和替换也可能存在。相应的,权利要求应视为覆盖所有这些等效物。
Claims (10)
1.一种基于程序运行进程的断点设置方法,其特征在于,包括:
扫描待运行程序的反汇编文件,识别所有分支节点类型,根据指令集体系架构设置相关分支节点指令信息,获得记录有所有分支节点信息的初始跳转表;
对初始的所述跳转表进行解析,并执行预设指令设置断点表;
在所述程序被调度到运行状态时,根据所述断点表按照固定断点间隔粒度对所述预设指令进行顺序设置断点地址,和/或在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整该分支节点的断点地址并更新所述断点表。
2.根据权利要求1所述的断点设置方法,其特征在于,所述分支节点类型包括无条件分支节点、有条件分支节点、Trap返回分支节点和异常分支节点,
并且,所述对初始的所述跳转表进行解析,并执行预设指令设置断点表的步骤中包括:
分析所述跳转表中有条件分支节点信息,判断是否需要调整循环断点间隔粒度;
确定是,则查找并标记所述跳转表中反向有条件跳转的分支节点,将所述反向有条件跳转的分支节点在所述断点表中所对应的目标点从所述断点表中移除,或者指令修改其寄存器地址为条件断点;
确定否,分析所述跳转表中异常分支节点信息,判断是否调整异常断点;
确定是,则根据所述程序源代码和反汇编文件查找与故障对应的handler入口地址,设置新断点,并将所述新断点替换该入口地址对应的异常断点;
确定否,结束该程序运行进程中的断点设置。
3.根据权利要求2所述的断点设置方法,其特征在于,所述跳转表中存储的分支节点包括第一分支节点和第二分支节点,所述第一分支节点在所述程序被调度到运行状态时,按照固定断点间隔粒度对程序指令进行顺序设置所述断点地址,
所述第二分支节点在所述程序被调度到运行状态时,按照一定粒度对程序指令进行顺序设置所述断点地址,和/或在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整所述第二分支节点的断点地址并更新所述断点表。
4.根据权利要求3所述的断点设置方法,其特征在于,所述第二分支节点包括第一状态分支节点和第二状态分支节点,所述在某一分支节点检测无故障时,通过指令修改断点间隔粒度,调整所述第二分支节点的断点地址并更新所述断点表的步骤包括:
在所述程序被调度到运行状态前,将所述第一状态分支节点根据所述预设指令设置所述断点地址;以及
在所述程序被调度到运行状态时,将所述第二状态分支节点根据其分支节点的指令信息执行调整循环断点间隔粒度的步骤动态设置并更新所述跳转表,以及执行调整异常断点的步骤设置新断点并更新所述断点表。
5.根据权利要求1所述的断点设置方法,其特征在于,所述根据所述断点表按照固定断点间隔粒度对所述预设指令进行顺序设置断点地址的步骤包括:
在程序运行到当前分支节点时,查询所述跳转表,判断当前分支节点是否匹配无条件分支节点的跳转点地址;
确定匹配,则读取跳转后的目标寄存器值,确定其目标点的跳转点地址,并在该跳转点地址设置临时断点的执行指令。
6.根据权利要求5所述的断点设置方法,其特征在于,所述根据所述断点表按照固定断点间隔粒度对所述预设指令进行顺序设置断点地址的步骤还包括:
确定不存在匹配无条件分支节点的跳转点地址后,则查询所述跳转表,判断当前分支节点是否匹配Trap返回分支节点的跳转点地址;
确定匹配,则读取当前指令级别对应的xepc寄存器值,确定其目标点的跳转点地址,并在该跳转点地址设置临时断点的执行指令。
7.根据权利要求6所述的断点设置方法,其特征在于,所述根据所述断点表按照固定断点间隔粒度对所述预设指令进行顺序设置断点地址的步骤还包括:
确定不存在匹配Trap返回分支节点的跳转点地址后,则查询所述跳转表,判断当前分支节点是否匹配异常分支节点的异常入口设置节点地址;
确定匹配,则读取当前指令级别对应的xtvec寄存器值,确定其目标点的跳转点地址;
将该目标点的跳转点地址更新到所述跳转表中当前分支节点的对应位置;
写入断点表并根据分支节点的指令信息设置断点,并判断所述跳转表中是否存在同类分支节点;
确定存在,则将所述跳转表中所述同类分支节点对应的目标点的跳转点地址修改为unknown,并从所述断点表中删除对应的寄存器地址,以及从调试工具中删除其对应的断点。
8.根据权利要求7所述的断点设置方法,其特征在于,所述根据所述断点表按照固定断点间隔粒度对所述预设指令进行顺序设置断点地址的步骤中还包括:
确定当前分支节点存在故障或程序运行到当前分支节点无异常,循环执行查询所述跳转表,判断当前分支节点是否匹配无条件分支节点的跳转点地址的步骤及其之后的步骤,直到指令结束当前程序运行进程或遍历所述跳转表中所有分支节点无异常为止。
9.一种电子设备,其特征在于,包括:处理器和存储器,其中,所述存储器内存储有可被所述处理器执行的程序,所述程序被所述处理器执行时实现如权利要求1-8中任一项所述方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-8中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210441917.XA CN114780409A (zh) | 2022-04-25 | 2022-04-25 | 基于程序运行进程的断点设置方法、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210441917.XA CN114780409A (zh) | 2022-04-25 | 2022-04-25 | 基于程序运行进程的断点设置方法、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114780409A true CN114780409A (zh) | 2022-07-22 |
Family
ID=82433503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210441917.XA Pending CN114780409A (zh) | 2022-04-25 | 2022-04-25 | 基于程序运行进程的断点设置方法、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114780409A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117310458A (zh) * | 2023-11-29 | 2023-12-29 | 北京飘石科技有限公司 | 一种fpga芯片的最终测试方法及装置 |
-
2022
- 2022-04-25 CN CN202210441917.XA patent/CN114780409A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117310458A (zh) * | 2023-11-29 | 2023-12-29 | 北京飘石科技有限公司 | 一种fpga芯片的最终测试方法及装置 |
CN117310458B (zh) * | 2023-11-29 | 2024-01-30 | 北京飘石科技有限公司 | 一种fpga芯片的最终测试方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4094724B2 (ja) | ソフトウェアをデバッグする際に例外を識別するための装置および方法 | |
US8903703B2 (en) | Dynamically adjusting speed versus accuracy of computer platform simulation | |
US12093398B2 (en) | Vulnerability analysis and reporting for embedded systems | |
US8938729B2 (en) | Two pass automated application instrumentation | |
US11748072B2 (en) | Apparatus and method for source code optimisation | |
US20080127113A1 (en) | Method and system for implementing watchpoints | |
CN103430158B (zh) | 使用执行单一步骤来诊断编码 | |
EP2359247A2 (en) | Transforming user script code for debugging | |
EP3391224B1 (en) | Method and apparatus for data mining from core traces | |
US20130125096A1 (en) | Systems and Methods for Dynamic Collection of Probe Call Sites | |
CN103034577A (zh) | 一种定位关机慢的方法及装置 | |
CN110892384A (zh) | 对处理器未定义行为依赖的重放时间行程跟踪 | |
US20080010536A1 (en) | Breakpoints with Separate Conditions | |
US8230413B2 (en) | Detecting incorrect versions of files | |
US7779393B1 (en) | System and method for efficient verification of memory consistency model compliance | |
CN114780409A (zh) | 基于程序运行进程的断点设置方法、电子设备和存储介质 | |
CN110431536B (zh) | 实现整个数据结构上的断点 | |
US11030075B2 (en) | Efficient register breakpoints | |
US10540254B2 (en) | Technologies for analyzing persistent memory programs | |
US20070150866A1 (en) | Displaying parameters associated with call statements | |
CN118860762B (zh) | 基于数字信号处理器的仿真系统及方法 | |
US20190042390A1 (en) | Focused execution of traced code in a debugger | |
WO2006093762A1 (en) | Computer platform simulation | |
CN118427094A (zh) | 嵌入式系统模糊测试方法、系统、设备及存储介质 | |
CN119088699A (zh) | 基于kernel参数分析和插桩验证的GPU访问数据追踪方法及系统 |
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 | ||
CB02 | Change of applicant information |
Address after: Room 101, floor 1, building 3, yard 18, Kechuang 10th Street, Beijing Economic and Technological Development Zone, Daxing District, Beijing 100176 Applicant after: Beijing ESWIN Computing Technology Co.,Ltd. Address before: Room 101, floor 1, building 3, yard 18, Kechuang 10th Street, Beijing Economic and Technological Development Zone, Daxing District, Beijing 100176 Applicant before: Beijing yisiwei Computing Technology Co.,Ltd. |