- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第21章内核和应用程序调试技术剖析
第21章 内核和应用程序调试技术 调试程序的目的是定位程序中的问题。调试程序无外乎几种方式:查看程序运行时内部数据、跟踪程序运行、查看信号量的变化。调试器就是一类帮助程序员调试程序的工具。本章讲解Linux系统下最基本的调试器gdb使用方法,以及使用kdb调试内核的技术,主要内容如下: GDB调试器介绍 基本的调试技术 调试意外终止的程序 使用printk()调试Linux内核 使用KGDB调试Linux内核 21.1 使用GDB调试应用程序概述 GDB是GNU开源组织发布的一款调试器,提供了丰富的功能。GDB调试器不仅能调试普通的应用程序,还可以调试正在运行的进程和线程,甚至Linux内核。GDB是一个开源的调试器,不仅能调试C语言编写的代码,还可以调试Ada、C++、Java、Pascal等语言编写的程序。GDB支持Linux、Windows等多种平台,可以非常方便的调试各种类型的程序。不过,GDB最大的不足是一个命令行的工具,对初学者来说入门比较麻烦,尤其是用惯了VisualC++之类图形化调试器的开发人员。 GDB的功能可以分成4类:提供多种方式加载被调试的程序;为程序设置断点,可以根据用户设置的表达式设置断点;检查程序运行过程中各种状态和和信号的变化;可以动态改变程序执行的环境。本节介绍GDB在Linux环境下的各种调试技术。 21.2 基本的调试技术 GDB的功能通过内部的命令和启动时命令行提供,命令行的格式如下: gdb [options] [executable-file [core-file or process-id]] gdb [options] --args executable-file [inferior-arguments ...] 在GDB的命令行可以输入参数和选项,包括指定被调试程序的参数和进程号等。一般使用“gdb 被调试程序名”的形式启动GDB,不需要指定参数。有关GDB的参数和内置命令可以参考附录。 21.2.1 列出源代码 列出代码是一个必要功能。对于GDB这种命令行的调试器来说,调试过程中屏幕的信息在不断更新,如果没有查看代码功能,用户操作很不方便。GDB显示代码的命令是“list”。 (1)启动gdb调试器: (2)进入gdb调试环境后,输入命令“list”,然后回车,gdb打印出最开始的代码。 (3)在调试环境下,继续输入“list”回车后。 (4)在调试过程中,代码会经常改变,使用行号的方法很不方便。gdb提供了通过函数名显示代码的功能。 21.2.2 断点管理 调试中最常用的功能就是断点。断点的意思是给程序代码某处做一个标记,当程序运行到此处的时候就会停下来,等待用户的操作。断点通常被设置在程序出错的前面几行,当程序运行到断点以后,程序员通过单步运行程序,并且查看相关变量状态,可以定位错误。 1.设置断点 2.查看断点 3.关闭断点 4.删除断点 21.2.3 执行程序 执行程序比较简单,gdb提供了“run”和“continue”两个命令。这两个命令共同特点是,在遇到用户设置的断点后会停下来。不同的是,run命令仅用在程序最开始执行的时候。也就是说,run命令把整个程序运行起来,程序运行以后不能使用run命令,因为程序不能被反复调试运行。continue命令只能在程序运行后执行,主要用在程序被断点停住以后,通过continue命令继续执行。 调试程序可以控制程序单步执行,有两个命令“next”表示执行下一条语句,“step”表示跳转到函数内部执行。执行程序的命令在节介绍。 21.2.4 显示程序变量 gdb提供“print”和“display”两条显示命令。这两条命令的功能基本相同,区别在于display可以锁定显示的变量或者寄存器,当执行程序时,每执行一次都会显示被锁定的变量。print命令只能在调用的时候显示指定的变量或者寄存器值。 21.2.5 信号管理 gdb的一个特色是能模拟操作系统向被调试的应用程序发送信号。使用“signal 信号名称”发出指定的信号。 21.1.6 调试实例 在学习了gdb的基本使用方法以后,本节给出一个gdb调试的实例。 21.3 多进程调试 在嵌入式中,需要采集多种信号,或者响应外部设备发送的某种协议请求。对于这种需求,往往需要在Linux系统设置一些进程,本节介绍多进程和多线程程序调试方法。 gdb提供了多进程程序的调试能力,其调试过程对用户来说很简单,用户只需要指定进程的ID和带有调试信息的程序文件即可调试,其余的过程与普通程序调试基本类似。 21.4 调试意外终止的程序 如果读者编译例21-1的程序后运行,会得到一个出错提示如下: $ ./HttpDemo Segmentation faul
您可能关注的文档
最近下载
- 融合新闻:通往未来新闻之路-暨南大学-中国大学MOOC慕课答案.pdf VIP
- 新媒体文化十二讲_暨南大学中国大学mooc课后章节答案期末考试题库2023年.docx VIP
- 《倍的认识》作业设计.pdf VIP
- 二次根式单元测试.doc VIP
- 806机械设计-四川l轻化工大学2022年硕士研究生考试自命试题.pdf VIP
- 计量经济学课程论文.doc VIP
- 《计量经济学》课程论文.docx VIP
- 医药营销团队绩效考核方案.docx VIP
- 钢筋混凝土三通井工程量计算表.xlsx VIP
- 新媒体文化十二讲(暨南大学)中国大学MOOC慕课章节测验答案(课程ID:1206589806).pdf VIP
原创力文档


文档评论(0)