Linux开发工具箱——项目开发的最有效途径

Linux开发工具箱——项目开发的最有效途径"

作者:卢红星
ISBN:9787302177869
定价:¥58
字数:千字
页数:
出版时间:2008.09.01
开本:
版次:1-1
装帧:
出版社:清华大学出版社
简介

第1章  开源工具的下载和安装:包括发行开源码使用的机制,讨论了不同版本使用的多种软件包格式以及它们各自的优缺点,并介绍了一些维护软件包的工具以及使用方法。

第2章  从源代码构建:涉及到构建开源项目的基本知识,介绍了一些用来创建软件的工具以及合并工具,本章还提供了一些熟练使用make的方法和技巧。还演示了如何配置同GNU的autoconf工具一同发行的项目,以使用户可以定制它们来满足要求。最后,讲解了许多程序员经常误解的构建阶段,并说明了一些很可能碰到的错误和警告,以及如何解释它们。

第3章  查找帮助:介绍了您可能不太了解的Linux版本中的各种文件格式,还介绍了用来获取这些格式的工具,并讨论了使用它们的有效方法。

第4章  编辑和保存源文件:讨论了程序员使用的各种文本编辑器以及它们各自的优缺点,并介绍了每个程序员都应注重的并用来衡量编辑器优劣的一些特性。本章也涉及到版本控制的基本知识,这对于软件项目管理是非常关键的技术。

第5章  开发者必备内核知识:从用户角度来介绍内核。本章中提供了理解Linux系统的工作机制所需的必备背景知识,并介绍了几个允许用户查看代码如何影响内核的工具。

第6章  进程:重点讲解进程、进程的特性以及如何管理进程。本章介绍了引入工具以及理解它们为什么有用所需的大量背景知识。另外,本章还介绍了几个编程API,可以用来创建自己的工具。

第7章  进程通信:介绍了进程间通信(IPC)的一些概念。本章包含了第8章所需的大部分背景知识。对于每个IPC机制,介绍了需要在运行实例环境下使用它的API。

第8章  使用shell命令调试IPC:介绍了一些用来调试使用IPC的应用程序的工具。基于第7章中的内容,有助于解释这些工具的输出信息,这些信息是难以理解的。

第9章  性能优化:介绍了衡量系统性能及个人应用程序性能的工具。本章通过一些示例说明编程设计是如何影响性能的,还讨论了多核处理器所特有的几个性能问题。

第10章  调试:介绍了一些可以用来调试应用程序的工具和技术。并介绍了一些包括Valgrind和Electric Fence在内的开源内存调试工具,而且深入讲解了gdb的性能以及如何有效地使用它。

前言

序

  

  如果您已经掌握了使用Linux的基本操作,比如会使用ls、grep、find和sort这样的命令,而且还是一名C或C++程序员,知道如何使用Linux系统调用,就应该明白除了能使用鼠标“单击”之外,Linux还能给自己的生活带来更多的方便——只是现在还不知道怎样做到而已,所以您会问自己:“我该如何去做呢?”

  本书会帮您回答这个问题。作者以其广博的知识,向那些非Linux初学者展示了如何攀越下一阶段并走向精通的求知之路。

  从用于调试和性能分析的命令行工具,到/proc目录下的文件列表,本书将会向您介绍这些Linux行家里手所熟练使用的各种工具,从而使您在日常生活中更方便、更有效地使用Linux。

  本书除了告诉您很多的“是什么”(什么工具,什么选项,什么文件),还会告诉您“为什么”。本书会解释它们的运行原理,使您能知其然并知其所以然,最终将Linux(还有UNIX)的精华了然于胸。

  本书是献给Linux程序员的一席饕餮大餐,希望您能用心品味,至少我是这么做的。

  开始享受吧!

  

  丛书主编

  Arnold Robbins

  

  

   

  

  

  

  

  

  

  

目录

目    录

第1章  开源工具的下载和安装 1

1.1  简介 1

1.2  什么是开放源码 2

1.3  开放源码的意义 2

