CN116089316B - 一种基于动态断点的内核驱动数据调试方法 - Google Patents
一种基于动态断点的内核驱动数据调试方法 Download PDFInfo
- Publication number
- CN116089316B CN116089316B CN202310367077.1A CN202310367077A CN116089316B CN 116089316 B CN116089316 B CN 116089316B CN 202310367077 A CN202310367077 A CN 202310367077A CN 116089316 B CN116089316 B CN 116089316B
- Authority
- CN
- China
- Prior art keywords
- breakpoint
- kernel
- data
- debugged
- macro function
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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
技术领域
本发明涉及计算机应用领域,更具体地,涉及一种基于动态断点的内核驱动数据调试方法。
背景技术
由于内核驱动是一个不与特定进程相关的功能集合,所以内核代码无法轻易地放在调试器中执行,而且也很难跟踪,并且内核驱动错误很容易导致系统崩溃,这也就破坏了用来跟踪内核驱动的现场,因而内核驱动的调试和错误跟踪非常困难。
针对内核驱动调试困难的问题,一些操作系统提供内置的内核调试器,部分环境下可实现单步调试功能。然而,内核调试器需要内核源码的支持,调试环境配置复杂,驱动程序运行缓慢,实际使用起来非常不方便,而且绝大多数的商用操作系统是无法获取到内核源码的,导致内核调试器实际使用场景非常少。因此,内核驱动开发人员通常通过内核打印输出进行内核驱动调试,需要频繁调整内核打印语句,每次都需要重新编译和加载内核驱动,也无法设置断点,内核驱动程序调试效率非常低。
现有内核数据打印输出的调试方法,至少存在如下技术问题:
(1)无法设置内核驱动断点,即内核驱动程序无法暂停运行;
(2)缺乏交互手段,需要频繁调整内核驱动源码中的打印语句,重新编译内核驱动代码,然后加载内核驱动和运行驱动程序,因而内核调试效率非常低。
发明内容
本发明针对现有技术中存在的技术问题,提供一种基于动态断点的内核驱动数据调试方法包括:
定义可变参数的断点宏函数和断点变量,所述断点宏函数的第一个参数为断点序号,其它可变数量的参数为需要调试的内核数据的指针;
在待调试内核驱动程序的内核驱动函数中插入所述断点宏函数,设置所述断点宏函数的断点序号,以及根据调试需求设置需要调试的内核数据的指针;
当待调试内核驱动程序加载和运行时,设置断点变量值;
当待调试内核驱动程序运行到所述断点宏函数时,根据所述断点宏函数中的断点序号和设置的所述断点变量的值判断所述断点宏函数对应的内核驱动函数是否满足进入断点的条件,若是,则所述内核驱动函数进入断点模式;
根据所述断点宏函数中设置的需要调试的内核数据的指针,获取对应的内核数据并进行调试。
在上述技术方案的基础上,本发明还可以作出如下改进。
可选的,所述当待调试内核驱动程序加载和运行时,设置断点变量值,包括:
设计一人机交互界面,通过所述人机交互界面对所述断点变量值进行动态设置,当插入驱动程序断点宏函数的需要参数值互不相同时,所述断点变量值能够控制设备内核驱动程序的断点位置。
可选的,所述断点变量为调试辅助软件能够动态修改的内核驱动全局变量或内核驱动及调试辅助软件都能够访问的设备寄存器,通过设置所述内核驱动全局变量或设备寄存器变量设置断点变量值。
可选的,所述在待调试内核驱动程序的内核驱动函数中插入所述断点宏函数,设置所述断点宏函数的断点序号,以及根据调试需求设置需要调试的内核数据的指针,包括:
在待调试内核驱动程序的每一个内核驱动函数中插入一个断点宏函数,并设置所述断点宏函数的断点序号,以及设置所有需要调试的内核数据的指针。
可选的,所述内核数据的指针为结构体数据指针或为普通类型数据的指针。
可选的,所述断点变量值包括普通断点值和特殊断点值,所述当待调试内核驱动程序运行到所述断点宏函数时,根据所述断点宏函数中的断点序号和设置的所述断点变量的值判断所述断点宏函数对应的内核驱动函数是否满足进入断点的条件,包括:
当待调试内核驱动程序运行到所述断点宏函数时,获取断点变量值,若所述断点变量值为普通断点值,则判断所述断点宏函数中的断点序号和设置的所述断点变量值是否相等,若相等,则满足进入断点的条件,内核驱动函数进入断点模式。
可选的,所述特殊断点值能够表示启动全部断点、禁用全部断点和跳出当前断点一次,所述当待调试内核驱动程序运行到所述断点宏函数时,根据所述断点宏函数中的断点序号和设置的所述断点变量的值判断所述断点宏函数对应的内核驱动函数是否满足进入断点的条件,包括:
当待调试内核驱动程序运行到所述断点宏函数时,获取所述断点变量值,若所述断点变量值为特殊断点值,则:
若所述特殊断点值表示启动全部断点,则所有包含断点宏函数的内核驱动函数均进入断点模式;
若所述特殊断点值表示禁用全部断点,则所有内核驱动函数均不进入断点模式;
若所述特殊断点值表示跳出当前断点一次,则跳出已进入断点模式的内核驱动函数的当前断点模式。
可选的,根据所述断点宏函数中设置的需要调试的内核数据的指针,获取对应的内核数据并进行调试,包括:
当所述断点宏函数满足进入断点的条件,待调试内核驱动程序进入断点模式,输出所述断点宏函数中需要调试的内核数据的虚地址指针值,通过调试辅助软件显示和修改所述虚地址指针值指向的内核数据,实现对内核驱动数据的调试。
本发明提供的一种基于动态断点的内核驱动数据调试方法,通过内核调试宏函数和断点变量,使内核驱动函数暂停运行,并能够对内核驱动数据进行实时访问,实现内核驱动数据的调试功能。该方法对内核驱动程序的开发和调试非常友好,能够降低内核驱动程序调试难度,提高调试效率。
附图说明
图1为本发明提供的一种基于动态断点的内核驱动数据调试方法流程图;
图2为基于动态断点的内核驱动数据调试方法的实现交互过程示意图;
图3为本发明实施例断点宏函数的实现流程图;
图4为本发明实施例调试辅助软件的工作流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。另外,本发明提供的各个实施例或单个实施例中的技术特征可以相互任意结合,以形成可行的技术方案,这种结合不受步骤先后次序和/或结构组成模式的约束,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
图1为本发明提供的一种基于动态断点的内核驱动数据调试方法流程图,如图1所示,方法包括:
S1,定义可变参数的断点宏函数和断点变量,所述断点宏函数的第一个参数为断点序号,其它可变数量的参数为需要调试的内核数据的指针。
可理解的是,在设备内核驱动中设计一个可变参数的断点宏函数和断点变量,断点宏函数包括多个参数,第一个参数为断点的序号,用来标识断点,其它可变参数分别为需要调试的内核数据的指针。断点变量可表示断点的位置。
S2,在待调试内核驱动程序的内核驱动函数中插入所述断点宏函数,设置所述断点宏函数的断点序号,以及根据调试需求设置需要调试的内核数据的指针。
可理解的是,在需要对内核驱动程序进行调试时,在待调试内核驱动程序的内核驱动函数中插入断点宏函数,并设置断点宏函数的几个参数值,包括设置断点宏函数的断点序号,以及根据调试需求设置需要调试的内核数据的指针。其中,根据内核数据的指针可以访问对应的内核数据。
其中,作为实施例,所述在待调试内核驱动程序的内核驱动函数中插入所述断点宏函数,设置所述断点宏函数的断点序号,以及根据调试需求设置需要调试的内核数据的指针,包括:在待调试内核驱动程序的每一个内核驱动函数中插入一个断点宏函数,并设置所述断点宏函数的断点序号,以及设置多个需要调试的内核数据的指针。
可理解的是,待调试内核驱动程序中包括多个内核驱动函数,在每一个内核驱动函数中均设置一个断点宏函数,并设置每一个断点宏函数的参数值,其中,每一个断点宏函数中均设置一个断点序号和多个内核数据指针,内核数据指针可以为结构体数据指针。
S3,当待调试内核驱动程序加载和运行时,设置断点变量值。
作为实施例,所述当待调试内核驱动程序加载和运行时,设置断点变量值,包括:所述当待调试内核驱动程序加载和运行时,设置断点变量值,包括:设计一人机交互界面,通过所述人机交互界面对所述断点变量值进行动态设置,当插入驱动程序断点宏函数的需要参数值互不相同时,所述断点变量值能够控制设备内核驱动程序的断点位置。
可理解的是,当待调试内核驱动程序加载和运行时,为当待调试内核驱动程序设置断点变量值,其中,断点变量为调试辅助软件能够动态修改的内核驱动全局变量,如驱动模块参数、提供访问接口的全局变量等,或内核驱动及调试辅助软件都能够访问的设备寄存器,通过设置所述内核驱动全局变量或设备寄存器变量设置断点变量值。断点变量用于控制待调试内核驱动程序的断点位置。
需要说明的是,断点变量值可以设置为普通断点值和特殊断点值,当断点变量值为某些特定值时,分别表示禁用全部断点、启动全部断点、跳出当前断点一次。
其中,设计一个调试辅助软件提供人机交互界面,实现对上述断点变量值的设置功能,并提供使能指定断点、使能所有断点、禁用所有断点、跳出当前断点、跳到指定断点的设置功能。该软件还提供根据内核数据指针值显示或修改内核指针值指向数据内容的功能,实现对内核驱动数据的显示和修改。另外,由于内核虚地址对内核驱动程序都是相同的,为了实现对内核数据的访问功能,该软件包含一个独立的内核驱动模块,调试辅助软件的用户态模块通过对该独立内核驱动模块的调用,最终实现了对其他内核驱动的虚地址指向数据的显示和修改。
具体来说,请参见图2,为基于动态断点的内核驱动数据调试方法中设置断点宏函数和断点变量的示意图。
在一种实施方式中,操作系统为Linux系统,待调试内核驱动为Linux内核驱动模块,假设该内核驱动模块名为“testDriver”。该实施方式中,S1的断点变量设计为内核驱动模块的一个模块参数,存储方式为静态全局变量,变量类型为“uint”,变量名为“breakId”,定义禁用全部断点、启动全部断点、跳出当前断点一次的特定值分别为0x0、0xffffffff、0xfffffffe。在Linux操作系统中,该驱动模块参数可以通过系统文件节点“/sys/module/testDriver/parameters/breakId”进行直接访问。断点宏函数和断点变量头文件伪代码如下:
/* 头文件部分 */
#if defined(_DEBUG)&&USE_DEBUG_BREAK
#define DEBUG_BREAK_ALL 0xffffffff
#define DEBUG_BREAK_NEXT 0xfffffffe
#define DEBUG_BREAK_NONE 0x0
inline unsigned int debug_read_break_id(void);
inline void debug_write_break_id(unsigned int break_id);
void debug_print_vars(int vars_cnt, ...);
#define DEBUG_BREAK(BREAK_ID, VARS...) do {\
unsigned int __tmp_old = debug_read_break_id(); /* 读取断点变量值*/ \
unsigned int __tmp; \
if (__tmp_old == DEBUG_BREAK_ALL || __tmp_old == BREAK_ID) {/* 断点条件 */\
debug_print("%s:%s:%d(%u): ", /* 打印断点位置和断点序号信息 */\
__FILE__, __FUNCTION__, __LINE__, BREAK_ID); \
debug_print_vars(#VARS, ##VARS); /* 输出指针名和虚地址值 */ \
do {\
msleep(100); /* 休眠100毫秒 */ \
__tmp = debug_read_break_id(); /* 读取断点变量值 */ \
} while (__tmp == DEBUG_BREAK_ALL || __tmp == BREAK_ID); \
if (__tmp == DEBUG_BREAK_NEXT) /* 执行跳出当前断点操作 */\
debug_write_break_id(__tmp_old); /* 写入原断点值 */ \
}\
} while (0)
#else
#define DEBUG_BREAK(BREAK_ID, VARS...)
#endif
其中,断点宏函数和断点变量C语言程序伪代码实现如下:
/* C语言程序实现部分 */
#if defined(_DEBUG)&&USE_DEBUG_BREAK
static uint breakId = 0;
module_param(breakId, uint, 0644);
MODULE_PARM_DESC(breakId, "break index from 1 to 0xfffffffd, and 0:none break, 0xffffffff: break all, 0xfffffffe: break next");
uint debug_read_break_id(void)
{
return breakId;
}
void debug_write_break_id(unsigned int break_id)
{
breakId = break_id;
}
void debug_print_vars(char *varStr, ...)
{
/* 根据可变参数字符串获取可变参数数量 */
/* 获取所有的可变参数,类型为指针型 */
/* 打印内核数据指针名和虚地址指针值 */
}
#endif
S4,当待调试内核驱动程序运行到所述断点宏函数时,根据所述断点宏函数中的断点序号和设置的所述断点变量的值判断所述断点宏函数对应的内核驱动函数是否满足进入断点的条件,若是,则待调试内核驱动程序进入短暂休眠状态,内核驱动函数进入断点模式。
作为实施例,所述当待调试内核驱动程序运行到所述断点宏函数时,根据所述断点宏函数中的断点序号和设置的所述断点变量的值判断所述断点宏函数对应的内核驱动函数是否满足进入断点的条件,包括:当待调试内核驱动程序运行到所述断点宏函数时,获取断点变量值,若所述断点变量值为普通断点值,则判断所述断点宏函数中的断点序号和设置的所述断点变量值是否相等,若相等,则满足进入断点的条件,内核驱动函数进入断点模式。
若所述断点变量值为特殊断点值,则:若所述断点变量值为特殊断点值,则:若所述特殊断点值表示启动全部断点,则所有包含断点宏函数的内核驱动函数均进入断点模式;若所述特殊断点值表示禁用全部断点,则所有内核驱动函数均不进入断点模式;若所述特殊断点值表示跳出当前断点一次,则跳出已进入断点模式的内核驱动函数的当前断点模式。
可理解的是,当待调试内核驱动程序到断点宏函数时,基于断点宏函数的断点序号和断点变量值判断断点宏函数是否满足进入断点的条件,如果满足,则对应的内核驱动函数进入断点模式。
其中,如果此时的断点变量为普通断点值,则判断所述断点宏函数中的断点序号和设置的所述断点变量值是否相等,若相等,则满足进入断点的条件,内核驱动函数进入断点模式。
如果此时的断点变量为断点特殊值,则根据断点特殊值确定是启动全部断点、禁用全部断点还是跳出当前断点一次,若特殊断点值表示启动全部断点,则所有内核驱动函数均进入断点模式;若特殊断点值表示禁用全部断点,则所有包含断点宏函数的内核驱动函数均不进入断点模式;若特殊断点值表示跳出当前断点一次,则跳出已进入断点模式的内核驱动函数的当前断点模式。也就是,如果断点变量值为特殊值,则不用判断断点宏函数的断点序号和断点变量值是否一致,按照断点变量特殊值表示的功能执行内核驱动函数是否进入断点模式。
其中,断点宏函数的实现流程图如图3所示。
在一种实施方式中,调试辅助软件的界面为一种命令行界面,支持断点设置命令,其核心命令及其功能说明如下:
break:当内核驱动函数运行到断点宏函数时,都会进入断点模式;
next:跳出当前断点模式一次;
break [index]:当内核驱动函数运行到断点宏函数,且断点宏函数第一个参数的值等于index时,才会进入断点模式;
continue:内核驱动函数跳出断点模式且不会进入断点模式;
kvrd [addr] [width][count]: 从内核虚地址addr的位置开始读数据字,数据字宽度为width个字节,读取数据字的数量count个,其中width值为1、2、4、8这4种值;
kvwr [addr] [width][val0 val1 …]: 从内核虚地址addr的位置开始写数据字,数据字宽度为width个字节,写入数据字的内容为val0、val1等,其中width值为1、2、4、8这4种值。
S5,根据所述断点宏函数中设置的需要调试的内核数据的指针,获取对应的内核数据并进行调试。
作为实施例,根据所述断点宏函数中设置的需要调试的内核数据的指针,获取对应的内核数据并进行调试,包括:当所述断点宏函数满足进入断点的条件,待调试内核驱动程序进入断点模式,输出所述断点宏函数中需要调试的内核数据的虚地址指针值,通过调试辅助软件显示和修改所述虚地址指针值指向的内核数据,实现对内核驱动数据的调试。
可理解的是,当内核驱动函数进入断点模式时,获取断点宏函数中的需要调试的内核数据的虚拟地址指针值,通过调试辅助软件显示虚地址指针值指向的内核数据,如果显示的内核函数有错误,则可以进行修改,实现对内核驱动数据的调试。
其中,调试辅助软件的常规工作流程如图4所示。
在一种实施方式中,S5具体包括如下步骤:
内核驱动加载,内核驱动初始化断点变量值为0x0,即默认不进入断点模式;
调试辅助软件通过设置断点变量值为指定断点序号;
当内核驱动程序运行到指定断点序号的断点宏函数时,内核驱动程序进入断点模式暂停运行,并打印断点宏函数中可变参数的值,直到断点宏函数的序号参数与断点变量值不满足进入断点的条件,内核驱动才跳出断点模式继续运行;
调适辅助软件打印内核驱动数据的虚地址,通过显示和修改内核虚地址指向的内核数据,实施对内核驱动数据的调试功能。
本发明实施例提供的一种基于动态断点的内核驱动数据调试方法,通过调试宏函数和断点变量,使内核驱动函数暂停运行,实现对内核驱动数据的实时访问,该方法对内核驱动程序的开发和调试非常友好,能够降低内核驱动程序调试难度,提高调试效率。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
Claims (8)
1.一种基于动态断点的内核驱动数据调试方法,其特征在于,包括:
定义可变参数的断点宏函数和断点变量,所述断点宏函数的第一个参数为断点序号,其它可变数量的参数为需要调试的内核数据的指针;
在待调试内核驱动程序的内核驱动函数中插入所述断点宏函数,设置所述断点宏函数的断点序号,以及根据调试需求设置需要调试的内核数据的指针;
当待调试内核驱动程序加载和运行时,设置断点变量值;
当待调试内核驱动程序运行到所述断点宏函数时,根据所述断点宏函数中的断点序号和设置的所述断点变量的值判断所述断点宏函数对应的内核驱动函数是否满足进入断点的条件,若是,则所述内核驱动函数进入断点模式;
根据所述断点宏函数中设置的需要调试的内核数据的指针,获取对应的内核数据并进行调试。
2.根据权利要求1所述的内核驱动数据调试方法,其特征在于,所述当待调试内核驱动程序加载和运行时,设置断点变量值,包括:
设计一人机交互界面,通过所述人机交互界面对所述断点变量值进行动态设置,当插入驱动程序断点宏函数的需要参数值互不相同时,所述断点变量值能够控制设备内核驱动程序的断点位置。
3.根据权利要求1所述的内核驱动数据调试方法,其特征在于,所述断点变量为调试辅助软件能够动态修改的内核驱动全局变量或内核驱动及调试辅助软件都能够访问的设备寄存器,通过设置所述内核驱动全局变量或设备寄存器变量设置断点变量值。
4.根据权利要求1所述的内核驱动数据调试方法,其特征在于,所述在待调试内核驱动程序的内核驱动函数中插入所述断点宏函数,设置所述断点宏函数的断点序号,以及根据调试需求设置需要调试的内核数据的指针,包括:
在待调试内核驱动程序的每一个内核驱动函数中插入一个断点宏函数,并设置所述断点宏函数的断点序号,以及设置所有需要调试的内核数据的指针。
5.根据权利要求4所述的内核驱动数据调试方法,其特征在于,所述内核数据的指针为结构体数据指针或为普通类型数据的指针。
6.根据权利要求3所述的内核驱动数据调试方法,其特征在于,所述断点变量值包括普通断点值和特殊断点值,所述当待调试内核驱动程序运行到所述断点宏函数时,根据所述断点宏函数中的断点序号和设置的所述断点变量的值判断所述断点宏函数对应的内核驱动函数是否满足进入断点的条件,包括:
当待调试内核驱动程序运行到所述断点宏函数时,获取断点变量值,若所述断点变量值为普通断点值,则判断所述断点宏函数中的断点序号和设置的所述断点变量值是否相等,若相等,则满足进入断点的条件,内核驱动函数进入断点模式。
7.根据权利要求6所述的内核驱动数据调试方法,其特征在于,所述特殊断点值能够表示启动全部断点、禁用全部断点和跳出当前断点一次,所述当待调试内核驱动程序运行到所述断点宏函数时,根据所述断点宏函数中的断点序号和设置的所述断点变量的值判断所述断点宏函数对应的内核驱动函数是否满足进入断点的条件,包括:
当待调试内核驱动程序运行到所述断点宏函数时,获取所述断点变量值,若所述断点变量值为特殊断点值,则:
若所述特殊断点值表示启动全部断点,则所有包含断点宏函数的内核驱动函数均进入断点模式;
若所述特殊断点值表示禁用全部断点,则所有内核驱动函数均不进入断点模式;
若所述特殊断点值表示跳出当前断点一次,则跳出已进入断点模式的内核驱动函数的当前断点模式。
8.根据权利要求1所述的内核驱动数据调试方法,其特征在于,根据所述断点宏函数中设置的需要调试的内核数据的指针,获取对应的内核数据并进行调试,包括:
当所述断点宏函数满足进入断点的条件,待调试内核驱动程序进入断点模式,输出所述断点宏函数中需要调试的内核数据的虚地址指针值,通过调试辅助软件显示和修改所述虚地址指针值指向的内核数据,实现对内核驱动数据的调试。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310367077.1A CN116089316B (zh) | 2023-04-07 | 2023-04-07 | 一种基于动态断点的内核驱动数据调试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310367077.1A CN116089316B (zh) | 2023-04-07 | 2023-04-07 | 一种基于动态断点的内核驱动数据调试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116089316A CN116089316A (zh) | 2023-05-09 |
CN116089316B true CN116089316B (zh) | 2023-06-09 |
Family
ID=86187229
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310367077.1A Active CN116089316B (zh) | 2023-04-07 | 2023-04-07 | 一种基于动态断点的内核驱动数据调试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116089316B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1378833A1 (en) * | 2002-07-04 | 2004-01-07 | Sap Ag | Dynamic breakpoints for computer software |
CN1779652A (zh) * | 2004-11-24 | 2006-05-31 | 中兴通讯股份有限公司 | 一种调试操作系统内核态程序的方法及装置 |
CN102301344A (zh) * | 2011-07-06 | 2011-12-28 | 华为技术有限公司 | 一种操作系统内核调试方法和虚拟调试服务模块 |
CN102722438A (zh) * | 2012-06-01 | 2012-10-10 | 北京神州绿盟信息安全科技股份有限公司 | 一种内核调试的方法和设备 |
CN105094910A (zh) * | 2015-07-31 | 2015-11-25 | 上海斐讯数据通信技术有限公司 | 一种驱动函数用户态调试系统和方法 |
CN106294147A (zh) * | 2016-08-09 | 2017-01-04 | 上海盈方微电子有限公司 | 一种linux操作系统的调试方法 |
CN110955598A (zh) * | 2019-11-20 | 2020-04-03 | 杭州迪普科技股份有限公司 | 一种内核态程序的断点处理方法及装置 |
CN112433847A (zh) * | 2020-11-09 | 2021-03-02 | 中国船舶重工集团公司第七0九研究所 | 一种OpenCL内核提交的方法及装置 |
CN115616973A (zh) * | 2022-10-26 | 2023-01-17 | 深圳市汇川技术股份有限公司 | 断点调试功能的实现方法、系统、设备及介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7334120B2 (en) * | 2003-11-14 | 2008-02-19 | Intel Corporation | Firmware emulation environment for developing, debugging, and testing firmware components including option ROMs |
US20050216895A1 (en) * | 2004-03-23 | 2005-09-29 | Tran Hieu T | Method and apparatus for remote debugging of kernel and application software |
KR20070109432A (ko) * | 2006-05-11 | 2007-11-15 | 삼성전자주식회사 | 커널 인지 디버깅 장치 및 방법 |
US8671393B2 (en) * | 2010-10-21 | 2014-03-11 | International Business Machines Corporation | Collaborative software debugging in a distributed system with client-specific dynamic breakpoints |
CN102467447A (zh) * | 2010-11-16 | 2012-05-23 | 鸿富锦精密工业(深圳)有限公司 | 驱动程序调试系统及方法 |
US9996448B2 (en) * | 2016-02-25 | 2018-06-12 | Red Hat Israel Ltd | Breakpoint insertion into kernel pages |
CN111737103A (zh) * | 2019-03-25 | 2020-10-02 | 阿里巴巴集团控股有限公司 | 一种包括调试单元的处理器和调试系统 |
-
2023
- 2023-04-07 CN CN202310367077.1A patent/CN116089316B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1378833A1 (en) * | 2002-07-04 | 2004-01-07 | Sap Ag | Dynamic breakpoints for computer software |
CN1779652A (zh) * | 2004-11-24 | 2006-05-31 | 中兴通讯股份有限公司 | 一种调试操作系统内核态程序的方法及装置 |
CN102301344A (zh) * | 2011-07-06 | 2011-12-28 | 华为技术有限公司 | 一种操作系统内核调试方法和虚拟调试服务模块 |
CN102722438A (zh) * | 2012-06-01 | 2012-10-10 | 北京神州绿盟信息安全科技股份有限公司 | 一种内核调试的方法和设备 |
CN105094910A (zh) * | 2015-07-31 | 2015-11-25 | 上海斐讯数据通信技术有限公司 | 一种驱动函数用户态调试系统和方法 |
CN106294147A (zh) * | 2016-08-09 | 2017-01-04 | 上海盈方微电子有限公司 | 一种linux操作系统的调试方法 |
CN110955598A (zh) * | 2019-11-20 | 2020-04-03 | 杭州迪普科技股份有限公司 | 一种内核态程序的断点处理方法及装置 |
CN112433847A (zh) * | 2020-11-09 | 2021-03-02 | 中国船舶重工集团公司第七0九研究所 | 一种OpenCL内核提交的方法及装置 |
CN115616973A (zh) * | 2022-10-26 | 2023-01-17 | 深圳市汇川技术股份有限公司 | 断点调试功能的实现方法、系统、设备及介质 |
Non-Patent Citations (1)
Title |
---|
嵌入式系统设计开发的相关问题研究;田淑杭;自动化与仪器仪表(第01期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116089316A (zh) | 2023-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6718485B1 (en) | Software emulating hardware for analyzing memory references of a computer program | |
US6964036B2 (en) | Descriptive variables while debugging | |
US7761855B2 (en) | Computer program product and system for altering execution flow of a computer program | |
US5845125A (en) | Debugger using class information and dynamic instance inter-relationships | |
US8370810B2 (en) | Debugging device and debugging method | |
US5193191A (en) | Incremental linking in source-code development system | |
US5201050A (en) | Line-skip compiler for source-code development system | |
US9122794B2 (en) | System and method for debugging domain specific languages | |
US6550056B1 (en) | Source level debugger for debugging source programs | |
US9003367B2 (en) | Specific debug trace collecting | |
US20080127113A1 (en) | Method and system for implementing watchpoints | |
US8752020B2 (en) | System and process for debugging object-oriented programming code leveraging runtime metadata | |
US8997049B1 (en) | Method and system for debugging of compiled code using an interpreter | |
US8756584B2 (en) | Code instrumentation method and code instrumentation apparatus | |
US7240334B1 (en) | Methods, systems, and computer program products for deferred computer program tracing | |
US20100313186A1 (en) | Developer-managed debugger data records | |
US8108840B2 (en) | Method for enhancing debugger performance of hardware assisted breakpoints | |
CN105824750B (zh) | 一种在NorFlash程序空间调试的软断点模拟方法 | |
JPH11110255A (ja) | ソフトウェアをデバッグするための装置および方法 | |
CN116089316B (zh) | 一种基于动态断点的内核驱动数据调试方法 | |
US6611924B1 (en) | Reducing code size of debug output statements | |
US20030070117A1 (en) | Simulation apparatus and simulation method | |
JP2888242B2 (ja) | マイクロプロセッサのプログラム開発システム | |
JPH0283749A (ja) | マイクロプロセッサの内部割込み制御方式 | |
JP2659366B2 (ja) | デバッグ方法及びその装置 |
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 |