前言
在程序开发过程中,一个公认的事实是编写代码并不难,但是如何写出正确的代码、如何排除代码中的错误,却并不是一件简单的事情。如何排除代码中的错误,这就涉及软件的调试。调试技术的理论基础并不复杂,但是调试本身却是一门实践性非常强的技术。
需要说明的是,嵌入式系统中的软件调试与桌面软件的调试有很大的不同。调试嵌入式系统时,调试器和被调试程序往往是物理上分离的。调试器运行在宿主机上,而被调试程序运行在目标机上,宿主机与目标机之间通过某种媒介进行通信。同时,还要在目标机上运行一个称为调试代理(Debug Agent)的监控程序,由它来负责与运行在宿主机上的调试器进行通信,控制被调试程序的执行,并将被调试程序的执行情况及时反馈给调试器。这进一步增加了调试的复杂性。
当前图书市场上有关调试技术的书籍并不多。但是,对于从事实际开发的工程人员而言,尤其是对广大的嵌入式系统程序员而言,调试是一个无法回避的永恒话题。因此本书以嵌入式开发中的调试技术和调试手段作为全书的核心,在当前众多的计算机编程开发书籍中另辟蹊径,独树一帜,对于刚接触嵌入式程序开发的读者而言,必将大有裨益。同时,对于经验丰富的程序员而言,本书也具有较大的参考价值。
本书所用平台
本书采用的嵌入式硬件平台为Intel公司的Sitsang评估板,其上运行的操作系统为ARM-Linux 2.4.19。本书宿主机端软件平台采用Red Hat 9.0(Linux 2.4.20-8),本地调试器为GDB 5.3(Red Hat 9.0默认配置),交叉调试器在GDB 6.4的基础上构建。另外,在本书写作的后期,作者换到了一台笔记本电脑上工作,为了与时俱进,其上运行的是Fedora Core操作系统。本质上讲,Fedora Core源自Red Hat,两者并无根本不同。为消除读者对此存疑,特此予以澄清。
尽管本书采用的软硬件平台是固定的,但是书中演示的大部分实例都不依赖于具体的软硬件环境。因此如果读者所采用的软硬件平台与作者书中采用的有所不同,也无须多虑,大部分功能和操作都是相同的。
本书内容组织
本书共分为3篇。
上篇基础篇,包括第1~2章。主要对调试的基础知识进行了大致的概览,对各种调试手段进行了简单的说明和对比。
中篇系统篇,包括第3~7章。第3章介绍GDB调试器的使用;第4章主要介绍如何通过GDB进行远程调试,同时也涉及了远程调试可能要用到的一些工具,如NFS、minicom等;第5~7章主要介绍在一些特定开发场景下所采用的调试技术,包括网络环境下的调试、多线程与多进程环境下的调试、静态库与动态库的调试,等等。
下篇应用篇,包括第8~9章。这部分内容属于较综合的话题,运用到了前述章节中所讲述的一些内容。第8章围绕MPEG-4视频流的解码和播放展开,而第9章则给出了一个基于GPS的移动定位终端的开发。
本书配套光盘内容及使用方法
本书配套光盘包含书中相关的补充资料、与Sitsang评估板相关的工具链和源代码、本书第3~9章的源代码,以及书中使用到的工具和软件库等。
使用时只需将本光盘放入光盘驱动器中,选择各文件夹浏览即可。
本书读者对象
● Linux编程初学者
● 通过GDB调试程序的开发人员
● 基于Linux的嵌入式系统开发人员
致谢
本书由罗克露教授主编,陈云川编著,参编人员还有王治国、冯强、曾德惠、许庆华、程亮、周聪、黄志平、胡松、邢永锋、邵军、边海龙、刘达因、赵婷、马鸿娟、侯桐、赵光明、李胜、李辉、侯杰、王红研、王磊、闫守红、康涌泉、李欢、蒋杼倩、王小东、张森、张正亮、宋利梅、何群芬、程瑶等,在此表示衷心的感谢。
在本书的写作过程中,得到了电子科技大学电子工程学院伍瑞卿老师和顾庆水老师的无私指导和帮助,得以使用Intel PCA联合实验室的Sitsang评估板作为本书所使用的硬件平台。在此向两位老师表示衷心的感谢。
本书的写作也得到了电子科技大学计算机学院实时系统教研室廖勇博士的大力支持和帮助,在此致以诚挚的谢意。
还要感谢的朋友包括陈兆荣、刘国霞、黄伟、刘峰、马俊、赵微、丁熠、骆张强,以及电子科技大学实时系统教研室多媒体组的所有成员和网友twentyone。
特别要感谢亲爱的陈静女士在本书写作过程中所给予的理解和支持,陪我一起走过了很多艰苦之旅。同时,在“5·12”汶川大地震发生之后,对于编者前往绵竹市从事志愿者工作的行为给予了极大支持,一个人度过了很多个担惊受怕的夜晚。谢谢您,静!
由于时间仓促,书中疏漏之处在所难免,欢迎广大读者和同行批评指正。
配套服务
为充分展现本书编写特点,帮助读者深刻理解本书编写意图与内涵,进一步提高对本书教学的使用效率,我们建立本书使用指导联络方式,是读者与编者之间交流沟通的直通车。欢迎读者将图书使用过程中的问题与各种探讨、建议反馈给我们,本书编者会竭诚给您满意的答复。我们的联系方式是E-mail:china_54@tom.com。