Linux开发工具箱--项目开发的最有效途径.pdf
时间:05-13 16:08
查看:2348次
下载:162次
简介:
《Linux开发工具箱》将系统性地介绍GNU/Linux的开源工具,并通过可以被读者容易修改的简明示例说明如何使用这些工具,以满足读者的实际需求。
《Linux开发工具箱》首先介绍如何下载、构建和安装开源项目,如何发布开源工具,以及如何避免将时间浪费到还未准备好的项目中,并引导读者构建自己的项目。然后通过示例演示了如何在文本编辑器中进行查找操作,展示了几个常用文本编辑器中会用到的小技巧。
书中接下来对Linux内核的基础知识和操作系统的内部原理进行了详细且通俗易懂的阐述,并示范了如何将这些知识应用到更高级的工具中。还重点讲解sar、vmstat、valgrind和strace等工具的输出,以及如何将它们运用到应用程序中;如何利用各种编程API来开发适用于自己的工具。
最后,作者介绍了可以提高软件性能的工具;解释了如今市面上的多芯CPU的内在原理,并演示了如何从这些系统中获取最佳性能;以及介绍了在各种环境下调试代码的工具和技术。
对于程序员来说,如果希望自己开发出来的程序更为简洁有效,如果想对Linux编程环境有更深刻的理解,那么,《Linux开发工具箱》提供的资料相信能给您带来惊喜!
目录
第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.4RPM格式的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.1Apt:高级软件包工具26
1.8.2Yum:Yellowdog修订版更新26
1.8.3Synaptic:TheGUIFrontEndForApt27
1.8.4up2date:RedHat软件包更新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.2make工具34
2.2.3程序的链接52
2.2.4深入理解库53
2.3创建过程57
2.3.1GNU构建工具57
2.3.2配置阶段57
2.3.3构建阶段:make59
2.3.4安装阶段:makeinstall60
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.1man页面80
3.2.2man结构81
3.2.3查找man页面:apropos82
3.2.4查找正确的man页面:whatis84
3.2.5在man页面中查找85
3.2.6一些推荐的man页面86
3.2.7GNUinfo88
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/doc92
3.3.2交叉引用和索引93
3.3.3查询软件包94
3.4文件格式95
3.4.1TeX/LaTtex/DVI95
3.4.2Texinfo96
3.4.3DoCbook96
3.4.4HTML97
3.4.5PostScript98
3.4.6便携式文件格式(PDF)99
3.4.7troff100
3.5来自互联网的信息100
3.5.1www.gnu.org100
3.5.2sourceforge.net101
3.5.3Linux文件项目101
3.5.4Usenet(世界性的新闻组网络系统)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.3vi和Emacs113
4.2.4Vim:vi扩展113
4.2.5Emacs130
4.2.6反对复制品137
4.2.7GUI文本编辑器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.4diff和patch简介149
4.3.5检查和合并更改152
4.4源代码的优化器和浏览器157
4.4.1缩进代码优化器158
4.4.2Astyle风格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.5I/O调度程序217
5.5.1Linus电梯式调度(akanoop)218
5.5.2I/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本章讨论的APIs242
5.7.3在线资源242
5.7.4参考资料242
第6章进程243
6.1简介243
6.2进程的产生243
6.2.1fork和vfork244
6.2.2写拷贝244
6.2.3clone245
6.3exec函数245
6.3.1可执行脚本246
6.3.2可执行目标文件248
6.3.3二进制文件248
6.4wait实现进程同步250
6.5进程的内存占用252
6.5.1文件描述符254
6.5.2堆栈259
6.5.3常驻内存和固定内存260
6.6设定进程限制260
6.7进程和procfs263
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系统调用和本章用到的API272
6.9.2本章用到的工具272
6.9.3在线资源272
第7章进程通信273
7.1简介273
7.2使用纯文本文件的IPC274
7.2.1文件加锁279
7.2.2使用文件进行IPC的缺点279
7.3共享内存279
7.3.1POSIX共享内存API280
7.3.2SystemV共享内存API283
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.1SystemV消息队列306
7.7.2POSIX消息队列309
7.7.3POSIX与SystemV的消息队列的区别314
7.8信号量314
7.8.1POSIX信号量使用的API318
7.8.2SystemV信号量使用的API321
7.9小结323
7.9.1本章中用到的系统调用和API323
7.9.2参考资料325
7.9.3在线资源325
第8章使用shell命令调试IPC327
8.1简介327
8.2打开文件时用到的工具327
8.2.1lsof328
8.2.2fuser329
8.2.3ls330
8.2.4file330
8.2.5stat330
8.3查看文件中的数据331
8.3.1字符串命令334
8.3.2xxd命令334
8.3.3hexdump命令335
8.3.4od命令336
8.4用于VIPC系统的内核工具337
8.4.1V系统共享内存337
8.4.2V系统消息队列340
8.4.3V系统的信号量340
8.5POSIXIPC用到的工具341
8.5.1POSIX共享内存342
8.5.2POSIX消息队列342
8.5.3POSIX信号量343
8.6信号用到的工具344
8.7管道和套接字用到的工具346
8.7.1管道和FIFO346
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.2CPU利用率和总线冲突363
9.2.3设备和中断365
9.2.4查找系统性能问题的工具371
9.3应用程序性能377
9.3.1计时命令的第一步378
9.3.2x86info处理器结构379
9.3.3使用Valgrind检查指令效率382
9.3.4ltrace简介385
9.3.5使用strace监视程序性能387
9.3.6传统性能优化工具:gcov和gprof388
9.3.7OProfile简介394
9.4多处理器平台400
9.4.1SMP硬件的类型400
9.4.2SMP机上的编程实现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最基本的调试工具:printf410
10.2.1使用printf存在的问题410
10.2.2有效地使用printf414
10.2.3关于printf调试工具的结束语421
10.3GNU下最好用的调试器:gdb422
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.4glibc工具457
10.5.5使用valgrind调试内存460
10.5.6使用ElectricFence检测内存泄漏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
……