1.3.1  搜索工具 2

1.3.2  版本格式 3

1.4  存档文件 4

1.4.1  识别存档文件 5

1.4.2  查询存档文件 6

1.4.3  提取存档文件 9

1.5  认识软件包管理器 10

1.5.1  源代码或二进制格式的选择 11

1.5.2  使用软件包 12

1.6  关于安全性和软件包 13

1.6.1  验证的必要性 14

1.6.2  软件包的基本认证 14

1.6.3  数字签名的软件包验证机制 15

1.6.4  RPM格式的GPG签名 16

1.6.5  何时不能验证软件包 19

1.7  检查软件包 20

1.7.1  查看软件包 20

1.7.2  深入理解RPM软件包 22

1.7.3  深入理解Debian软件包 23

1.8  软件包更新 25

1.8.1  Apt:高级软件包工具 26

1.8.2  Yum: Yellowdog修订版更新 26

1.8.3  Synaptic: The GUI Front 

End For Apt 27

1.8.4  up2date:Red Hat软件包更新 28

1.9  小结 29

1.9.1  本章用到的工具 29

1.9.2  网络资源 29

第2章  从源代码构建 31

2.1  简介 31

2.2  构建工具 32

2.2.1  背景知识 32

2.2.2  make工具 34

2.2.3  程序的链接 52

2.2.4  深入理解库 53

2.3  创建过程 57

2.3.1  GNU构建工具 57

2.3.2  配置阶段 57

2.3.3  构建阶段:make 59

2.3.4  安装阶段:make install 60

2.4  理解错误和警告 60

2.4.1  常见的Makefile错误 61

2.4.2  配置阶段的错误 63

2.4.3  创建阶段的错误 64

2.4.4  理解编译器错误 66

2.4.5  理解编译器警告信息 68

2.4.6  理解链接器错误 76

2.5  小结 77

2.5.1  本章用到的工具 77

2.5.2  网络资源 78

第3章  查找帮助 79

3.1  简介 79

3.2  在线帮助工具 80

3.2.1  man页面 80

3.2.2  man结构 81

3.2.3  查找man 页面:apropos 82

3.2.4  查找正确的man 页面:whatis 84

3.2.5  在man页面中查找 85

3.2.6  一些推荐的man页面 86

3.2.7  GNU info 88

3.2.8  浏览info页面 88

3.2.9  查找info页面 90

3.2.10  推荐info页面 91

3.2.11  桌面帮助工具 91

3.3  其他 92

3.3.1  /usr/share/doc 92

3.3.2  交叉引用和索引 93

3.3.3  查询软件包 94

3.4  文件格式 95

3.4.1  TeX/LaTtex/DVI 95

3.4.2  Texinfo 96

3.4.3  DoCbook 96

3.4.4  HTML 97

3.4.5  PostScript 98

3.4.6  便携式文件格式( PDF ) 99

3.4.7  troff 100

3.5  来自互联网的信息 100

3.5.1  www.gnu.org 100

3.5.2  sourceforge.net 101

3.5.3  Linux文件项目 101

3.5.4  Usenet(世界性的新闻组

网络系统) 102

3.5.5  邮件列表 102

3.5.6  其他论坛 102

3.6  查找Linux内核信息 103

3.6.1  内核构建 103

3.6.2  内核模块 105

3.6.3  混杂(miscellaneous)文件 106

3.7  小结 106

3.7.1  本章用到的工具 106

3.7.2  在线资源 106

第4章  编辑和保存源文件 109

4.1  简介 109

4.2  文本编辑器 110

4.2.1  默认编辑器 111

4.2.2  在文本编辑器中查找 111

4.2.3  vi和Emacs 113

4.2.4  Vim:vi扩展 113

4.2.5  Emacs 130

4.2.6  反对复制品 137

4.2.7  GUI文本编辑器 139

4.2.8  内存使用率 144

4.2.9  编辑器概述 145

4.3  版本控制 145

4.3.1  版本控制基础 145

4.3.2  定义版本控制的术语 147

4.3.3  支持工具 148

4.3.4  diff和patch简介 149

4.3.5  检查和合并更改 152

4.4  源代码的优化器和浏览器 157

4.4.1  缩进代码优化器 158

4.4.2  Astyle风格 160

4.4.3  用cflow分析代码 160

4.4.4  用ctags分析代码 163

4.4.5  用cscope浏览代码 163

4.4.6  用Doxygen浏览和记录代码 164

4.4.7  使用编译器分析代码 165

4.5  小结 167

4.5.1  本章用到的工具 168

4.5.2  参考资料 168

4.5.3  在线资源 168

第5章  开发者必备内核知识 171

5.1  简介 171

5.2  用户模式与内核模式 172

5.2.1  系统调用 173

5.2.2  用户空间与内核空间的

数据传送 175

5.3  进程调度程序 175

5.3.1  初识调度 176

5.3.2  阻塞,抢先占有和放弃 177

5.3.3  调度的优先与公平 178

5.3.4  优先权和Nice值 182

5.3.5  实时优先权 183

5.3.6  创建实时进程 185

5.3.7  进程状态 186

5.3.8  时间度量 190

5.4  设备和设备驱动程序 198

5.4.1  设备驱动程序的类型 199

5.4.2  内核模块 200

5.4.3  设备节点 201

5.4.4  设备和输入/输出 210

5.5  I/O调度程序 217

5.5.1  Linus电梯式调度(aka noop) 218

5.5.2  I/O调度程序的截止时间 219

5.5.3  先占I/O 调度程序 219

5.5.4  完整的公平地排队I/O

调度程序 219

5.5.5  选择一个I/O 调度程序 219

5.6  用户空间的内存管理 220

5.6.1  虚拟内存的解释 220

5.6.2  内存耗尽 232

5.7  小结 241

5.7.1  本章用到的工具 241

5.7.2  本章讨论的APIs 242

5.7.3  在线资源 242

5.7.4  参考资料 242

第6章  进程 243

6.1  简介 243

6.2  进程的产生 243

6.2.1  fork 和vfork 244

6.2.2  写拷贝 244

6.2.3  clone 245

6.3  exec函数 245

6.3.1  可执行脚本 246

6.3.2  可执行目标文件 248

6.3.3  二进制文件 248

6.4  wait实现进程同步 250

6.5  进程的内存占用 252

6.5.1  文件描述符 254

6.5.2  堆栈 259

6.5.3  常驻内存和固定内存 260

6.6  设定进程限制 260

6.7  进程和procfs 263

6.8  进程管理工具 265

6.8.1  通过ps命令显示进程信息 265

6.8.2  使用formats增加进程信息 267

6.8.3  查找名中带有ps和pgrep

的进程 269

6.8.4  利用pmap查看进程使用

的空间 269

6.8.5  通过名字发送信号给进程 271

6.9  小结 271

6.9.1  系统调用和本章用到的API 272

6.9.2  本章用到的工具 272

6.9.3  在线资源 272

第7章  进程通信 273

7.1  简介 273

7.2  使用纯文本文件的IPC 274

7.2.1  文件加锁 279

7.2.2  使用文件进行IPC的缺点 279

7.3  共享内存 279

7.3.1  POSIX共享内存API 280

7.3.2  System V共享内存API 283

7.4  信号 286

7.4.1  向进程发送信号 286

7.4.2  信号处理 287

7.4.3  信号掩码和信号处理 288

7.4.4  实时信号 291

7.4.5  具有sigqueue和sigaction

的高级信号 293

7.5  管道 295

7.6  套接字 296

7.6.1  创建套接字 296

7.6.2  使用socketpair的本地套

接字示例 298

7.6.3  使用本地套接字的客户端/

服务器端示例 300

7.6.4  使用网络套接字的客户端/

服务器端示例 305

7.7  消息队列 305

7.7.1  System V消息队列 306

7.7.2  POSIX消息队列 309

7.7.3  POSIX与System V的消息

队列的区别 314

7.8  信号量 314

7.8.1  POSIX信号量使用的API 318

7.8.2  System V 信号量使用的API 321

7.9  小结 323

7.9.1  本章中用到的系统

调用和API 323

7.9.2  参考资料 325

7.9.3  在线资源 325

第8章  使用shell命令调试IPC 327

8.1  简介 327

8.2  打开文件时用到的工具 327

8.2.1  lsof  328

8.2.2  fuser 329

8.2.3  ls   330

8.2.4  file  330

8.2.5  stat  330

8.3  查看文件中的数据 331

8.3.1  字符串命令 334

8.3.2  xxd 命令 334

8.3.3  hexdump 命令 335

8.3.4  od 命令 336

8.4  用于V IPC系统的内核工具 337

8.4.1  V系统共享内存 337

8.4.2  V系统消息队列 340

8.4.3  V系统的信号量 340

8.5  POSIX IPC用到的工具 341

8.5.1  POSIX共享内存 342

8.5.2  POSIX消息队列 342

8.5.3  POSIX 信号量 343

8.6  信号用到的工具 344

8.7  管道和套接字用到的工具 346

8.7.1  管道和FIFO 346

8.7.2  套接字 347

8.8  使用索引识别文件和

IPC对象  349

8.9  小结 351

8.9.1  本章用到的工具 351

8.9.2  在线资源 351

  

第9章  性能优化 353

9.1  简介 353

9.2  系统性能 353

9.2.1  内存问题 354

9.2.2  CPU利用率和总线冲突 363

9.2.3  设备和中断 365

9.2.4  查找系统性能问题的工具 371

9.3  应用程序性能 377

9.3.1  计时命令的第一步 378

9.3.2  x86info处理器结构 379

9.3.3  使用Valgrind检查指令效率 382

9.3.4  ltrace简介 385

9.3.5  使用strace监视程序性能 387

9.3.6  传统性能优化工具:gcov

和gprof 388

9.3.7  OProfile简介 394

9.4  多处理器平台 400

9.4.1  SMP硬件的类型 400

9.4.2  SMP机上的编程实现 404

9.5  小结 406

9.5.1  本章介绍的基本性能 406

9.5.2  本章介绍的专业术语 406

9.5.3  本章用到的工具 406

9.5.4  在线资源 407

9.5.5  参考资料 407

第10章  调试 409

10.1  简介 409

10.2  最基本的调试工具:printf 410

10.2.1  使用printf存在的问题 410

10.2.2  有效地使用printf 414

10.2.3  关于printf调试工具的

结束语 421

10.3  GNU下最好用的

调试器:gdb 422

10.3.1  使用gdb运行代码 423

10.3.2  停止和重新执行 424

10.3.3  检查和管理数据 432

10.3.4  使用gdb连接正在

运行的进程 441

10.3.5  调试内核文件 442

10.3.6  使用gdb进行多线程调试 445

10.3.7  调试优化的代码 446

10.4  调试共享对象 449

10.4.1  使用共享对象的

时间和原因 449

10.4.2  创建共享对象 449

10.4.3  定位共享对象 450

10.4.4  覆盖默认共享目标的位置 451

10.4.5  共享对象的安全问题 451

10.4.6  共享对象使用的工具 452

10.5  查找内存问题 454

10.5.1  两次释放 454

10.5.2  内存泄露 455

10.5.3  缓冲区溢出 455

10.5.4  glibc工具 457

10.5.5  使用valgrind调试内存 460

10.5.6  使用Electric Fence检测

内存泄漏 465

10.6  非常规技术 467

10.6.1  创建自己的黑匣子 467

10.6.2  获取运行时的堆栈轨迹 470

10.6.3  强制内核转储 471

10.6.4  使用信号 473

10.6.5  使用procfs调试 473

10.7  小结 475

10.7.1  本章用到的工具 476

10.7.2  在线资源 476

10.7.3  参考资料 476

  

  

  

  

  

  

  

  

  

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个