CN105074671A - 用于在内核模块和设备驱动程序中检测并发编程错误的方法和*** - Google Patents
用于在内核模块和设备驱动程序中检测并发编程错误的方法和*** Download PDFInfo
- Publication number
- CN105074671A CN105074671A CN201380073923.3A CN201380073923A CN105074671A CN 105074671 A CN105074671 A CN 105074671A CN 201380073923 A CN201380073923 A CN 201380073923A CN 105074671 A CN105074671 A CN 105074671A
- Authority
- CN
- China
- Prior art keywords
- event
- context
- monitor
- thread
- player
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 29
- 238000004590 computer program Methods 0.000 claims abstract description 14
- 238000001514 detection method Methods 0.000 claims description 17
- 230000001360 synchronised effect Effects 0.000 claims description 6
- 230000009183 running Effects 0.000 abstract description 7
- 230000006870 function Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 8
- 230000007547 defect Effects 0.000 description 6
- 239000000523 sample Substances 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000007717 exclusion Effects 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000001737 promoting effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000010998 test method Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3632—Software debugging of specific synchronisation aspects
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
技术领域
实施例涉及软件。一些实施例涉及用于检测软件中的错误的方法。
背景技术
操作***是管理计算设备的资源且为计算机程序提供服务用以在内部操作的软件集合。存在许多现今在使用中的操作***。现今在使用中的常见操作***包括MicrosoftWindows?、OSX?、iOS?、开源(open-source)Linux?OS和Android?。应当理解,计算设备可以包括桌上型计算机、服务器、膝上型计算机、诸如电话和平板之类的便携式设备、游戏机、数字视频记录器、包含计算元件的其他设备等等。
设备驱动程序是在操作***内操作且用来操作或控制附连至计算机的设备的计算机程序。设备驱动程序与附连至计算机的设备通信。即使计算机程序不具体知道什么类型的外部设备,设备驱动程序也允许该程序与外部设备通信。例如,当计算机程序向打印机发出打印命令时,设备驱动程序处理信息至打印机可以理解的格式的转换。用户可以将来自不同制造商的不同打印机附连至计算机,但是程序仍然可以打印到不同的打印机,这是因为设备驱动程序处理至每个打印机的通信。许多不同的设备使用设备驱动程序,其包括打印机、视频适配器、网络适配器、声卡、存储设备、相机等等。
附图说明
在不一定按比例绘制的附图中,同样的附图标记在不同的视图中可以描述类似的部件。具有不同字母后缀的同样附图标记可以表示类似部件的不同实例。在附图的图中,一些实施例通过示例且非限制性地予以图示,其中:
图1是图示实施例的框图。
图2是图示样本代码的操作的部分次序图。
图3是图示在实施例中事件播放器的主线程的操作的流程图。
图4是图示在实施例中事件播放器内的代理线程(surrogatethread)的操作的流程图。
图5是图示示例机器的框图,其中本文所论述的技术(例如,方法论)中的任一个或更多个可以在所述示例机器上被执行。
具体实施方式
以下描述和附图充分地图示具体实施例用以使本领域技术人员能够实践所述具体实施例。其他实施例可以结合结构的、逻辑的、电气的过程以及其他改变。示例仅仅代表可能的变动。单独的部件和功能是可选的,除非明确要求,以及操作的顺序可以变化。一些实施例的部分和特征可以被包括在其他实施例的部分和特征中,或者代替它们。权利要求中阐述的实施例包括那些权利要求的所有可获得的等效物。
在以下详细描述中,阐述了众多具体细节以便提供对本发明的透彻理解。然而,本领域技术人员将理解的是,本发明可以在没有这些具体细节的情况下被实践。在其他实例中,没有详细地描述众所周知的方法、进程、部件和电路以便不使本发明难理解。
尽管在这方面不限制本发明的实施例,但是如本文所使用的术语“多数”和“多个”例如可以包括“多”或“两个或更多个”。可以贯穿整个说明书使用术语“多数”或“多个”来描述两个或更多个部件、设备、元件、单元、参数等等。例如,“多个站”可以包括两个或更多个站。
典型的计算机操作***将可用的存储器隔离成内核空间和用户空间。内核空间典型地用来运行操作***和设备驱动程序。用户空间是大多数其他应用(例如,音乐播放器、电影播放器、游戏、浏览器、商业软件等等)进行操作的地方。虽然与用户空间相比,对在内核空间中运行设备驱动程序存在性能优点,但是对在内核空间中运行设备驱动程序也存在缺点。可能包含用户空间中的错误或缺陷。使在用户空间中操作的一款软件崩溃的大多数缺陷仅使该特定程序崩溃——在用户空间中操作的其他程序不受影响。与此相反,在内核空间中正运行的设备驱动程序内的错误或缺陷可能在内核空间中引起问题,诸如重写内核空间存储器的重要区域。这样的问题可能引起整个操作***崩溃,这可能导致每个程序崩溃。这个的结果是在MicrosoftWindowsOS?中***的大约80%崩溃是由设备驱动程序中的缺陷引起的。类似地,Linux?中的设备驱动程序的缺陷率是内核的其余部分的缺陷率的大约7倍。
现在(以及可能将来)的操作***和计算机常常能够同时执行多条指令。这通常使用诸如多个处理器和/或多个线程之类的技术来完成。这些技术增加了计算机的性能,但是它们可能导致可能难以检测的错误。
可能难以检测的这样的错误的一个示例是竞争状况。当分开的过程或线程依赖于共享状态时出现竞争状况。当两个分开的线程尝试访问共享数据并且数据访问中的至少一个是写入时,这可能发生。
作为简单的示例,假定两个线程分别具有简单任务—使变量y递增1。假定,在线程发生之前y==1。在第一示例中,线程一在线程二之前执行。线程一读取变量y为1,使y递增到2,然后将变量y=2写入存储器。然后线程二执行。它从存储器读取变量y,发现值为2,把值递增至3,然后把变量y=3写入存储器。
在第二示例中,线程一和线程二并发地操作。线程一和线程二这两者读取y的值为1。两个线程于是使值y递增,然后将该值写入存储器。但是线程一和线程二这两者把y=2的值写入存储器。因此,如果线程一个接一个地执行,则与线程并发操作(在第二示例中y=2)时相比,结果可能不同(在第一示例中y=3)。虽然所有这样的错误难以检测,但是在设备驱动程序中它们甚至更难以再现和调试,这是因为设备驱动程序可能在内核空间中执行,其更难调试。
参照图1,呈现实施例可以如何被实施的框图。实施例可以在内核空间102和用户空间104内操作。实施例可以包含若干部件:事件监视器110(在内核空间102中)、事件收集器120(在用户空间104中)、事件播放器130(在用户空间104中)以及并发错误检测器140(在用户空间104中)。在实施例中,事件监视器110和事件收集器120可以运行在计算设备上,而事件播放器130和并发错误检测器140可以运行在开发主机上。在图1中还图示了插装式内核模块(instrumentedkernelmodule)或设备驱动程序150和***(trace)152。插装式设备驱动程序150是通过实施例测试的设备。***152用来从事件收集器120收集信息并且转发给事件播放器130。
事件监视器
事件监视器110是在目标设备上的内核空间内部运行的设备驱动程序。为了图示事件监视器如何工作以及正在监视什么事件,驱动程序上下文(context)的概念应当首先被论述。使用具有代码的示例来更好地解释驱动程序上下文的概念。
清单1是针对该论述的程序“testfoo.c”的示例清单。
/*testfoo.c
这是打开设备驱动程序/dev/foo
然后创建两个线程、即
write_foo线程和read_foo线程
并且在关闭文件之前等待所述
线程完成的主程序*/
清单1。
参考清单1,呈现了称为testfoo.c的程序的样本C代码。在清单1中,应用testfoo.c首先打开设备/dev/foo,然后创建两个子线程、即write_foo()和read_foo()。一个子线程(write_foo())用来向设备写入数据,以及另一个子线程(read_foo())用来从设备读取数据。一旦testfool.c完成了读取任务和写入任务,它就关闭该设备。清单1中的线程的使用示出了read_foo()和write_foo()能够并行操作。针对设备dev/foo的内核驱动程序可以具有open()、read()、write()和release()操作。
针对内核驱动程序的样本代码示例示出在清单2中。对在驱动程序代码中的foo_write()和foo_read()中的共享变量x的访问可以创建竞争状态,这在下面更详细地解释。
/*以下代码示例来自针对设备/dev/foo的内核驱动程序,
该代码可以由程序testfoo.c调用
*/
/*当进行open()***调用时,调用该函数*/
/*当进行read()***调用时调用该函数*/
/*当进行write()***调用时调用该函数*/
/*当进行close()***调用时调用该函数*/
/*当中断发生时调用该中断处理程序*/
清单2。
每个文件操作或处理程序可以视为上下文(context)。当操作或处理程序开始时,上下文开始,并且当操作或处理程序完成时,该上下文结束。例如,当调用foo_open()时,针于/dev/foo的驱动程序进入打开上下文,以及当foo_open()返回时,该驱动程序离开打开上下文。(见清单2)。类似地,当调用foo_interrupt()时,驱动程序进入中断上下文,以及当foo_interrupt()返回时,该驱动程序离开中断上下文。(见清单2)。
每个上下文均具有类型。在该示例中,上下文例如可以包括CONTEXT_OPEN、CONTEXT_RELEASE、CONTEXT_READ、CONTEXT_WRITE、CONTEXT_INTERRUPT等。每个上下文还具有标识符(“id”),其是用于文件操作的文件指针(例如,参数结构体文件(argumentstructfile)*file的值)或用于中断处理程序的中断号(例如,中断请求(irq))。
事件监视器110监视在所分析的目标设备上发生的各种事件。这些被监视的事件包括但不限于以下内容:上下文进入/退出(contextentry/exit);存储器读取/写入;存储器分配/解除分配(每(per-)中央处理单元(CPU)存储器和全局存储器);同步(线程创建/联合(join)、互斥_创建、互斥加锁/解锁、中断处理程序注册/撤销注册等);以及函数调用/返回。
为了监视这些事件,可以插装(instrumented)驱动程序代码(见图1的块150)。换言之,对于每个感兴趣的事件,在运行时间可以***和执行额外的代码以在内部缓冲器中记录感兴趣的事件。可以以各种各样不同的方式来执行插装。一般而言,在源级别,例如使用编译器,或者在二进制级别,例如使用内核探针,或者这二者的组合,来完成插装。
对于每个感兴趣的事件,可以由事件监视器110记录以下信息:事件类型、线程标识符(“id”)、CPUid和指令指针。对于上下文进入和退出事件,可以记录上下文类型(CONTEXT_OPEN、CONTEXT_RELEASE、CONTEXT_READ、CONTEXT_WRITE、CONTEXT_INTERRUPT等)和上下文id。对于存储器读取和写入事件,可以记录所访问的存储器的地址和所访问的存储器的大小。对于存储器分配/解除分配,可以记录存储器的地址、存储器的大小和存储器的类型(每CPU存储器或全局存储器)。对于同步事件,可以记录同步对象(例如,线程、互斥(mutex)、信号量等)的地址和同步的类型。对于函数调用/返回事件,可以记录函数进入点的地址和线程堆栈指针。
事件收集器
继续参考图1,事件收集器120读取从缓冲器移动到事件监视器110中的事件数据。事件数据可以存储在磁盘文件中以使事件播放器后来读取。在替代方案中,可以使事件数据直接流到事件播放器130。实质上,事件收集器120将事件数据从内核空间102移动到用户空间104。事件收集器120被布置成发送数据到事件***152。
事件播放器
事件播放器130重放来自事件***152的每个事件。然而,事件播放器130不重放驱动程序代码的执行。相反,事件播放器重放每个事件的出现以及按照遵从部分次序图的次序把每个事件发送到并发错误检测器140。
事件播放器130可以是多线程的。正执行的每个驱动程序线程在事件播放器130中具有至少一个对应线程(称为代理线程)。每个代理线程在事件播放器130中还具有事件队列。
为了图示事件播放器130的操作,可以检查较早地在清单1和2中呈现的针对/dev/foo的示例驱动程序的事件***。当该示例驱动程序操作时,进入以及退出以下上下文:
这些上下文的部分次序图在图2中示出。CONTEXT_OPEN事件210导致CONTEXT_WRITE事件220和CONTEXT_READ事件230。CONTEXT_WRITE事件220和CONTEXT_READ事件230导致CONTEXT_RELEASE事件240。
注意的是,在图2中CONTEXT_WRITE事件220和CONTEXT_READ事件230是并行地图示的。这不仅仅是因为在测试程序testfoo.c中对于read()调用和write()调用这二者同时创建线程并且保持激活。另外,在语义上,foo_read()和foo_write()函数可以并行地操作。例如,可以容易地构建两个单线程程序,其中一个程序打开、读取和关闭设备的一个文件,而另一个程序打开、写入和关闭具有相同设备驱动程序的相同设备的第二文件。这两个程序可以潜在地并行运行。
类似地,CONTEXT_OPEN事件210在CONTEXT_RELEASE事件240之前发生,这是因为可以被关闭的文件必须先前已经打开。然后,如果CONTEXT_OPEN210和CONTEXT_RELEASE240分别具有不同的上下文id(换言之,它们在不同的文件上进行操作),则它们可以无任何冲突地并行操作。换言之,第一文件上的foo_open()函数可以与第二文件上的foo_close()函数并行操作。这是为什么对于每个上下文需要上下文id。
每个类型的驱动程序定义该类型的驱动程序可以具有的一列文件操作。文件操作的语义典型地被良好定义——通常相对容易确定两个文件操作(具有相同文件指针或不同文件指针)究竟是否可以并行运行。因此,给定事件***,事件播放器可以在重放事件时构建部分次序上下文图。如果两个上下文并行运行,则事件播放器创建并行运行的两个代理线程,并且每个代理线程重放一个上下文。如果两个上下文不并行运行,则上下文按顺序被执行。
图3是图示在实施例中事件播放器的主线程的操作的流程图。检查事件以看该事件是否是上下文的进入(例如,CONTEXT_WRITE进入)(302)。如果事件不是上下文进入,则代理线程已经在运行。找到可应用的代理线程(350)以及把该事件放到代理线程的事件队列中(352)。
如果该事件是上下文进入,则确定对于该上下文是否已经存在代理线程(304)。如果代理线程存在,则找到正确的代理线程和相关联的id(308)以及在代理线程中对该事件排队列(320)。否则,创建代理线程并且保存相关信息(例如,驱动程序线程id和代理线程id)(310)以及为代理线程创建事件队列(312)。此后,基于部分次序上下文图排定代理线程运行(320)。
图4是图示在实施例中在事件播放器内的代理线程的操作的流程图。把该事件从队列移除(402)。此后,用代理线程id替代线程id(404)。此后,把事件发送给并发错误检测器(406),其操作在下面更详细地描述。
并发错误检测器
并发错误检测器140分析来自事件播放器中的每个代理线程的每个事件。从并发错误检测器140的角度看,事件从在用户空间102中运行的程序中获取,因而简化并发错误检测器140的操作。当前存在的工具或将来创建工具、诸如在线或离线线程检查器,可以被用作并发错误检测器。
实施例把在内核空间中存在的问题转换成在用户空间中存在的问题。实施例检测用户空间中的数据竞争,而不是通过使用内核调试器检测例如在内核空间中的数据竞争。使用内核调试器来调试数据竞争要求数据竞争实际发生。即使内核空间中的数据竞争未实际发生,实施例也检测用户空间中的数据竞争。
图5是图示本文所论述的技术(例如,方法论)中的任一个或更多个可以执行于其上的示例机器500的框图。在替代实施例中,机器500可以作为独立设备操作或者可以连接(例如,联网)到其他机器。在联网的部署中,机器500可以作为服务器机器、客户端机器或者这二者在服务器-客户端网络环境中操作。在示例中,机器500在对等(P2P)(或其他分布式)网络环境中可以充当对等机。机器500可以是个人计算机(PC)、平板PC、机顶盒(STB)、个人数字助理(PDA)、移动电话、网络装备(webappliance)、网络路由器、交换机或电桥、或者能够(顺序地或以其他方式)执行指定要由该机器采取的动作的指令的任何机器。此外,虽然只图示了单个机器,但是术语“机器”也应当被认为包括单独地或联合地执行指令集或(多个指令集)用以执行本文所论述的任何一个或更多个方法论的任何机器集合,诸如云计算、作为服务的软件(SaaS)、其他计算机集群配置。
如本文所描述的,示例可以包括逻辑或多个部件、模块或机制或者可以在逻辑或多个部件、模块或机制上操作。模块是能够执行指定操作的有形实体(例如,硬件)以及可以以一定的方式进行配置或布置。在示例中,电路可以以指定方式作为模块布置(例如,在内部或相对于外部实体,所述外部实体诸如其他电路)。在示例中,一个或更多个计算机***(例如,独立的客户端或服务器计算机***)或一个或更多个硬件处理器的整体或一部分可以由固件或软件(例如,指令、应用部分、或应用)作为操作用以执行指定操作的模块来配置。在示例中,软件可以驻留在机器可读媒介上。在示例中,软件当由模块的基础硬件执行时促使该硬件执行指定操作。
因此,术语“模块”被理解为包括有形实体,是在物理上被构建、特定地被配置(例如,被硬接线)或者临时(例如,暂时)被配置(例如,被编程)用以以指定方式操作或用以执行本文所描述的任何操作的一部分或全部的实体。考虑临时配置模块的示例,模块中的每一个都不需要在任何一个时刻及时被实例化。例如,在模块包括使用软件配置的通用硬件处理器的情况下,通用硬件处理器可以在不同时间被配置为相应的不同模块。软件因此可以配置硬件处理器,例如用以在一个时间阶段构成特定模块以及在不同的时间阶段构成不同的模块。
机器(例如,计算机***)500可以包括硬件处理器502(例如,中央处理单元(CPU)、图形处理单元(GPU)、硬件处理器核、或其任何组合)、主存储器504和静态存储器506,它们中的一些或全部可以经由相互链接508彼此通信。相互链接508可以是任何类型的通信路径,诸如点对点互连或多点分支总线或其组合。机器500可以进一步包括显示设备510、字母数字输入设备512(例如,键盘)、以及用户接口(UI)导航设备514(例如,鼠标或跟踪板)。在示例中,显示设备510、输入设备512和UI导航设备514可以是实现所有三个任务的触摸屏显示器。机器500另外可以包括大容量存储设备(例如,驱动单元)516、信号生成设备518(例如,扬声器)以及网络接口设备520。机器500可以包括输出控制器(未示出),诸如串行(例如,通用串行总线(USB))、并行或其他有线或无线(例如,红外(IR))连接,用来传送或控制一个或更多个***设备(例如,打印机、读卡器等等)。
大容量存储设备516可以包括机器可读媒介522,在其上存储有体现本文所描述的技术或功能中的任何一个或更多个或者被本文所描述的技术或功能中的任何一个或更多个利用的一组或更多组数据结构或指令524(例如,软件)。指令524在通过机器500对其执行期间还可以完全或者至少部分地驻留在主存储器504内、静态存储器506内、或硬件处理器502内。在示例中,硬件处理器502、主存储器504、静态存储器506、或大容量存储设备516中的一个或任何组合可以构成机器可读媒介。
虽然将机器可读媒介522图示为单个媒介,但是术语“机器可读媒介”可以包括被布置成存储一个或更多个指令524的单个媒介或多个媒介(例如,集中式或分布式数据库、和/或相关联的高速缓冲存储器和服务器)。
术语“机器可读媒介”可以包括能够存储、编码或承载指令用于由机器500执行或者促使机器500执行本公开的技术中的任何一个或更多个或者能够存储、编码或承载被这样的指令使用或与这样的指令相关联的数据结构的任何媒介。非限制性机器可读媒介示例可以包括固态存储器和光学及磁性媒介。在示例中,大规模机器可读媒介包括带有具有静止质量(restingmass)的多个粒子的机器可读媒介。大规模机器可读媒介的具体示例可以包括:非易失性存储器,诸如半导体存储装置(例如,电可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM))和闪速存储装置;磁盘,诸如内置硬盘和可移动盘;磁光盘;以及CD-ROM、DVD-ROM和蓝光光盘。
指令524可以进一步使用传输媒介经由利用多个传送协议(例如,帧中继、因特网协议(IP)、传输控制协议(TCP)、用户数据报协议(UDP)、超文本传送协议(HTTP)等)中的任何一个的网络接口设备520通过通信网络526被发送或接收。示例通信网络可以尤其包括局域网(LAN)、广域网(WAN)、分组数据网(例如,因特网)、移动电话网(例如,蜂窝式网络)、普通老式电话(PlainOldTelephone,POTS)网和无线数据网(例如,已知为Wi-Fi?的电气与电子工程师协会(IEEE)802.11标准族、已知为WiMAX?的IEEE802.16标准族)、对等(P2P)网络。在示例中,网络接口设备520可以包括一个或更多个物理插孔(例如,以太网、同轴或电话插孔)或一个或更多个天线,用来连接到通信网络526。在示例中,网络接口设备520可以包括多个天线,用来使用单输入多输出(SIMO)、多输入多输出(MIMO)或多输入单输出(MISO)技术中的至少一个无线地通信。术语“传输媒介”应被认为包括能够存储、编码或承载指令用于由机器500执行并且包括数字或模拟通信信号的任何无形媒介,或用来促进这样的软件的通信的其他无形媒介。
以下示例涉及另外的实施例。
示例1包括用于调试计算机软件的主题(诸如设备,装置,或用户设备(UE)),其包括:事件监视器;事件收集器,其耦合到所述事件监视器;事件播放器,其耦合到所述事件收集器;以及并发错误检测器,其耦合到所述事件播放器;其中被调试的计算机软件包括多个事件;所述事件监视器被布置成在***存储器的内核空间部分中执行被调试的计算机软件;所述事件收集器、所述事件播放器和所述并发错误检测器分别被布置成在***存储器的用户空间部分中执行;以及所述事件播放器被布置成在***存储器的所述用户空间部分中重放所述多个事件中的每一个。
在示例2中,示例1的主题可以可选地包括:其中所述***被布置成对设备驱动程序软件进行调试。
在示例3中,示例1和2中的任一个或这二者的主题可以可选地包括:其中所述被调试的计算机软件***装。
在示例4中,示例1至3中的任一个或更多个的主题可以可选地包括:其中所述事件监视器被布置成记录事件类型、线程标识符、CPU标识符、以及指令指针信息。
在示例5中,示例1至4中的任一个或更多个的主题可以可选地包括:其中所述事件监视器进一步被布置成记录上下文进入事件、上下文退出事件、上下文类型、以及与所述上下文进入事件和上下文退出事件有关的上下文标识符信息。
在示例6中,示例1至5中的任一个或更多个的主题可以可选地包括:其中所述事件监视器进一步被布置成记录用于存储器读取和存储器写入事件的存储器地址信息和存储器大小信息;以及所述事件监视器进一步被布置成记录用于存储器分配和存储器解除分配事件的存储器地址信息、存储器大小信息和存储器类型信息。
在示例7中,示例1至6中的任一个或更多个的主题可以可选地包括:其中所述事件监视器进一步被布置成记录用于同步事件的同步对象地址和同步类型。
在示例8中,示例1至7中的任一个或更多个的主题可以可选地包括:其中所述事件收集器被布置成从所述事件监视器读取事件数据。
在示例9中,示例1至8中的任一个或更多个的主题可以可选地包括:其中所述事件收集器进一步被布置成可从***存储器的所述用户空间读取。
在示例10中,示例1至9中的任一个或更多个的主题可以可选地包括:其中所述事件播放器被布置成从所述事件收集器读取事件。
在示例11中,示例1至10中的任一个或更多个的主题可以可选地包括:其中所述事件播放器进一步被布置成:创建所述事件收集器中的事件的部分次序图;确定事件是否是上下文进入事件;如果所述事件是上下文进入事件,则创建代理线程和用于所述代理线程的事件队列;以及基于所述部分次序图对所述代理线程的执行进行排定。
在示例12中,示例1至11中的任一个或更多个的主题可以可选地包括:其中创建部分次序图包括确定来自所述事件收集器的事件是否能够被并行执行。
在示例13中,示例1至12中的任一个或更多个的主题可以可选地包括:其中所述并发错误检测器被布置成分析来自事件播放器中的代理线程的每个事件。
示例14可以包括或可以可选地与示例1-13中的任何一个的主题相组合以包括主题(诸如用于执行动作的方法、装置,包括当由机器执行时促使机器执行动作的指令的机器可读媒介,或者被配置用以执行的装置),用于调试计算机程序代码,其包括插装所述计算机程序代码,其中所述计算机程序代码包括多个事件;在***存储器的内核空间中执行所述程序代码;在执行所述计算机程序代码期间监视每个事件;记录关于每个事件的数据;在***存储器的用户空间中读取关于每个事件的数据;在***存储器的所述用户空间中重放每个事件;以及在***存储器的所述用户空间中分析每个事件。
在示例15中,示例14的主题可以可选地包括:其中监视每个事件包括记录事件类型、线程标识符、CPU标识符、以及指令指针信息。
在示例16中,示例14和15中的任一个或这二者的主题可以可选地包括:其中监视每个事件进一步包括:记录上下文进入事件、上下文退出事件、上下文类型、以及与所述上下文进入事件和上下文退出事件有关的上下文标识符信息;记录用于存储器读取和存储器写入事件的存储器地址信息和存储器大小信息;记录用于存储器分配和存储器解除分配事件的存储器地址信息、存储器大小信息和存储器类型信息;记录用于同步事件的同步对象地址和同步类型。
在示例17中,示例14至16中的任一个或更多个的主题可以可选地包括:其中重放***存储器的所述用户空间中的每个事件包括:创建所述多个事件的部分次序图;确定所述多个事件中的事件是否是上下文进入事件;如果事件是上下文进入事件,则创建代理线程和用于所述代理线程的事件队列;以及基于所述部分次序图对所述代理线程的执行进行排定。
在示例18中,示例14至17中的任一个或更多个的主题可以可选地包括:其中创建部分次序图包括确定所述多个事件中的哪些事件能够被并行执行。
在示例19中,示例14至18中的任一个或更多个的主题可以可选地包括:为能够并行执行的每个事件创建代理线程。
上面的详细描述包括对形成该详细描述的一部分的附图的参考。附图通过图解的方式示出了可以被实践的具体实施例。这些实施例在本文也称为“示例”。这样的示例可以包括除了所示出或所描述的那些之外的元素。然而,还预期到的是包括所示出的或所描述的元素的示例。此外,还预期到的是相对于特定示例(或其一个或更多个方面))或者相对于本文所示出的或所描述的其他示例(或其一个或更多个方面)使用所示出的或所描述的那些元素(或其一个或更多个方面)的任何组合或置换的示例。
在该文档中所提到的出版物、专利和专利文档通过引用以其整体合并于此,好像通过引用单独合并。在该文档与那些通过引用如此合并的文档之间的不一致的用途情况下,在所合并的(多个)参考文献中的用途是对该文档的用途的补充;对于不可调和的不一致性,在该文档中的用途进行控制。
在该文档中,独立于任何其他实例或“至少一个”或“一个或更多个”的使用,如在专利文档中常见的,使用术语“一”或“一个”用来包括一个或一个以上。在该文档中,术语“或”用来指的是非排他性或,因此“A或B”包括“A而非B”、“B而非A”以及“A和B”,除非另外指示。在所附权利要求中,术语“包括”和“其中”用作相应术语“包含”和“其中”的简明英语等效物。同样,在以下权利要求中,术语“包括”和“包含”是开放式的,也就是说,包括除了在权利要求中这样的术语之后列出的那些之外的元素的***、设备、物品或过程仍被视为落入该权利要求的范围之内。而且,在以下权利要求中,术语“第一”、“第二”和“第三”等仅仅用作标号,并且不意图暗示用于其对象的数字次序。
上面的描述意图是说明性的,而非限制性的。例如,上面描述的示例(或其一个或更多个方面)可以与其他组合地使用。在检阅上面的描述时,诸如由本领域普通技术人员可以使用其他实施例。摘要允许读者快速地探知技术公开的性质,例如用以遵从美国的37C.F.R.§1.72(b)。在摘要将不用来解释或限制权利要求的含义或范围的理解的情况下提交该摘要。同样,在上面的详细描述中,可以将各个特征聚集以使本公开流线型。然而,权利要求可能未阐述本文所公开的每个特征,因为实施例可以以所述特征的子集为特征。此外,实施例可以包括与特定示例中所公开的那些相比更少的特征。因而,以下权利要求特此合并到详细描述中,其中权利要求作为单独的实施例而独立存在。本文所公开的实施例的范围要参考所附权利要求连同这样的权利要求被授权于的等效物的全部范围来确定。
虽然本文已经图示和描述了本发明的某些特征,但是对于本领域技术人员而言可以想到许多修改、替代、改变和等效物。因此应当理解的是,所附权利要求意图涵盖落入本发明范围内的所有这样的修改和改变。尽管已经论述了使用实施例来调试设备驱动程序软件,但是应当理解的是,实施例可以被用来调试任何类型的软件程序。
Claims (21)
1.一种用于调试计算机软件的***,包括:
事件监视器;
事件收集器,其耦合到所述事件监视器;
事件播放器,其耦合到所述事件收集器;以及
并发错误检测器,其耦合到所述事件播放器;其中被调试的计算机软件包括多个事件;所述事件监视器被布置成在***存储器的内核空间部分中执行被调试的计算机软件;所述事件收集器、所述事件播放器和所述并发错误检测器分别被布置成在***存储器的用户空间部分中执行;以及所述事件播放器被布置成在***存储器的所述用户空间部分中重放所述多个事件中的每一个。
2.如权利要求1所述的***,其中,所述***被布置成对设备驱动程序软件进行调试。
3.如权利要求1所述的***,其中,所述被调试的计算机软件***装。
4.如权利要求1所述的***,其中:
所述事件监视器被布置成记录事件类型、线程标识符、CPU标识符、以及指令指针信息。
5.如权利要求4所述的***,其中:
所述事件监视器进一步被布置成记录上下文进入事件、上下文退出事件、上下文类型、以及与所述上下文进入事件和上下文退出事件有关的上下文标识符信息。
6.如权利要求4或5之一所述的***,其中:
所述事件监视器进一步被布置成记录用于存储器读取和存储器写入事件的存储器地址信息和存储器大小信息;以及
所述事件监视器进一步被布置成记录用于存储器分配和存储器解除分配事件的存储器地址信息、存储器大小信息和存储器类型信息。
7.如权利要求4或5之一所述的***,其中:
所述事件监视器进一步被布置成记录用于同步事件的同步对象地址和同步类型。
8.如权利要求1所述的***,其中,所述事件收集器被布置成从所述事件监视器读取事件数据。
9.如权利要求8所述的***,其中,所述事件收集器进一步被布置成可从***存储器的所述用户空间读取。
10.如权利要求8或9之一所述的***,其中,所述事件播放器被布置成从所述事件收集器读取事件。
11.如权利要求10所述的***,其中,所述事件播放器进一步被布置成:
创建所述事件收集器中的事件的部分次序图;
确定事件是否是上下文进入事件;
如果所述事件是上下文进入事件,则创建代理线程和用于所述代理线程的事件队列;以及
基于所述部分次序图对所述代理线程的执行进行排定。
12.如权利要求11所述的***,其中,创建部分次序图包括确定来自所述事件收集器的事件是否能够被并行执行。
13.如权利要求1所述的***,其中,所述并发错误检测器被布置成分析来自事件播放器中的代理线程的每个事件。
14.如权利要求1所述的***,进一步包括:
第一处理器,其被布置成执行所述事件监视器;
第二处理器,其被布置成执行所述事件收集器;
第三处理器,其被布置成执行所述事件播放器;和
第四处理器,其被布置成执行所述并发错误检测器。
15.一种调试计算机程序代码的方法,包括:
在***存储器的内核空间中执行***装的程序代码,其中***装的计算机程序代码包括多个事件;
在执行所述计算机程序代码期间监视每个事件;
记录关于每个事件的数据;
在***存储器的用户空间中读取关于每个事件的数据;
在***存储器的所述用户空间中重放每个事件;以及
在***存储器的所述用户空间中分析每个事件。
16.如权利要求15所述的方法,其中,监视每个事件包括记录事件类型、线程标识符、CPU标识符、以及指令指针信息。
17.如权利要求16所述的方法,其中,监视每个事件进一步包括:
记录上下文进入事件、上下文退出事件、上下文类型、以及与所述上下文进入事件和上下文退出事件有关的上下文标识符信息;
记录用于存储器读取和存储器写入事件的存储器地址信息和存储器大小信息;
记录用于存储器分配和存储器解除分配事件的存储器地址信息、存储器大小信息以及存储器类型信息;
记录用于同步事件的同步对象地址和同步类型。
18.如权利要求15所述的方法,其中,在***存储器的所述用户空间中重放每个事件包括:
创建所述多个事件的部分次序图;
确定所述多个事件中的事件是否是上下文进入事件;
如果所述事件是上下文进入事件,则创建代理线程和用于所述代理线程的事件队列;以及
基于所述部分次序图对所述代理线程的执行进行排定。
19.如权利要求18所述的方法,其中,创建部分次序图包括确定所述多个事件中的哪些事件能够被并行执行。
20.如权利要求19所述的方法,进一步包括:
为能够被并行执行的每个事件创建代理线程。
21.一种包括用于调试计算机程序代码的指令的机器可读媒介,所述计算机程序代码当由计算设备执行时促使所述计算设备执行权利要求15、16、17、18、19或20之一所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2013/034131 WO2014158151A1 (en) | 2013-03-27 | 2013-03-27 | Method and system for detecting concurrency programming errors in kernel modules and device drivers |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105074671A true CN105074671A (zh) | 2015-11-18 |
CN105074671B CN105074671B (zh) | 2018-04-20 |
Family
ID=51624936
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380073923.3A Active CN105074671B (zh) | 2013-03-27 | 2013-03-27 | 用于在内核模块和设备驱动程序中检测并发编程错误的方法和*** |
Country Status (4)
Country | Link |
---|---|
US (1) | US9235497B2 (zh) |
EP (1) | EP2956861B1 (zh) |
CN (1) | CN105074671B (zh) |
WO (1) | WO2014158151A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108229161A (zh) * | 2016-12-15 | 2018-06-29 | 中国电信股份有限公司 | 应用监控方法、装置和终端 |
CN111381980A (zh) * | 2020-02-12 | 2020-07-07 | 上海机电工程研究所 | 用于混合仿真的互联***、方法 |
CN112306819A (zh) * | 2020-11-24 | 2021-02-02 | 微医云(杭州)控股有限公司 | 异常事件的回放方法、装置、电子设备以及存储介质 |
CN113051166A (zh) * | 2021-03-30 | 2021-06-29 | 上海商汤科技开发有限公司 | ***追踪方法、装置、设备及存储介质 |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105074671B (zh) * | 2013-03-27 | 2018-04-20 | 英特尔公司 | 用于在内核模块和设备驱动程序中检测并发编程错误的方法和*** |
US9678851B2 (en) * | 2013-10-14 | 2017-06-13 | International Business Machines Corporation | Continuous monitoring and analysis of software events |
CN105045711B (zh) * | 2015-06-30 | 2018-04-06 | 北京嘀嘀无限科技发展有限公司 | 一种并发的模拟测试方法及装置 |
US10423330B2 (en) * | 2015-07-29 | 2019-09-24 | International Business Machines Corporation | Data collection in a multi-threaded processor |
CN105224454B (zh) | 2015-09-25 | 2018-06-05 | 华为技术有限公司 | 一种调试方法、多核处理器和调试设备 |
US9747191B1 (en) * | 2015-10-05 | 2017-08-29 | Amazon Technologies, Inc. | Tool to replicate actions across devices in real time for improved efficiency during manual application testing |
CN106598844B (zh) * | 2016-11-17 | 2020-07-31 | 南京博雅区块链研究院有限公司 | 移动终端及基于移动终端代码缺陷率的计算方法 |
US10452459B2 (en) | 2016-12-09 | 2019-10-22 | Microsoft Technology Licensing, Llc | Device driver telemetry |
US10467082B2 (en) | 2016-12-09 | 2019-11-05 | Microsoft Technology Licensing, Llc | Device driver verification |
US10198341B2 (en) | 2016-12-21 | 2019-02-05 | Microsoft Technology Licensing, Llc | Parallel replay of executable code |
US10261925B2 (en) | 2017-06-23 | 2019-04-16 | Microsoft Technology Licensing, Llc | Enhanced techniques for detecting programming errors in device drivers |
US10860411B2 (en) * | 2018-03-28 | 2020-12-08 | Futurewei Technologies, Inc. | Automatically detecting time-of-fault bugs in cloud systems |
US10599552B2 (en) | 2018-04-25 | 2020-03-24 | Futurewei Technologies, Inc. | Model checker for finding distributed concurrency bugs |
CN116107846B (zh) * | 2023-04-12 | 2023-07-25 | 北京长亭未来科技有限公司 | 一种基于EBPF的Linux***事件监控方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060271932A1 (en) * | 2005-05-13 | 2006-11-30 | Chinya Gautham N | Transparent support for operating system services for a sequestered sequencer |
US20060282839A1 (en) * | 2005-06-13 | 2006-12-14 | Hankins Richard A | Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers |
US20080052696A1 (en) * | 2006-08-07 | 2008-02-28 | International Business Machines Corporation | Maintainable Dynamic Instrumentation Technique For Changing Versions Of Software |
CN101251792A (zh) * | 2006-12-19 | 2008-08-27 | 英特尔公司 | 用于受应用管理的线程单元的结构化异常处理 |
US20090007075A1 (en) * | 2000-07-06 | 2009-01-01 | International Business Machines Corporation | Method and System for Tracing Profiling Information Using Per Thread Metric Variables with Reused Kernel Threads |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7028229B2 (en) | 2002-09-30 | 2006-04-11 | Sun Microsystems, Inc. | Kernel event subscription and publication system and method |
WO2005089400A2 (en) * | 2004-03-17 | 2005-09-29 | Riverstone Networks, Inc. | Managing process state information in an operating system environment |
CN100504792C (zh) * | 2006-10-06 | 2009-06-24 | 国际商业机器公司 | 在用户空间中进行***调用截取的方法和*** |
JP5286942B2 (ja) * | 2008-05-30 | 2013-09-11 | 富士通株式会社 | 制御方法、制御プログラム及び情報処理装置 |
KR20100078081A (ko) | 2008-12-30 | 2010-07-08 | (주) 세인트 시큐리티 | 커널 기반 시스템 행위 분석을 통한 알려지지 않은 악성코드 탐지 시스템 및 방법 |
US8402318B2 (en) * | 2009-03-24 | 2013-03-19 | The Trustees Of Columbia University In The City Of New York | Systems and methods for recording and replaying application execution |
US20130159977A1 (en) * | 2011-12-14 | 2013-06-20 | Microsoft Corporation | Open kernel trace aggregation |
CN105074671B (zh) * | 2013-03-27 | 2018-04-20 | 英特尔公司 | 用于在内核模块和设备驱动程序中检测并发编程错误的方法和*** |
-
2013
- 2013-03-27 CN CN201380073923.3A patent/CN105074671B/zh active Active
- 2013-03-27 US US13/995,380 patent/US9235497B2/en not_active Expired - Fee Related
- 2013-03-27 WO PCT/US2013/034131 patent/WO2014158151A1/en active Application Filing
- 2013-03-27 EP EP13879846.7A patent/EP2956861B1/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090007075A1 (en) * | 2000-07-06 | 2009-01-01 | International Business Machines Corporation | Method and System for Tracing Profiling Information Using Per Thread Metric Variables with Reused Kernel Threads |
US20060271932A1 (en) * | 2005-05-13 | 2006-11-30 | Chinya Gautham N | Transparent support for operating system services for a sequestered sequencer |
US20060282839A1 (en) * | 2005-06-13 | 2006-12-14 | Hankins Richard A | Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers |
US20080052696A1 (en) * | 2006-08-07 | 2008-02-28 | International Business Machines Corporation | Maintainable Dynamic Instrumentation Technique For Changing Versions Of Software |
CN101251792A (zh) * | 2006-12-19 | 2008-08-27 | 英特尔公司 | 用于受应用管理的线程单元的结构化异常处理 |
Non-Patent Citations (1)
Title |
---|
EKATERINA ITSKOVA: "《http://www.imperial.ac.uk/pls/portallive/docs/1/18619711.PDF》", 14 June 2006 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108229161A (zh) * | 2016-12-15 | 2018-06-29 | 中国电信股份有限公司 | 应用监控方法、装置和终端 |
CN111381980A (zh) * | 2020-02-12 | 2020-07-07 | 上海机电工程研究所 | 用于混合仿真的互联***、方法 |
CN111381980B (zh) * | 2020-02-12 | 2023-04-07 | 上海机电工程研究所 | 用于混合仿真的互联***、方法 |
CN112306819A (zh) * | 2020-11-24 | 2021-02-02 | 微医云(杭州)控股有限公司 | 异常事件的回放方法、装置、电子设备以及存储介质 |
CN112306819B (zh) * | 2020-11-24 | 2022-07-12 | 微医云(杭州)控股有限公司 | 异常事件的回放方法、装置、电子设备以及存储介质 |
CN113051166A (zh) * | 2021-03-30 | 2021-06-29 | 上海商汤科技开发有限公司 | ***追踪方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2014158151A1 (en) | 2014-10-02 |
US20140331211A1 (en) | 2014-11-06 |
EP2956861A1 (en) | 2015-12-23 |
EP2956861A4 (en) | 2016-10-12 |
CN105074671B (zh) | 2018-04-20 |
US9235497B2 (en) | 2016-01-12 |
EP2956861B1 (en) | 2019-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105074671A (zh) | 用于在内核模块和设备驱动程序中检测并发编程错误的方法和*** | |
US11934301B2 (en) | System and method for automated software testing | |
US20240037020A1 (en) | System and Method for Automated Software Testing | |
US10503632B1 (en) | Impact analysis for software testing | |
US9098364B2 (en) | Migration services for systems | |
TWI566090B (zh) | Debugging firmware / software to produce tracking systems and methods, recording media and computer program products | |
CN103365773A (zh) | 自动测试的***和方法 | |
CN111756575A (zh) | 存储服务器的性能分析方法及装置、电子设备 | |
CN105224459A (zh) | 一种linux平台下测试bmc通过oem命令读写bios配置功能的方法 | |
US10366226B2 (en) | Malicious code analysis device and method based on external device connected via USB cable | |
US20140173564A1 (en) | Test scope determination based on code change(s) | |
US20170351509A1 (en) | Prototype management system | |
CN106030532A (zh) | 用于事务存储器程序的软件回放器 | |
US9325576B2 (en) | Dynamic server to server configuration and initialization | |
CN105453033A (zh) | 程序测试服务 | |
EP3262519A1 (en) | Configuration of a memory controller for copy-on-write | |
US20150135015A1 (en) | Cloud auto-test system, method and non-transitory computer readable storage medium of the same | |
CN105027089B (zh) | 内核功能性检查器 | |
US9990274B2 (en) | Testing integrated business systems | |
US20130006568A1 (en) | Test Operation | |
CN106227839A (zh) | 一种lustre文件***的扩容方法及装置 | |
US20220343206A1 (en) | System and method for assigning performance defects to software processing components | |
Sironi et al. | Capturing information flows inside android and qemu environments | |
Sultania | Monitoring and Failure Recovery of Cloud-Managed Digital Signage | |
Jeong et al. | PHI: Pseudo-HAL Identification for Scalable Firmware Fuzzing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |