CN107656861B - 硬件抽象层调试方法和装置 - Google Patents
硬件抽象层调试方法和装置 Download PDFInfo
- Publication number
- CN107656861B CN107656861B CN201610597474.8A CN201610597474A CN107656861B CN 107656861 B CN107656861 B CN 107656861B CN 201610597474 A CN201610597474 A CN 201610597474A CN 107656861 B CN107656861 B CN 107656861B
- Authority
- CN
- China
- Prior art keywords
- field
- target field
- variable
- initial value
- structure variable
- 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.)
- Active
Links
Images
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/366—Software debugging 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
本发明提供一种硬件抽象层调试方法和装置,其中,该方法包括:获取HAL的资源信息,该资源信息包括至少一个结构体变量,每个结构体变量包括至少一个字段,对该资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,该目标字段是在进程生命周期内不会发生变化的不变字段,判断每个目标字段的实际值与该目标字段的初始值是否一致,在目标字段的实际值与初始值不一致时,打印出目标字段对应的日志信息以用于定位该资源信息中的出错位置。本发明的技术方案,不仅获取到HAL信息全面,而且节省了开发人员调试分析Android系统中内核与HAL兼容性问题的时间,HAL的调试效率高。
Description
技术领域
本发明涉及操作系统技术领域,尤其涉及一种硬件抽象层调试方法和装置。
背景技术
硬件抽象层(Hardware Abstraction Layer,简称,HAL)是位于内核和安卓(Android)系统之间的接口层,它隐藏了硬件平台的细节,为Android系统提供虚拟的硬件平台,Android系统可通过HAL提供的接口与内核进行交互。但是,内核与HAL之间存在兼容性问题,Android系统在使用HAL数据的过程中,可能出现资源出错的问题,而若Android系统对错误的资源进行操作,则会致使Android系统不稳定,因此,如何调试HAL以提高Android系统稳定性是亟待解决的问题。
目前,现有HAL调试方法主要利用Android系统提供的日志输出工具,对日志输出工具输出的日志进行分析来实现。具体的,通过分析日志输出工具输出的日志来获取异常传输资源在日志中的位置信息,通过在该位置信息处添加打印信息,以打印出异常传输资源对应的日志信息,以使开发人员根据打印出的日志信息分析Android系统中内核与HAL的兼容性问题,进而确定出HAL可能存在的问题。
然而,上述通过分析日志输出工具输出日志的HAL调试方法,只能确定传输资源的可能出错位置,无法定位传输资源的内部错误,致使该方法获取到的HAL信息不全面,调试效率低。
发明内容
本发明提供一种硬件抽象层调试方法和装置,用于解决现有HAL调试方法因获取到的HAL信息不全面导致调试效率低的问题。
第一方面,本发明提供一种硬件抽象层调试方法,包括:
获取HAL的资源信息,所述资源信息包括至少一个结构体变量,每个结构体变量包括至少一个字段;
对所述资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,所述目标字段是在进程生命周期内不会发生变化的不变字段;
判断每个所述目标字段的实际值与所述目标字段的初始值是否一致;
在所述目标字段的实际值与所述目标字段的初始值不一致时,打印出所述目标字段对应的日志信息,所述日志信息用于定位所述资源信息中的出错位置。
可选的,在本发明的一实施例中,所述方法还包括:
根据结构体变量中不变字段以及每个不变字段的初始值,建立映射关系。
可选的,在本发明的另一实施例中,所述对所述资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,具体包括:
对于每个结构体变量,获取所述结构体变量包括的至少一个字段;
依次判断所述结构体变量中的每个字段是否与所述映射关系中的不变字段相对应;
在所述结构体变量中的字段与所述映射关系中的不变字段相对应时,确定所述字段为所述结构体变量的目标字段。
可选的,在本发明的再一实施例中,所述判断每个所述目标字段的实际值与所述目标字段的初始值是否一致,具体包括:
通过对每个结构体变量中的目标字段进行解析,获取每个结构体变量中每个目标字段的实际值;
根据所述映射关系,读取每个结构体变量中每个目标字段对应的初始值;
分别将每个目标字段的实际值与所述目标字段的初始值进行对比,判断所述目标字段的实际值与初始值是否一致。
可选的,在本发明的上述任一实施例中,所述目标字段,包括:进程编号PID和句柄。
第二方面,本发明提供了一种硬件抽象层调试装置,包括:
获取模块,用于获取HAL的资源信息,所述资源信息包括至少一个结构体变量,每个结构体变量包括至少一个字段;
确定模块,用于对所述获取模块获取到的所述资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,所述目标字段是在进程生命周期内不会发生变化的不变字段;
判断模块,用于判断所述确定模块确定的每个所述目标字段的实际值与所述目标字段的初始值是否一致;
处理模块,用于在所述判断模块判断出所述目标字段的实际值与所述目标字段的初始值不一致时,打印出所述目标字段对应的日志信息,所述日志信息用于定位所述资源信息中的出错位置。
可选的,在本发明的一实施例中,所述装置还包括:映射关系建立模块;
所述映射关系建立模块,用于根据结构体变量中不变字段以及每个不变字段的初始值,建立映射关系。
可选的,在本发明的另一实施例中,所述确定模块,包括:字段获取单元、字段判断单元和目标字段确定单元;
所述字段获取单元,用于获取每个结构体变量包括的至少一个字段;
所述字段判断单元,用于依次判断所述字段获取单元获取到的结构体变量中的每个字段是否与所述映射关系中的不变字段相对应;
所述目标字段确定单元,用于在所述字段判断单元判断出所述结构体变量中的字段与所述映射关系中的不变字段相对应时,确定所述字段为所述结构体变量的目标字段。
可选的,在本发明的再一实施例中,所述判断模块,包括:实际值获取单元、初始值读取单元和数值判断单元;
所述实际值获取单元,用于通过对每个结构体变量中的目标字段进行解析,获取每个结构体变量中每个目标字段的实际值;
所述初始值读取单元,用于根据所述映射关系,读取每个结构体变量中每个目标字段对应的初始值;
所述数值判断单元,用于分别将所述实际值获取单元获取到的每个目标字段的实际值与所述初始值读取单元读取到的每个目标字段对应的初始值进行对比,判断所述目标字段的实际值与初始值是否一致。
可选的,在本发明的又一实施例中,所述目标字段,包括:进程编号PID和句柄。
本发明提供的硬件抽象层调试方法和装置,通过获取HAL的资源信息,对该资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,该目标字段为是在进程生命周期内不会发生变化的不变字段,当判断出目标字段的实际值与该目标字段的初始值不一致时,打印出该目标字段对应的日志信息,以用于定位资源信息中的出错位置,节省了开发人员调试Android系统中内核与HAL兼容性问题的时间,能够获取到HAL的全面信息,提高了HAL的调试效率,解决了现有HAL调试方法效率低的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的硬件抽象层调试方法实施例一的流程示意图;
图2为本发明提供的硬件抽象层调试方法实施例二的流程示意图;
图3为本发明提供的硬件抽象层调试方法实施例三的流程示意图;
图4为本发明提供的硬件抽象层调试装置实施例一的结构示意图;
图5为本发明提供的硬件抽象层调试装置实施例二的结构示意图;
图6为本发明提供的硬件抽象层调试装置实施例三的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
硬件抽象层(Hardware Abstraction Layer,简称,HAL)是在硬件平台上抽象出来的一个硬件接口层,这个硬件接口层能够实现硬件平台的功能,因此,Android系统可以通过HAL的硬件接口实现与内核的交互。但是,由背景技术中的内容可知,内核与HAL之间存在兼容性的问题,Android系统通过HAL的硬件接口与内核交互时,可能会出现Android系统不稳定的现象。
例如,Android系统服务端中的应用可以通过HAL的硬件接口向内核发送申请资源的申请请求,内核根据接收到的申请请求为该应用分配相应的资源,并且利用Binder数据流的形式通过HAL的硬件接口将分配的资源传送给该应用,以便该应用根据分配的资源进行相应的操作。在实际应用中,由于内核与HAL存在兼容性问题,因而Binder数据流通过HAL的硬件接口向应用传输资源的过程中可能出错,致使该应用获取到的HAL资源信息错误,该用于根据错误的资源信息进行操作,将导致Android系统不稳定。
实际上,对于Android系统中硬件抽象层(HAL)的调试方法主要包括两种,一种是通过gdb+gdbserver方法,另一种是利用日志系统对日志进行打印分析的方法。
具体的,gdb+gdbserver方法是指利用上位机与下位机的配合进行调试,通过在调试的过程中设置不同的断点来帮助开发人员了解各个阶段的状态。该方法实现时存在以下问题:其一,上位机需要进行一系列繁琐的准备工作,其对于基础知识的要求较高;其二,该方法对于没有源代码的文件,无法知道调试的具体实现,不易实现跟踪;其三,下位机定位错误文件时需要查看进程号以及进程号对应的映射关系图,致使下位机定位错误文件的操作相对复杂。
另外,通过分析日志输出工具输出日志的HAL调试方法,只能确定出HAL层处理流程上的错误,无法定位传输资源的内部错误,其获取到的HAL层信息不全面,调试效率低。
本发明针对上述HAL调试方法调试效率低问题,提出了一种硬件抽象层调试方法和装置,通过对HAL的资源信息中的目标字段进行分析,能够清晰、准确地定位出HAL的出错位置,并反馈给开发人员,以使开发人员及时对出错位置进行处理,有效避免了Android系统不稳定的问题,调试效率高。下面,通过具体实施例对本申请的技术方案进行详细说明。
需要说明的是,本发明提供的具体实施例均是基于Binder通信方式实现的,而且下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
这里,首先对Binder的概念进行简要说明。
Binder是Android系统进程间通信方式之一,主要是Android系统内客户端和服务端之间进行信息传递的通道,因此,客户端和服务端之间进行信息交互是通过Binder数据流的形式实现。此外,Binder还能够对通过Binder数据流传输的资源信息进行封装、解析,解析出HAL的资源信息中的结构体变量和结构体变量包括的字段。
实际应用中,通过分析传输过程中Binder数据流的出错情况可确定出Android系统存在的问题,无需开发人员对Android系统中内核与HAL兼容性问题。值得说明的是,由于该Binder数据流中包含HAL的资源信息,所以,通过分析Binder数据流可准确定位出HAL的资源信息中的可能出错位置。
图1为本发明提供的硬件抽象层调试方法实施例一的流程示意图。如图1所示,本发明实施例提供的硬件抽象层调试方法,包括:
步骤101:获取HAL的资源信息,该资源信息包括至少一个结构体变量,每个结构体变量包括至少一个字段。
具体的,当Android系统服务端中的应用通过硬件抽象层(HAL)的硬件接口向内核发送申请资源的申请请求后,内核分配给该应用的资源通过Binder数据流的形式通过HAL的硬件接口传送给该应用,可选的,该资源包含在Binder数据流中。
可选的,本发明实施例获取HAL输出的资源信息,也即,获取内核分配给应用并经过HAL的硬件接口传送的资源信息。由于HAL是Android系统的一个层次,层次中会包含很多模块,例如,声音、WiFi、GPU等等,每个模块都有对应的结构体变量,所以说,上述获取到的资源信息包括至少一个结构体变量,而且,每个结构体变量包括多个表征结构体变量特性的字段。
步骤102:对资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段。
其中,该目标字段是在进程生命周期内不会发生变化的不变字段。
可选的,由于资源信息中每个结构体变量均包括多个字段,每个字段都具有特定的意义,但是每个结构体中均会有在进程周期内均不发生变化的不变字段和在进程周期内会发生变化的可变字段。例如,由HAL分配和传递,且包含在Binder数据流中的PID字段,其是在分配资源时随着进程而确定的,因此该PID字段在进程的整个生命周期内均不能改变,所以,其可作为本发明实施例中所述的结构体变量的目标字段。
本步骤的主要目的就是通过对资源信息中的每个结构体变量进行分析,确定出在整个进程生命周期内均不发生变化的字段,也即,本步骤中所述的结构体变量的目标字段。
值得说明的是,本发明实施例中所述的目标字段是开发人员根据字段的特性事先设定的,其一定是结构体变量中的不变字段,原因是如果将结构体变量中的可变字段作为目标字段,其在传输过程中通常情况下均会发生变化,后续再来判断字段数值是否发生变化将变得毫无意义,因此,上述确定的目标字段一定是在进程生命周期内不会发生变化的不变字段。
步骤103:判断每个目标字段的实际值与该目标字段的初始值是否一致。
具体的,内核分配给应用的资源中,经过HAL的硬件接口传输之后,HAL的资源信息中,每个结构体变量的每个目标字段均会对应一个数值,此时,本发明实施例中称其为实际值,通过将该实际值与该目标字段的初始值进行比较,判断两者是否一致,若一致,则表明资源信息对应的该结构体变量的目标字段在传送过程中没有发生变化。
进一步的,当该资源信息包含的所有结构体变量的所有目标字段的实际值和初始值均一致时,则认为内核分配给应用的资源信息在通过HAL的硬件接口传送时并没有出错,进而可直接使无误的资源信息进入进程间的通信环境,进而传送给相应的应用。如果上述结构体变量包含的目标字段的实际值与初始值不一致,则进行如步骤104所示的处理。
步骤104:在目标字段的实际值与该目标字段的初始值不一致时,打印出该目标字段对应的日志信息,该日志信息用于定位资源信息中的出错位置。
可选的,若Binder解析出的目标字段的实际值与该目标字段的初始值不一致,则表明资源信息在传送过程中可能在该目标字段处出现了错误,因此,直接打印出该目标字段对应的日志信息,进而根据该日志信息定位出资源信息中可能出错的位置,定位信息清晰、明确,可使开发人员根据该错误位置及时对HAL进行更改调试,不需要开发人员再对HAL与内核的兼容性问题进行调试,提高了HAL的调试效率。
值得说明的是,本发明提供的HAL调试方法,其实现原理不仅可以用于调试HAL,还可以用于调试整个Android系统,调试原理也是通过对Binder数据流中的字段进行解析,分析Binder数据流中目标字段的变化情况,进而确定出Android系统中可能出错的位置。也即,本发明实施例的实现原理并不局限于HAL的调试,只要是采用该原理实现的调试方法均属于本发明技术方案的保护范围。
本发明实施例提供的硬件抽象层调试方法,通过获取HAL的资源信息,对该资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,该目标字段是在进程生命周期内初始值不会发生变化的不变字段,当判断出目标字段的实际值与该目标字段的初始值不一致时,打印出该目标字段对应的日志信息,以及时定位出资源信息中的出错位置,节省了开发人员调试HAL和内核兼容性问题的时间,HAL的调试效率高,解决了现有HAL调试方法效率低的问题。
可选的,作为一种示例,本发明上述实施例提供的硬件抽象层调试方法,还包括如下步骤:
根据结构体变量中不变字段以及每个不变字段的初始值,建立映射关系。
具体的,该映射关系用于关联每个结构体变量中不变字段以及每个不变字段的初始值。
可选的,该映射关系具体可以通过关系表的形式实现,或者通过函数表达式的形式实现,本发明实施例并不限定映射关系的具体实现形式。
具体的,本发明实施例通过根据结构体变量中不变字段以及每个不变字段的初始值建立映射关系,将资源信息中每个结构体变量的不变字段和该不变字段的初始值进行关联,依次将不变字段和该不变字段对应的初始值存储到该映射关系中,以便于Binder对资源信息的结构体变量进行分析时,准确定位出每个结构体变量中的目标字段(也即,不变字段),另外,也为获取目标字段的初始值提供了可行条件,从而为判断目标字段的实际值和初始值是否一致提供了实现可能。
进一步的,在图1所示实施例的基础上,上述步骤102(对资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段)的一种可行实现方式,请参照图2所示实施例。
图2为本发明提供的硬件抽象层调试方法实施例二的流程示意图。本发明实施例二是在上述实施例的基础上对硬件抽象层调试方法的进一步说明。如图2所示,在本发明实施例提供的硬件抽象层调试方法中,上述步骤102具体包括:
步骤201:对于每个结构体变量,获取该结构体变量包括的至少一个字段。
值得说明的是,本发明实施例针对资源信息中的一个结构体变量进行说明,对于资源信息中的其他结构体变量的处理方式类似,此处不再赘述。
在该实施例中,由于每个结构体变量在传送过程中必定会包含多个字段,因此,若想获取结构体变量的目标字段,首先需要获取该结构体变量包括的至少一个字段,进而来判定其是否为目标字段。
步骤202:依次判断该结构体变量中的每个字段是否与映射关系中的不变字段相对应。
可选的,在HAL调试过程中,若开发人员认定该结构变量中的某些字段属于不变字段,并获取到该不变字段的初始值之后,将该不变字段与不变字段的初始值存储到该映射关系对应的映射表中,从而在获取到结构体变量包含的字段之后,依次判断每个字段是否在映射关系中有相同的字段,也即,判断出结构体变量中的字段哪些是设定的目标字段,哪些是非目标字段。
步骤203:在结构体变量中的字段与上述映射关系中的不变字段相对应时,确定该字段为结构体变量的目标字段。
具体的,如果结构体变量中的某些字段恰好与映射关系中的不变字段相对应,那么则认为该字段是该调试过程中设定的不变字段,也即是结构体变量的目标字段。可选的,依次对结构体变量包括的所有字段进行分析,进而确定出结构体变量中所有目标字段。通过对结构体变量的多个目标字段进行分析,能够全方位确定该资源信息是否在传送过程中出错,能够有效提高HAL的调试效率。
本发明实施例提供的硬件抽象层调试方法,通过对每个结构体变量进行分析,获取每个结构体变量包括的至少一个字段,其次在判断出结构体变量中的每个字段与映射关系中的不变字段相对应时,可确定出结构体变量中的目标字段。本发明的技术方案,通过确定出结构体变量中的目标字段,为后续判断该目标字段的数值是否发生变化提供了前提条件,是HAL调试过程中的关键步骤。
可选的,在上述实施例的基础上,步骤103(判断每个目标字段的实际值与该目标字段的初始值是否一致)的一种可行实现方式,请参见图3所示的实施例。
图3为本发明提供的硬件抽象层调试方法实施例三的流程示意图。本发明实施例三是在上述实施例的基础上对硬件抽象层调试方法的进一步说明。如图3所示,在本发明实施例提供的硬件抽象层调试方法中,上述步骤103,也即,判断每个目标字段的实际值与该目标字段的初始值是否一致,具体包括:
步骤301:通过对每个结构体变量中的目标字段进行解析,获取每个结构体变量中每个目标字段的实际值。
本发明实施例主要针对结构体变量的目标字段进行判定。作为一种示例,本步骤的一种可能实现方式为:当确定出每个结构体变量的目标字段后,通过对该目标字段进行解析可直接获取该目标字段的实际值,进而将其存储起来。可选的,将目标字段的实际值存储至内存空间等,以待获取到该目标字段的初始值后对其进行相应处理。
值得说明的是,在本发明实施例中,将目标字段的实际值进行存储,或者将目标字段的实际值存储至内存空间,这均是一种可选的实现方式,实际上,还可以为其他的实现方式,可以根据实际需要进行选择,本发明实施例并不对其进行限定。
步骤302:根据映射关系,读取每个结构体变量中每个目标字段的初始值。
可选的,根据上述实施例记载的内容可知,映射关系中存储有目标字段的初始值,因此,根据映射关系可以快速定位目标字段,并读取出每个结构体变量中每个目标字段的初始值。
需要说明的是,步骤301和302并没有严格的先后顺序,也即,可以先执行步骤302,再执行步骤301,相应的,可首先根据映射关系,读取每个结构体变量中每个目标字段的初始值,再获取每个结构体变量中每个目标字段的实际值,最后再对目标字段的实际值和初始值进行对比即可,也就是说,本发明实施例并不对获取目标字段实际值和读取目标字段初始值的执行顺序进行限定。
步骤303:分别将每个目标字段的实际值与该目标字段的初始值进行对比,判断目标字段的实际值与初始值是否一致。
具体的,通过将步骤301获取到的目标字段的实际值和步骤302获取到的目标字段的初始值进行对比,判断同一目标字段的实际值和初始值是否相同,也即,判断结构体变量中不变字段的数值是否在通过HAL之后发生了变化,从而可确定通过HAL传送的资源信息是否在HAL中出错,当上述资源信息出错时,表明HAL的硬件接口与内核之间存在兼容性的问题,进而可根据定位出的出错位置对HAL进行调试。
另外,对于其他结构体变量中的所有目标字段,均可以采用本发明实施例提供的方案进行上述判定,进而进一步提高了定位出错位置的概率,提高了HAL的调试效率。
本发明实施例提供的硬件抽象层调试方法,通过对每个结构体变量中的目标字段进行解析来获取每个结构体变量中每个目标字段的实际值以及根据映射关系读取每个结构体变量中每个目标字段的初始值,从而可通过将每个目标字段的实际值与初始值进行对比,来判断目标字段的实际值是否与初始值一致,进而可判定通过HAL硬件接口传送的资源信息是否在HAL中出错,从而可准确定位出HAL的问题所在,有效提高了HAL的调试效率。
可选的,在本发明上述各实施例提供的硬件抽象层调试方法中,上述的目标字段,包括:进程编号PID和句柄。
具体的,上述分析可知,结构体变量中部分字段的数值是操作系统在分配资源时,随着进程而确定的,通常情况下,这些字段在进程的整个生命周期内均不会发生改变,称其为不变字段。因此,本发明实施例可将在进程的整个生命周期内均不改变的不变字段作为目标字段。
例如,图像处理器(Graphics Processing Unit,简称GPU)的HAL句柄结构体中包括物理地址、宽度、高度、画面指针、节点池、节点大小、画面格式和进程编号(ProcessIdentification,简称PID)等字段,在这些字段中,大部分都会在使用过程中发生变化,但是PID字段是分配GPU资源的时候随着进程而确定的,PID字段的数值在整个进程的生命周期内均不会变化,所以,PID字段是HAL句柄结构体的不变字段,可以将其设定为目标字段。
同理,句柄也是操作系统在分配资源时随着进程而确定的,因此,句柄字段的数值在整个进程的生命周期内也不会变化,故句柄字段也可以被设定为目标字段。
值得说明的是,本发明实施例并不对目标字段的具体实现进行限定,只要是在分配资源时随着进程而确定的,其对应的数值在整个进程生命周期内也不会变化的字段均可以被设定为目标字段,此处不再赘述。
下述为本发明提供的装置实施例,其可以用于执行本发明的方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明的方法实施例。
图4为本发明提供的硬件抽象层调试装置实施例一的结构示意图。如图4所示,本发明实施例提供的硬件抽象层调试装置,包括:
获取模块401,用于获取HAL的资源信息,该资源信息包括至少一个结构体变量,每个结构体变量包括至少一个字段。
确定模块402,用于对获取模块401获取到的资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段。
其中,该目标字段是在进程生命周期内不会发生变化的不变字段。
判断模块403,用于判断确定模块402确定的每个目标字段的实际值与该目标字段的初始值是否一致。
处理模块404,用于在判断模块403判断出目标字段的实际值与该目标字段的初始值不一致时,打印出该目标字段对应的日志信息。
其中,该日志信息用于定位上述资源信息中的出错位置。
本发明实施例提供的硬件抽象层调试装置,可用于执行如图1所示硬件抽象层调试方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
可选的,作为一种示例,本发明实施例提供的硬件抽象层调试装置,还包括:映射关系建立模块。
该映射关系建立模块,用于根据结构体变量中不变字段以及每个不变字段的初始值,建立映射关系。
可选的,该映射关系用来关联每个结构体变量中不变字段与不变字段的初始值。
图5为本发明提供的硬件抽象层调试装置实施例二的结构示意图。本发明实施例是在上述实施例的基础上对硬件抽象层调试装置的进一步说明。如图5所示,在本发明实施例提供的硬件抽象层调试装置中,上述确定模块402,包括:字段获取单元501、字段判断单元502和目标字段确定单元503。
该字段获取单元501,用于获取每个结构体变量包括的至少一个字段。
该字段判断单元502,用于依次判断字段获取单元501获取到的结构体变量中的每个字段是否与映射关系中的不变字段相对应。
该目标字段确定单元503,用于在字段判断单元502判断出结构体变量中的字段与映射关系中的不变字段相对应时,确定该字段为结构体变量的目标字段。
本发明实施例提供的硬件抽象层调试装置,可用于执行如图2所示硬件抽象层调试方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图6为本发明提供的硬件抽象层调试装置实施例三的结构示意图。本发明实施例是在上述实施例的基础上对硬件抽象层调试装置的进一步说明。如图6所示,在本发明实施例提供的硬件抽象层调试装置中,上述判断模块403,包括:实际值获取单元601、初始值读取单元602和数值判断单元603。
该实际值获取单元601,用于通过对每个结构体变量中的目标字段进行解析,获取每个结构体变量中每个目标字段的实际值。
该初始值读取单元602,用于根据上述映射关系,读取每个结构体变量中每个目标字段的初始值。
该数值判断单元603,用于分别将实际值获取单元601获取到的每个目标字段的实际值与初始值读取单元602读取到的每个目标字段对应的初始值进行对比,判断该目标字段的实际值与初始值是否一致。
可选的,在上述实施例提供的硬件抽象层调试装置中,上述目标字段,包括:进程编号PID和句柄。
本发明实施例提供的硬件抽象层调试方法和装置,通过获取HAL的资源信息,对该资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,当判断出目标字段的实际值与该目标字段的初始值不一致时,打印出该目标字段对应的日志信息,定位出资源信息中的出错位置,节省了开发人员调试Android系统中内核与HAL兼容性问题的时间,能够获取到HAL的全面信息,提高了HAL的调试效率,解决了现有HAL调试方法效率低的问题。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种硬件抽象层调试方法,其特征在于,包括:
获取硬件抽象层HAL的资源信息,所述资源信息包括至少一个资源对应的至少一个结构体变量,每个结构体变量包括至少一个字段;
对所述资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,所述目标字段是在所述资源对应进程的生命周期内不会发生变化的不变字段;
判断每个所述目标字段的实际值与所述目标字段的初始值是否一致;
在所述目标字段的实际值与所述目标字段的初始值不一致时,打印出所述目标字段对应的日志信息,所述日志信息用于定位所述资源信息中的出错位置。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据结构体变量中不变字段以及每个不变字段的初始值,建立映射关系。
3.根据权利要求2所述的方法,其特征在于,所述对所述资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,具体包括:
对于每个结构体变量,获取所述结构体变量包括的至少一个字段;
依次判断所述结构体变量中的每个字段是否与所述映射关系中的不变字段相对应;
在所述结构体变量中的字段与所述映射关系中的不变字段相对应时,确定所述字段为所述结构体变量的目标字段。
4.根据权利要求2所述的方法,其特征在于,所述判断每个所述目标字段的实际值与所述目标字段的初始值是否一致,具体包括:
通过对每个结构体变量中的目标字段进行解析,获取每个结构体变量中每个目标字段的实际值;
根据所述映射关系,读取每个结构体变量中每个目标字段的初始值;
分别将每个目标字段的实际值与所述目标字段的初始值进行对比,判断所述目标字段的实际值与初始值是否一致。
5.根据权利要求1~4任一项所述的方法,其特征在于,所述目标字段包括:进程编号PID和句柄。
6.一种硬件抽象层调试装置,其特征在于,包括:
获取模块,用于获取硬件抽象层HAL的资源信息,所述资源信息包括至少一个资源对应的至少一个结构体变量,每个结构体变量包括至少一个字段;
确定模块,用于对所述获取模块获取到的所述资源信息中的每个结构体变量进行分析,确定出每个结构体变量中的至少一个目标字段,所述目标字段是在所述资源对应的进程的生命周期内不会发生变化的不变字段;
判断模块,用于判断所述确定模块确定的每个所述目标字段的实际值与所述目标字段的初始值是否一致;
处理模块,用于在所述判断模块判断出所述目标字段的实际值与所述目标字段的初始值不一致时,打印出所述目标字段对应的日志信息,所述日志信息用于定位所述资源信息中的出错位置。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:映射关系建立模块;
所述映射关系建立模块,用于根据结构体变量中不变字段以及每个不变字段的初始值,建立映射关系。
8.根据权利要求7所述的装置,其特征在于,所述确定模块,包括:字段获取单元、字段判断单元和目标字段确定单元;
所述字段获取单元,用于获取每个结构体变量包括的至少一个字段;
所述字段判断单元,用于依次判断所述字段获取单元获取到的结构体变量中的每个字段是否与所述映射关系中的不变字段相对应;
所述目标字段确定单元,用于在所述字段判断单元判断出所述结构体变量中的字段与所述映射关系中的不变字段相对应时,确定所述字段为所述结构体变量的目标字段。
9.根据权利要求7所述的装置,其特征在于,所述判断模块,包括:实际值获取单元、初始值读取单元和数值判断单元;
所述实际值获取单元,用于通过对每个结构体变量中的目标字段进行解析,获取每个结构体变量中每个目标字段的实际值;
所述初始值读取单元,用于根据所述映射关系,读取每个结构体变量中每个目标字段的初始值;
所述数值判断单元,用于分别将所述实际值获取单元获取到的每个目标字段的实际值与所述初始值读取单元读取到的每个目标字段对应的初始值进行对比,判断所述目标字段的实际值与初始值是否一致。
10.根据权利要求6~9任一项所述的装置,其特征在于,所述目标字段,包括:进程编号PID和句柄。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610597474.8A CN107656861B (zh) | 2016-07-26 | 2016-07-26 | 硬件抽象层调试方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610597474.8A CN107656861B (zh) | 2016-07-26 | 2016-07-26 | 硬件抽象层调试方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107656861A CN107656861A (zh) | 2018-02-02 |
CN107656861B true CN107656861B (zh) | 2020-06-02 |
Family
ID=61126452
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610597474.8A Active CN107656861B (zh) | 2016-07-26 | 2016-07-26 | 硬件抽象层调试方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107656861B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0775342A1 (en) * | 1994-08-10 | 1997-05-28 | Intrinsa Corporation | Computer process resource modelling method and apparatus |
CN101539767A (zh) * | 2008-03-21 | 2009-09-23 | 鸿富锦精密工业(深圳)有限公司 | 可编程控制器的快速侦错方法 |
CN102521130A (zh) * | 2011-12-13 | 2012-06-27 | 南京大学 | 一种基于聚类不变式分析的错误定位方法 |
CN103294596A (zh) * | 2013-05-23 | 2013-09-11 | 西安电子科技大学 | 一种基于程序不变量的合约式软件故障预警方法 |
-
2016
- 2016-07-26 CN CN201610597474.8A patent/CN107656861B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0775342A1 (en) * | 1994-08-10 | 1997-05-28 | Intrinsa Corporation | Computer process resource modelling method and apparatus |
CN101539767A (zh) * | 2008-03-21 | 2009-09-23 | 鸿富锦精密工业(深圳)有限公司 | 可编程控制器的快速侦错方法 |
CN102521130A (zh) * | 2011-12-13 | 2012-06-27 | 南京大学 | 一种基于聚类不变式分析的错误定位方法 |
CN103294596A (zh) * | 2013-05-23 | 2013-09-11 | 西安电子科技大学 | 一种基于程序不变量的合约式软件故障预警方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107656861A (zh) | 2018-02-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9898387B2 (en) | Development tools for logging and analyzing software bugs | |
CN106506283B (zh) | 银行和企业对接系统的业务测试方法和装置 | |
US20170192880A1 (en) | Defect prediction | |
US9652366B2 (en) | Code change analysis to optimize testing lifecycle | |
US9946628B2 (en) | Embedding and executing trace functions in code to gather trace data | |
CN103049371A (zh) | Android应用程序测试方法和测试装置 | |
US20160283357A1 (en) | Call stack relationship acquiring method and apparatus | |
CN107025167B (zh) | 在处理器追踪日志中使用编译器类型信息进行数据流分析的方法和设备 | |
CN104021072A (zh) | 用于评估失效的软件程序的机器和方法 | |
US9563541B2 (en) | Software defect detection identifying location of diverging paths | |
CN111897727A (zh) | 软件测试方法、装置、计算机设备及存储介质 | |
CN111124870A (zh) | 一种接口测试方法及装置 | |
US10241957B2 (en) | Workload patterns for realistic load recreation in performance testing | |
CN114816993A (zh) | 一种全链路接口测试方法、系统、介质及电子设备 | |
CN107656861B (zh) | 硬件抽象层调试方法和装置 | |
US20140215440A1 (en) | Marked test script creation | |
CN116383025A (zh) | 基于Jmeter的性能测试方法、装置、设备及介质 | |
CN107622013B (zh) | 一种分布式系统测试方法及装置 | |
KR102165747B1 (ko) | 보안성을 고려한 경량 크래시 리포트 기반 디버깅 방법 | |
CN115033434A (zh) | 一种内核性能理论值计算方法、装置及存储介质 | |
CN111008140B (zh) | 一种跨平台的ui自动化测试方法及装置 | |
CN113326193A (zh) | 一种小程序测试方法及装置 | |
CN110515653B (zh) | 文档生成方法、装置、电子设备及计算机可读存储介质 | |
CN113610242A (zh) | 数据处理方法、装置和服务器 | |
CN113626307A (zh) | 一种基于k8s容器平台的数据校验方法和装置 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |