一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种ATE设备中的多线程断点调试方法及系统与流程

2022-03-31 09:14:37 来源:中国专利 TAG:

一种ate设备中的多线程断点调试方法及系统
技术领域
1.本发明涉及半导体芯片测试领域,特别涉及一种ate设备中的多线程断点调试方法及系统。


背景技术:

2.ate(automatic test equipment)是自动测试设备,它是一种由高性能计算机控制的测试仪器的集合体,是由测试仪和计算机组合而成的测试系统,计算机通过运行测试机程序的指令来控制测试硬件。半导体芯片ate用于检测集成电路的功能和性能的完整性,是集成电路生产制造流程中确保集成电路品质的重要设备,其对集成电路测试通常需经过测试程序设计、程序编译、向量加载、测试执行四个过程。
3.调试功能在测试程序设计的过程中非常重要。开发人员往往需要单步调试、修改配置、执行函数来快速调通测试程序。测试机台的调试功能跟常见的调试工具(如linux的gdb)有本质的区别:调试功能是嵌入在测试机台的内部功能,不是单一程序。而且在单步调试过程中需要图形化显示大量的机台数据信息,来帮助开发人员进行调试,一般测试机厂商都会自己开发类似的调试功能。
4.现有技术中,普遍在windows mingw环境下使用gdb调试用户程序时,由于gdb调试windows程序时使用windows debug api实现的原因,导致不能多线程异步调试。windows debug api不支持non-stop模式,也就是只要进入断点,所有的线程都会停住,这样会限制很多涉及其他线程的功能调试和信息采集。而为了高效的进行芯片测试,测试机程序都是多线程。因此,在ate系统中,用户给测试程序打断点,程序停止后,用户不能进行其他操作,无法使用afe工具对芯片进行相应的功能测试。
5.gdb调试windows程序时,内部实现方式是调用windows debug api来实现调试功能。当gdb附着到了一个程序上时,它就使用apl函数waitfordebugevent将自己挂起,直到程序中发生调试事件。无论何时,只要调试事件发生,windows就会把正在被调试程序中的所有线程挂起,把事件传递给调试器。这时,调试器会处理相应的事件。事件被处理完之后,调试器使用continuedebugevent函数通知windows继续执行程序,于是程序线程就继续执行,从程序中调试事件发生这一时刻开始,一直到调试器调用continuedebugevent继续程序的执行,这个程序完全被挂起。
6.而芯片测试工程师在调试芯片测试代码时经常会碰到如下场景:在测试结果出错或有疑问的测试代码处打断点,再通过ate系统的ide上相模块的工具来获取硬件,寄存器状态或通过设置相应参数来执行获取测试值。来进一步定位问题的原因。但由于上述windows gdb的限制,用户在给测试程序打断点且程序停止后,用户不能进行其他操作,无法使用ide的其他工具,这也是一直以来的一个行业的痛点。
7.因此,急需一种能够在ate设备中多线程断点调试的方案来解决上述问题。


技术实现要素:

8.有鉴于此,本发明提出了一种ate设备中的多线程断点调试方法及系统,具体方案如下:
9.一种ate设备中的多线程断点调试方法,包括如下:
10.选择预设的第一调试工具,用户通过测试程序设置函数的断点;
11.通过预设ide实时监听所述测试程序中的执行动作,在所述测试程序设置断点时解析出断点信息,所述断点信息包括断点行号、函数名称以及文件名,下发携带有所述断点信息的断点命令给预设的调试工具库,所述调试工具库是将所述第一调试工具编译成库得到的;
12.所述调试工具库内部维护有断点列表,所述断点列表包括文件名、断点行号、断点状态以及函数名称,接收所述断点命令后根据所述断点信息在所述断点列表中添加断点事件,并将该断点事件的断点状态设置为允许状态;
13.运行所述测试程序,调用预设模拟前端中的函数;
14.若当前调用函数与某一处于允许状态下的断点事件所记载的函数相同,且已执行到该函数的断点行号位置,则执行断点,测试程序停止运行。
15.在一个具体实施例中,还包括:
16.执行断点后,将当前调用函数的函数信息发送至所述ide,所述函数信息包括函数名称和断点行号;
17.所述ide根据所述函数名称查找到该函数,结合所述断点行号查找到断点所在的代码行,对所述代码行进行高亮设置。
18.在一个具体实施例中,还包括:
19.在执行断点后,用户通过所述测试程序设置停止正在执行的断点;
20.所述ide监听到该执行动作后,解析出被停止断点的断点信息,下发携带有该断点信息的断点停止命令给所述调试工具库,并取消对代码行的高亮设置;
21.所述调试工具库根据所述断点停止命令解析出相应的断点事件;
22.在所述断点列表中查找该断点事件是否存在:
23.若不存在,则返回给所述ide该断点不存在的信息;
24.若存在,则将该断点事件的断点状态由允许状态修改为继续状态,当前调用函数继续向下执行,所述测试程序继续运行。
25.在一个具体实施例中,还包括:
26.用户通过所述测试程序设置删除断点;
27.所述ide监听到该执行动作后,解析出被删除断点的断点信息,并下发携带有该断点信息的断点删除命令给所述调试工具库;
28.所述调试工具库根据所述断点删除命令解析出相应的断点事件;
29.在所述断点列表中查找该断点事件是否存在:
30.若不存在,则返回给所述ide该断点不存在的信息;
31.若存在,则删除该断点事件,并返回给所述ide成功删除该断点的信息。
32.在一个具体实施例中,“接收所述断点命令后根据所述断点信息在所述断点列表中添加断点事件,并将该断点事件的断点状态设置为允许状态”具体包括:
33.所述调试工具库接收所述断点命令,并提取出相应的断点信息;
34.在所述断点列表中,查找该断点信息对应的断点事件是否存在:
35.若存在,则返回给所述ide该断点已存在的信息;
36.若不存在,则在所述断点列表中保存该断点信息,提取文件名、断点行号以及函数名称,构建断点事件,并将断点事件的断点状态设置为允许状态。
37.在一个具体实施例中,在预设模拟前端中,各个函数上设置有循环等待函数;
38.当执行所述循环等待函数时,则当前测试程序进入死循环状态,停止向下执行函数,以实现断点执行;
39.当暂停执行所述循环等待函数时,则跳出死循环状态,继续向下执行函数,以实现断点停止执行。
40.在一个具体实施例中,执行断点具体包括:
41.在断点列表存在断点事件的情况下,获取当前调用函数的调用栈信息,并从中解析出调用栈行号;
42.基于所述调用栈信息判断当前调用函数是否被所述测试程序所调用,若当前调用函数被所述测试程序所调用,则判断当前调用函数是否与所述断点列表中的函数名称一致:
43.若一致,则判断所述调用栈行号与断点列表中的断点行号是否匹配;若匹配,则断点触发,测试程序停止执行,反馈当前调用函数的信息给所述ide。
44.在一个具体实施例中,“获取当前调用函数的调用栈信息,并从中解析出调用栈行号”具体包括:
45.调用windows api获取当前调用函数的调用栈信息;
46.通过预设的格式转换工具将所述调用栈信息转换为pdb格式的文件,获取调用栈行号。
47.一种ate设备中的多线程断点调试系统,包括如下,
48.断点设置单元:用于选择预设的第一调试工具,并使用户通过测试程序设置函数的断点;
49.命令中转单元:用于通过预设ide实时监听所述测试程序中的执行动作,在所述测试程序设置断点时解析出断点信息,所述断点信息包括断点行号、函数名称以及文件名,下发携带有所述断点信息的断点命令给预设的调试工具库;
50.断点添加单元:设置有调试工具库,所述调试工具库是将所述第一调试工具编译成库得到的,且内部维护有断点列表,所述断点列表包括文件名、断点行号、断点状态以及函数名称;用于接收所述断点命令后根据所述断点信息在所述断点列表中添加断点事件,并将该断点事件的断点状态设置为允许状态;
51.程序执行单元:用于运行所述测试程序,调用预设模拟前端中的函数;
52.断点执行单元:若当前调用函数与某一处于允许状态下的断点事件所记载的函数相同,且已执行到该函数的断点行号位置,则执行断点,测试程序停止运行。
53.在一个具体实施例中,所述断点执行单元具体包括:
54.在所述断点列表存在断点事件的情况下,获取当前调用函数的调用栈信息,并从中解析出调用栈行号;
55.基于所述调用栈信息判断当前调用函数是否被所述测试程序所调用,若当前调用函数被所述测试程序所调用,则判断当前调用函数是否与所述断点列表中的函数名称一致:
56.若一致,则判断所述调用栈行号与断点列表中的断点行号是否匹配;若匹配,则断点触发,测试程序停止执行,反馈当前调用函数的信息给所述ide。
57.有益效果:本发明提出了一种ate设备中的多线程断点方法及系统,通过构建调试工具库,解决了ate设备中不能多线程异步调试的问题,实现了断点功能和多线程异步流程控制功能。结合ide,实现界面和底层之间的命令交互,还能实时监听用户的指令动作,准确解析出源文件中相应的断点信息并下发给调试工具库。在调试工具库中维护有一份断点列表,能够清除记录用户设置的断点,记录详细的信息实现断点精准匹配,使程序在断点的具体行位置准确停下,完成流程控制。函数调用栈的精准获取,确保测试程序只在断点行准确停止,而不是在所有调用该函数的地方都停止,从而影响其他调用该函数的程序段执行。在调试线程处于断点状态时,其它线程可正常运行,而不受断点影响,在测试程序断点停止后,测试人员可继续使用其他工具来进一步定位问题的原因。
附图说明
58.图1为本发明实施例的多线程断点调试方法流程示意图;
59.图2为本发明实施例的各部分之间的交互流程示意图;
60.图3为本发明实施例的控制程序继续运行的流程示意图;
61.图4为本发明实施例的删除断点流程示意图;
62.图5为本发明实施例的添加断点流程示意图;
63.图6为本发明实施例的执行断点的流程示意图;
64.图7为本发明实施例的多线程断点调试系统模块示意图。
65.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
66.附图标记:1-断点设置单元;2-命令中转单元;3-断点添加单元;4-程序执行单元;5-断点执行单元。
具体实施方式
67.在下文中,将更全面地描述本发明公开的各种实施例。本发明公开可具有各种实施例,并且可在其中做出调整和改变。然而,应理解:不存在将本发明公开的各种实施例限于在此公开的特定实施例的意图,而是应将本发明公开理解为涵盖落入本发明公开的各种实施例的精神和范围内的所有调整、等同物和/或可选方案。
68.在本发明公开的各种实施例中使用的术语仅用于描述特定实施例的目的并且并非意在限制本发明公开的各种实施例。如在此所使用,单数形式意在也包括复数形式,除非上下文清楚地另有指示。除非另有限定,否则在这里使用的所有术语(包括技术术语和科学术语)具有与本发明公开的各种实施例所属领域普通技术人员通常理解的含义相同的含
义。所述术语(诸如在一般使用的词典中限定的术语)将被解释为具有与在相关技术领域中的语境含义相同的含义并且将不被解释为具有理想化的含义或过于正式的含义,除非在本发明公开的各种实施例中被清楚地限定。
69.实施例1
70.本发明实施例1公开了一种ate设备中的多线程断点调试方法,通过创建全新的调试工具,结合ide,实现ate系统多线程异步调试。多线程断点调试方法流程框图说明书附图1所示,具体方案如下:
71.一种ate设备中的多线程断点调试方法,包括如下:
72.101、选择预设的第一调试工具,用户通过测试程序设置函数的断点;
73.102、通过预设ide实时监听测试程序中的执行动作,在测试程序设置断点时解析出断点信息,下发携带有断点信息的断点命令给预设的调试工具库;
74.103、调试工具库内部维护有断点列表,接收断点命令后根据断点信息在断点列表中添加断点事件,并将该断点事件的断点状态设置为允许状态;
75.104、运行测试程序,调用预设模拟前端中的函数;
76.105、若当前调用函数与某一处于允许状态下的断点事件所记载的函数相同,且已执行到该函数的断点行号位置,则执行断点,测试程序停止运行。
77.各部分之间的功能交互流程如说明书附图2所示。在说明书附图2中,atedebug即为本实施例的第一调试工具。用户发布的continue指令,即为继续执行测试程序,停止当前断点。根据continue指令,调试工具库会将该断点事件的断点状态设置为继续状态。
78.如说明书附图2所示,ide还能对处于断点处的代码行进行高亮设置。具体包括:执行断点后,将当前调用函数的函数信息发送至ide,函数信息包括函数名称和断点行号;ide根据函数名称查找到该函数,结合断点行号查找到断点所在的代码行,对代码行进行高亮设置。
79.当用户通过测试程序发布停止执行当前断点的指令,ide会取消对代码行的高亮设置,并发布断点停止命令给调试工具库。其中,控制程序继续运行的部分流程如说明书附图3所示。在说明书附图2中,停止执行当前断点的指令即为continue指令。具体包括:
80.在执行断点后,用户通过测试程序设置停止正在执行的断点;
81.ide监听到该执行动作后,解析出被停止断点的断点信息,下发携带有该断点信息的断点停止命令给调试工具库,并取消对代码行的高亮设置;
82.调试工具库根据断点停止命令解析出相应的断点事件;在断点列表中查找该断点事件是否存在:若不存在,则返回给ide该断点不存在的信息;若存在,则将该断点事件的断点状态由允许状态修改为继续状态,当前调用函数继续向下执行,测试程序继续运行。控制程序继续运行的流程如说明书附图3所示。
83.当用户通过测试程序发布删除断点的指令,ide会发布断点删除命令给调试工具库,流程如说明书附图所示。具体包括:
84.用户通过测试程序设置删除断点;ide监听到该执行动作后,解析出被删除断点的断点信息,并下发携带有该断点信息的断点删除命令给调试工具库;
85.调试工具库根据断点删除命令解析出相应的断点事件;在断点列表
86.中查找该断点事件是否存在:若不存在,则返回给ide该断点不存在的
87.信息;若存在,则删除该断点事件,并返回给ide成功删除该断点的信息。删除断点流程如说明书附图4所示。
88.本实施例创建了一种新的调试工具——atedebug,应用于ate系统,并将其作为第一调试工具,该工具支持断点功能和多线程异步流程控制。结合ide,支持界面和底层命令交互,使用效果与visual studio相似,方便用户操作。在ate系统程序中创建调试工具库,内部维护一个断点列表,调试工具库是由第一调试工具编译成库得到的,库中编译有多种调试方法,如添加断点、删除断点、继续运行等功能。当不使用第一调试工具,则只在相关函数的开始处加个整型值判断,对函数性能几乎没有影响。
89.特别地,针对第一调试工具,本实施例搭建了一个调试框架。实际运行中,测试程序运行时,会调用ate系统中模拟前端的各函数。本实施例在模拟前端各个函数的开始处设置有能够调用该调试工具的流程控制函数,形成调试框架。当进入调试模式,在断点状态为enable状态(允许状态)下,判断当前调用函数有断点且是执行到有断点行号时,才使断点生效,程序停止。当用户继续运行时,调试工具把断点状态设置为disable状态(禁用状态),使程序继续运行。非调试模式时,不会影响测试程序的运行。
90.第一调试工具在ate系统中的整体功能具体包括:
91.1)启动第一调试工具时,ide给调试工具库下发第一调试工具开始运行命令;
92.2)停止第一调试工具时,ide给调试工具库下发第一调试工具停止命令,测试程序停止调试;
93.3)用户在测试程序中设置断点时,ide给调试工具库下发断点命令。
94.4)测试程序在断点停住时,调试工具库会返回给ide带有断点函数名的相关函数信息,ide给对应的代码行高亮。
95.5)当测试程序断点停住时,用户通过测试程序发布continue,ide给调试工具库发送continue命令,使程序继续运行,取消代码行高亮。
96.6)用户取删除点时,ide给调试工具库下发删除断点的命令。
97.7)支持查看断点列表。
98.101、选择预设的第一调试工具,用户通过测试程序设置函数的断点。当选择本实施例提出的第一调试工具,才会进入相关的断点调试。用户在进行测试程序调试时,会通过测试程序发布相应的指令。
99.102、通过预设ide实时监听测试程序中的执行动作,在测试程序设置断点时解析出断点信息,下发携带有断点信息的断点命令给预设的调试工具库。在用户给某个文件的某一行函数添加断点时,ide监听用户打断点的事件,准确解析出源文件中相应的断点信息并下发给调试工具库。
100.本实施例通过ide来实时监听测试程序的执行动作,并从中识别出涉及断点的相关指令,解析出断点信息。ide作为一个中转环节,在用户和程序之间搭建沟通媒介。集成开发环境(ide,integrated development environment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。所有具备这一特性的软件或者软件套(组)都可以叫集成开发环境。该程序可以独立运行,也可以和其它程序并用。
101.ide解析的断点信息包括断点行号、函数名称以及文件名。函数一般是位于某个文
件中,因此文件名即为函数所在的文件的名称。断点行号即为断点在函数中的第几行。在进行断点添加、断点删除、断点停止、断点执行时,都需要用到断点信息,调试工具库根据断点信息才能执行相应的动作。
102.103、调试工具库内部维护有断点列表,接收断点命令后根据断点信息在断点列表中添加断点事件,并将该断点事件的断点状态设置为允许状态。
103.本实施例的调试工具库需要维护一份断点列表,来记录用户添加了多少断点。一个断点事件要记录的信息包括文件名、行号、函数名称(ate系统提供给测试芯片的函数)和断点状态。要记录足够的信息才能实现精准匹配,使断点行号处准确停下,完成流程控制。
104.步骤103具体包括:调试工具库接收断点命令,并提取出相应的断点信息;在断点列表中,查找该断点信息对应的断点事件是否存在:若存在,则返回给ide该断点已存在的信息;若不存在,则在断点列表中保存该断点信息,提取文件名、断点行号以及函数名称,构建断点事件,并将断点事件的断点状态设置为允许状态。添加断点的流程如说明书附图5所示。
105.优选地,在模拟前端中,各个函数上设置有循环等待函数;当执行循环等待函数时,则当前测试程序进入死循环状态,停止向下执行函数,以实现断点执行;当暂停执行循环等待函数时,则跳出死循环状态,继续向下执行函数,以实现断点停止执行。afe的各函数上添加了循环等待,监测断点状态,如果是该函数对应的断点状态是允许状态且满足其他断点条件,则循环等待,造成程序测试程序停止的现象。当用户取消断点,或continue时,跳出循环,函数向下执行,测试程序也向下执行。测试程序只在当前的线程挂起(死循环等待),其他线程还可以继续工作。
106.执行断点的流程示意图如说明书附图6所示。具体包括:
107.在断点列表存在断点事件的情况下,获取当前调用函数的调用栈信息,并从中解析出调用栈行号;
108.基于调用栈信息判断当前调用函数是否被测试程序所调用,若当前调用函数被测试程序所调用,则判断当前调用函数是否与断点列表中的函数名称一致:
109.若一致,则判断调用栈行号与断点列表中的断点行号是否匹配;若匹配,则断点触发,测试程序停止执行,反馈当前调用函数的信息给ide;
110.实时监测当前执行的断点是否被continue或被取消。
111.其中,函数调用栈主要用于判断测试程序是否调用该函数。函数调用栈的精准获取,确保测试程序只在断点行准确停止,而不是在所有调用该函数的地方都停止,从而影响其他调用该函数的程序段执行。具体包括:调用windows api获取当前调用函数的调用栈信息;通过预设的格式转换工具将调用栈信息转换为pdb格式的文件,获取调用栈行号。现有技术普遍采用mingw编译出函数调用栈的dll或exe格式,而无法正确解析出调用栈行号信息。优选地,本实施例通过cv2pdb工具把dll或exe格式的文件转换成pdb格式的文件,成功获取调用栈行号。
112.本实施例提出了一种ate设备中的多线程断点方法,通过构建调试工具库,解决了ate设备中不能多线程异步调试的问题,实现了断点功能和多线程异步流程控制功能。结合ide,实现界面和底层之间的命令交互,还能实时监听用户的指令动作,准确解析出源文件中相应的断点信息并下发给调试工具库。在调试工具库中维护有一份断点列表,能够清除
记录用户设置的断点,记录详细的信息实现断点精准匹配,使程序在断点的具体行位置准确停下,完成流程控制。函数调用栈的精准获取,确保测试程序只在断点行准确停止,而不是在所有调用该函数的地方都停止,从而影响其他调用该函数的程序段执行。在调试线程处于断点状态时,其它线程可正常运行,而不受断点影响,在测试程序断点停止后,测试人员可继续使用其他工具来进一步定位问题的原因。
113.实施例2
114.本发明实施例2公开了一种ate设备中的多线程断点调试系统,实施例1的一种ate设备中的多线程断点调试方法系统化,系统的具体结构如说明书附图7所示,具体方案如下:
115.一种ate设备中的多线程断点调试系统,包括如下,
116.断点设置单元1:用于选择预设的第一调试工具,并使用户通过测试程序设置函数的断点;
117.命令中转单元2:用于通过预设ide实时监听测试程序中的执行动作,在测试程序设置断点时解析出断点信息,断点信息包括断点行号、函数名称以及文件名,下发携带有断点信息的断点命令给预设的调试工具库;
118.断点添加单元3:设置有调试工具库,将第一调试工具编译成库得到调试工具库,且内部维护有断点列表,断点列表包括文件名、断点行号、断点状态以及函数名称;用于接收断点命令后根据断点信息在断点列表中添加断点事件,并将该断点事件的断点状态设置为允许状态;
119.程序执行单元4:用于运行测试程序,调用预设模拟前端中的函数;
120.断点执行单元5:若当前调用函数与某一处于允许状态下的断点事件所记载的函数相同,且已执行到该函数的断点行号位置,则执行断点,测试程序停止运行。
121.断点执行单元5具体包括:
122.在断点列表存在断点事件的情况下,获取当前调用函数的调用栈信息,并从中解析出调用栈行号;
123.基于调用栈信息判断当前调用函数是否被测试程序所调用,若当前调用函数被测试程序所调用,则判断当前调用函数是否与断点列表中的函数名称一致:
124.若一致,则判断调用栈行号与断点列表中的断点行号是否匹配;若匹配,则断点触发,测试程序停止执行,反馈当前调用函数的信息给ide。
125.本发明提出了一种ate设备中的多线程断点方法及系统,通过构建调试工具库,解决了ate设备中不能多线程异步调试的问题,实现了断点功能和多线程异步流程控制功能。结合ide,实现界面和底层之间的命令交互,还能实时监听用户的指令动作,准确解析出源文件中相应的断点信息并下发给调试工具库。在调试工具库中维护有一份断点列表,能够清除记录用户设置的断点,记录详细的信息实现断点精准匹配,使程序在断点的具体行位置准确停下,完成流程控制。函数调用栈的精准获取,确保测试程序只在断点行准确停止,而不是在所有调用该函数的地方都停止,从而影响其他调用该函数的程序段执行。在调试线程处于断点状态时,其它线程可正常运行,而不受断点影响,在测试程序断点停止后,测试人员可继续使用其他工具来进一步定位问题的原因。
126.本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或
流程并不一定是实施本发明所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。上述本发明序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献