CN105204998A - 一种移动终端内核符号表的调试方法和装置 - Google Patents

一种移动终端内核符号表的调试方法和装置 Download PDF

Info

Publication number
CN105204998A
CN105204998A CN201510645878.5A CN201510645878A CN105204998A CN 105204998 A CN105204998 A CN 105204998A CN 201510645878 A CN201510645878 A CN 201510645878A CN 105204998 A CN105204998 A CN 105204998A
Authority
CN
China
Prior art keywords
newly
function
built
kernel
module
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
Application number
CN201510645878.5A
Other languages
English (en)
Other versions
CN105204998B (zh
Inventor
耿兴欢
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huzhou YingLie Intellectual Property Operation Co.,Ltd.
Original Assignee
Shanghai Feixun Data Communication Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Feixun Data Communication Technology Co Ltd filed Critical Shanghai Feixun Data Communication Technology Co Ltd
Priority to CN201510645878.5A priority Critical patent/CN105204998B/zh
Publication of CN105204998A publication Critical patent/CN105204998A/zh
Application granted granted Critical
Publication of CN105204998B publication Critical patent/CN105204998B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种移动终端内核符号表的调试方法和装置,其中方法包括:在移动终端的内核符号表中,查找待更新函数的函数地址;新建内核模块,并在新建内核模块中,设置调试信息;根据待更新函数的函数地址,将待更新函数替换为新建内核模块的函数;根据调试信息,对新建内核模块进行调试。本发明能够准确定位并进行在线更新,节省人力且缩短测试时间。

Description

一种移动终端内核符号表的调试方法和装置
技术领域
本发明涉及测试技术领域,尤其涉及一种移动终端内核符号表的调试方法和装置。
背景技术
随着移动互联网与移动终端产业的发展,移动终端上的应用日渐丰富,甚至有超过电脑终端应用的趋势。不管是安卓(Android)终端研发厂商还是Android应用开发商都需要对应用程序进行大量的调试工作。
但是,基于Linux内核的Android系统复杂而庞大,测试遇到偶发问题的可能性较大。目前对于偶发问题的调试,主要是增加调试信息后,增大测试力度,尽量复现问题,再抓取调试信息进行分析,时间和人力占用较大。而在实际情况中,偶发问题较难复现,当需要调试时一般是增加调试信息后,再次测试,时间周期较长。
发明内容
有鉴于此,本发明提供了一种移动终端内核符号表的调试方法和装置,能够准确定位并进行在线更新,节省人力且缩短测试时间。
本发明提供了一种移动终端内核符号表的调试方法,包括:在移动终端的内核符号表中,查找待更新函数的函数地址;新建内核模块,并在新建内核模块中,设置调试信息;根据待更新函数的函数地址,将待更新函数替换为新建内核模块的函数;根据调试信息,对新建内核模块进行调试。
进一步地,所述内核符号表包括函数和函数地址对应;根据待更新函数,查找对应的函数地址。
进一步地,所述在新建内核模块,具体为:通过静态加载方式新建内核模块,包括把组件添加进内核文件中,在目录Kconfig文件中增加新代码对应的编译选项,在Makefile文件中添加编译条目;或者,通过动态加载方式新建内核模块,包括进入Linux内核,进入/drivers建立文件夹,在文件夹里建立Makefile文件和Kconfig文件;在Makefile文件中添加出口函数,在Kconfig文件中添加入口函数;配置新建内核模块。
进一步地,所述在新建内核模块中,设置调试信息,具体为:采用printk()调试函数,在新建内核模块中设置调试信息。
进一步地,所述根据调试信息,对新建内核模块进行调试,具体为:将新建内核模块的函数使用insmod命令插入到当前系统中,并根据printk()调试函数中的调试信息,对新建内核模块进行调试。
本发明还提供了一种移动终端内核符号表的调试装置,包括:查找模块,用于在移动终端的内核符号表中,查找待更新函数的函数地址;新建模块,用于新建内核模块,并在新建内核模块中,设置调试信息;替换模块,用于根据待更新函数的函数地址,将待更新函数替换为新建内核模块的函数;调试模块,用于根据调试信息,对新建内核模块进行调试。
进一步地,所述新建模块,具体用于:通过静态加载方式或者动态加载方式新建内核模块;采用printk()调试函数,在新建内核模块中设置调试信息。
进一步地,所述调试模块,具体用于:将新建内核模块的函数使用insmod命令插入到当前系统中,并根据printk()调试函数中的调试信息,对新建内核模块进行调试。
和现有技术相比,本发明的有益效果在于:在新建内核模块中,使用Linux内核符号表,对需要的函数位置进行代码替换,增加调试信息,并将新建的内核模块插入到问题系统中,针对Linux内核中的偶发问题,实现代码的在线更新调试,方便问题定位,节省了时间和人力。
附图说明
图1为本发明所公开的移动终端内核符号表的调试方法的流程示意图。
图2为本发明所公开的移动终端内核符号表的调试装置的结构示意图。
具体实施方式
以下将结合附图所示的具体实施方式对本发明进行详细描述,但这些实施方式并不限制本发明,本领域的普通技术人员根据这些实施方式所做出的结构、方法、或功能上的变换均包含在本发明的保护范围内。
图1为本发明所公开的移动终端内核符号表的调试方法的流程示意图。参照图1,本发明的移动终端内核符号表的调试方法,包括:
步骤101,在移动终端的内核符号表中,查找待更新函数的函数地址。
内核符号表是在移动终端的内核内部函数或变量中可供外部引用的函数和变量的符号表。
在本步骤中,内核符号表中一列是函数地址,另一列是函数。如果有需要更新的函数,则在内核符号表中能够查找到对应的函数地址。
步骤102,新建内核模块。
在本步骤中,Linux内核是模块化组成的,它允许内核在运行时动态地向其中插入或从中删除代码,代码包括数据结构和函数等。
内核模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。新建一个内核模块,一般需要包括相关头文件、模块入口函数、模块出口函数等。
可以通过静态加载方式新建内核模块,具体地:把组件都添加进内核文件中,在目录Kconfig文件中增加新代码对应的编译选项,在Makefile文件中添加编译条目。
也可以通过动态加载方式新建内核模块,具体地:进入Linux内核,进入/drivers建立文件夹,在文件夹里建立Makefile文件和Kconfig文件;在Makefile文件中添加出口函数,在Kconfig文件中添加入口函数;进入内核配置页面进行配置。
新建内核的示例如下:
步骤103,在新建内核模块中,设置调试信息。
由于内核模块是一个不与特定进程相关的功能集合,所以内核代码无法轻易地放在调试器中执行,而且也很难跟踪。要想复现内核代码中的错误也是相当困难的,因为这种错误可能导致整个系统崩溃,这样也就破坏了可以用来跟踪它们的现场。
在本步骤中,采用printk()调试函数设置调试信息,具体地:在新建内核模块的代码中的特定位置加入printk()调试函数,能够把调试过程打印到屏幕上,从而可以观察程序的执行路径和调试的变量、指针等信息。
示例如下:
其中,0xC037A69E为从内核符号表中查找到的,内核中goodix_ts_data数据所在的地址。
步骤104,根据待更新函数的函数地址,将待更新函数替换为新建内核模块的函数。
修改为:根据待更新函数的地址,将待更新函数替换为新建内核模块的函数,如步骤103的代码中,ts->fb_notif.notifier_call在原始内核代码中为:
ts->fb_notif.notifier_call=fb_notifier_callback;
其中fb_notifier_callback为原始内核代码中的一个函数。
在新建内核模块中,将其修改为:
ts->fb_notif.notifier_call=changed_notifier_call;
即,内核其他模块调用ts->fb_notif.notifier_call时,原来实际执行的是fb_notifier_callback()函数,而现在执行的是changed_notifier_call()函数。
步骤105,根据调试信息,对新建内核模块进行调试。
在本步骤中,将新建内核模块的文件放置到当前系统使用的内核的源代码中,并在内核配置文件中增加编译选项,如DEBUG_TP_CALLBACK=m,和obj-(DEBUG_TP_CALLBACK)+=hello.o
内核编译时,即会生成hello.ko文件,为新建内核模块文件。
将此新建内核模块文件使用insmod命令插入到当前系统中,就会执行module_init(hello_init)中声明的hello_init函数,从而实现调试功能。
本发明还提供了一种移动终端内核符号表的调试装置,如图2所示,包括:
查找模块201,用于在移动终端的内核符号表中,查找待更新函数的函数地址;
新建模块202,用于新建内核模块,并在新建内核模块中,设置调试信息;
替换模块203,用于根据待更新函数的函数地址,将待更新函数替换为新建内核模块的函数;
调试模块204,用于根据调试信息,对新建内核模块进行调试。
其中,新建模块,具体用于:通过静态加载方式或者动态加载方式新建内核模块;采用printk()调试函数,在新建内核模块中设置调试信息。
调试模块,具体用于:将新建内核模块的函数使用insmod命令插入到当前系统中,并根据printk()调试函数中的调试信息,对新建内核模块进行调试。
本发明的移动终端内核符号表的调试装置的相关技术细节和前述的移动终端内核符号表的调试方法类似,故在此不赘述。
虽然本发明已以较佳实施例披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。

Claims (8)

1.一种移动终端内核符号表的调试方法,其特征在于,包括:
在移动终端的内核符号表中,查找待更新函数的函数地址;
新建内核模块,并在新建内核模块中,设置调试信息;
根据待更新函数的函数地址,将待更新函数替换为新建内核模块的函数;
根据调试信息,对新建内核模块进行调试。
2.如权利要求1所述的移动终端内核符号表的调试方法,其特征在于,所述内核符号表包括函数和函数地址对应;根据待更新函数,查找对应的函数地址。
3.如权利要求1所述的移动终端内核符号表的调试方法,其特征在于,所述在新建内核模块,具体为:
通过静态加载方式新建内核模块,包括把组件添加进内核文件中,在目录Kconfig文件中增加新代码对应的编译选项,在Makefile文件中添加编译条目;或者,
通过动态加载方式新建内核模块,包括进入Linux内核,进入/drivers建立文件夹,在文件夹里建立Makefile文件和Kconfig文件;在Makefile文件中添加出口函数,在Kconfig文件中添加入口函数;配置新建内核模块。
4.如权利要求1所述的移动终端内核符号表的调试方法,其特征在于,所述在新建内核模块中,设置调试信息,具体为:
采用printk()调试函数,在新建内核模块中设置调试信息。
5.如权利要求4所述的移动终端内核符号表的调试方法,其特征在于,所述根据调试信息,对新建内核模块进行调试,具体为:
将新建内核模块的函数使用insmod命令插入到当前系统中,并根据printk()调试函数中的调试信息,对新建内核模块进行调试。
6.一种移动终端内核符号表的调试装置,其特征在于,包括:
查找模块,用于在移动终端的内核符号表中,查找待更新函数的函数地址;
新建模块,用于新建内核模块,并在新建内核模块中,设置调试信息;
替换模块,用于根据待更新函数的函数地址,将待更新函数替换为新建内核模块的函数;
调试模块,用于根据调试信息,对新建内核模块进行调试。
7.如权利要求6所述的移动终端内核符号表的调试装置,其特征在于,所述新建模块,具体用于:
通过静态加载方式或者动态加载方式新建内核模块;
采用printk()调试函数,在新建内核模块中设置调试信息。
8.如权利要求7所述的移动终端内核符号表的调试装置,其特征在于,所述调试模块,具体用于:
将新建内核模块的函数使用insmod命令插入到当前系统中,并根据printk()调试函数中的调试信息,对新建内核模块进行调试。
CN201510645878.5A 2015-09-30 2015-09-30 一种移动终端内核符号表的调试方法和装置 Active CN105204998B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510645878.5A CN105204998B (zh) 2015-09-30 2015-09-30 一种移动终端内核符号表的调试方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510645878.5A CN105204998B (zh) 2015-09-30 2015-09-30 一种移动终端内核符号表的调试方法和装置

Publications (2)

Publication Number Publication Date
CN105204998A true CN105204998A (zh) 2015-12-30
CN105204998B CN105204998B (zh) 2018-01-30

Family

ID=54952692

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510645878.5A Active CN105204998B (zh) 2015-09-30 2015-09-30 一种移动终端内核符号表的调试方法和装置

Country Status (1)

Country Link
CN (1) CN105204998B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110837562A (zh) * 2018-08-17 2020-02-25 阿里巴巴集团控股有限公司 案件的处理方法、装置和系统
CN116795726A (zh) * 2023-08-25 2023-09-22 麒麟软件有限公司 一种在线调试Linux内核的方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101281488A (zh) * 2007-04-06 2008-10-08 上海宇梦通信科技有限公司 Linux操作系统的内核调试方法
CN101634965A (zh) * 2008-07-24 2010-01-27 三星电子(中国)研发中心 一种Linux内核级单元测试的方法
US20150067655A1 (en) * 2013-08-29 2015-03-05 Stmicroelectronics (Grenoble 2) Sas Dynamic Debugging Method of a Software Module and Corresponding Device
CN104915209A (zh) * 2015-06-15 2015-09-16 上海斐讯数据通信技术有限公司 一种linux内核跟踪调试与修复问题的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101281488A (zh) * 2007-04-06 2008-10-08 上海宇梦通信科技有限公司 Linux操作系统的内核调试方法
CN101634965A (zh) * 2008-07-24 2010-01-27 三星电子(中国)研发中心 一种Linux内核级单元测试的方法
US20150067655A1 (en) * 2013-08-29 2015-03-05 Stmicroelectronics (Grenoble 2) Sas Dynamic Debugging Method of a Software Module and Corresponding Device
CN104915209A (zh) * 2015-06-15 2015-09-16 上海斐讯数据通信技术有限公司 一种linux内核跟踪调试与修复问题的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
胡勇其等: "Linux目标代码内核补丁的机理与应用", 《计算机工程与应用》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110837562A (zh) * 2018-08-17 2020-02-25 阿里巴巴集团控股有限公司 案件的处理方法、装置和系统
CN110837562B (zh) * 2018-08-17 2023-05-02 阿里巴巴集团控股有限公司 案件的处理方法、装置和系统
CN116795726A (zh) * 2023-08-25 2023-09-22 麒麟软件有限公司 一种在线调试Linux内核的方法
CN116795726B (zh) * 2023-08-25 2023-11-28 麒麟软件有限公司 一种在线调试Linux内核的方法

Also Published As

Publication number Publication date
CN105204998B (zh) 2018-01-30

Similar Documents

Publication Publication Date Title
CN103294598B (zh) 一种源代码检查方法及装置
CN104102574A (zh) 应用程序测试方法及装置
CN110580226B (zh) 操作系统级程序的目标码覆盖率测试方法、系统及介质
US20090319995A1 (en) Enhancing source code debugging and readability using visual symbols
CN108334515B (zh) 一种处理崩溃文件中堆栈地址的方法、装置及系统
US7178135B2 (en) Scope-based breakpoint selection and operation
CN103049371A (zh) Android应用程序测试方法和测试装置
CN105335137A (zh) 用于处理源文件的方法和装置
CN111459495A (zh) 单元测试代码文件生成方法、电子装置及存储介质
CN110795910B (zh) 一种文本信息处理方法、装置、服务器及存储介质
CN102722438B (zh) 一种内核调试的方法和设备
CN104102581A (zh) 一种实现单元测试的方法及装置
JP2017084082A (ja) シミュレーション装置、試験シナリオファイル作成方法、及び試験シナリオファイルを用いた試験方法
CN107797805B (zh) 一种代码封装方法、装置及计算机可读存储介质
CN105204998A (zh) 一种移动终端内核符号表的调试方法和装置
CN108763054B (zh) 测试案例的测试效果展示方法、电子装置及存储介质
CN114356779A (zh) 编程语言调试方法、装置及终端设备
CN105279091A (zh) 一种基于动态污点分析的按需跟踪方法及装置
CN112346918A (zh) 芯片验证中辅助波形debug的方法及应用
CN110908882A (zh) 一种应用程序的性能分析方法、装置、终端设备及介质
CN112035117A (zh) 页面展示系统、方法及装置
CN108614704B (zh) 代码编译方法及装置
CN111078526A (zh) 一种测试用例的生成方法、装置及存储介质
CN115757174A (zh) 一种数据库的差异检测方法及装置
CN111385661A (zh) 语音控制全屏播放的方法及终端

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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20201118

Address after: Room 10242, No. 260, Jiangshu Road, Xixing street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee after: Hangzhou Jiji Intellectual Property Operation Co., Ltd

Address before: 201616 Shanghai city Songjiang District Sixian Road No. 3666

Patentee before: Phicomm (Shanghai) Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20201222

Address after: 8319 Yanshan Road, Bengbu City, Anhui Province

Patentee after: Bengbu Lichao Information Technology Co.,Ltd.

Address before: Room 10242, No. 260, Jiangshu Road, Xixing street, Binjiang District, Hangzhou City, Zhejiang Province

Patentee before: Hangzhou Jiji Intellectual Property Operation Co., Ltd

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210309

Address after: 313000 room 1019, Xintiandi commercial office, Yishan street, Wuxing District, Huzhou, Zhejiang, China

Patentee after: Huzhou YingLie Intellectual Property Operation Co.,Ltd.

Address before: 8319 Yanshan Road, Bengbu City, Anhui Province

Patentee before: Bengbu Lichao Information Technology Co.,Ltd.