软件调试(第2版)卷1:硬件基础 - (EPUB全文下载)

文件大小:0.55 mb。
文件格式:epub 格式。
书籍内容:

软件调试(第2版)卷1:硬件基础
第一篇 绪 论
第1章 软件调试基础
第二篇 CPU及其调试设施
第2章 CPU基础
第3章 中断和异常
第4章 断点和单步执行
第5章 分支记录和性能监视
第6章 机器检查架构
第7章 JTAG调试
第三篇 GPU及其调试设施
第8章 GPU基础
第9章 Nvidia GPU及其调试设施
第10章 AMD GPU及其调试设施
第11章 英特尔GPU及其调试设施
第12章 Mali GPU及其调试设施
第13章 PowerVR GPU及其调试设施
第14章 GPU综述
第四篇 可调试性
第15章 可调试性概览
第16章 可调试性的实现
第一篇 绪  论
1955年,一家名为Computer Usage Corporation(CUC)的公司诞生了,它是世界上第一家专门从事软件开发和服务的公司。CUC公司的创始人是Elmer Kubie和John W. Sheldon,他们都在IBM工作过。他们从当时计算机硬件的迅速发展中看到了软件方面所潜在的机遇。CUC的诞生标志着一个新兴的产业正式起步了。
与其他产业相比,软件产业的发展速度是惊人的。短短60余年后,我们已经难以统计世界上共有多少家软件公司,只知道这一定是一个很庞大的数字,而且这个数字还在不断增大。与此同时,软件产品的数量也达到了难以统计的程度,各种各样的软件已经渗透到人类生产和生活的各个领域,越来越多的人开始依赖软件工作和生活。
与传统的产品相比,软件产品具有根本的不同,其生产过程也有着根本的差异。在开发软件的整个过程中,存在非常多的不确定性因素。在一个软件真正完成之前,它的完成日期是很难预计的。很多软件项目都经历了多次的延期,还有很多中途夭折了。直到今天,人们还没有找到一种有效的方法来控制软件的生产过程。导致软件生产难以控制的根本原因是源自软件本身的复杂性。一个软件的规模越大,它的复杂度也越高。
简单来说,软件是程序(program)和文档(document)的集合,程序的核心内容便是按一定顺序排列的一系列指令(instruction)。如果把每个指令看作一块积木,那么软件开发就是使用这些积木修建一个让CPU(中央处理器)在其中运行的交通系统。这个系统中有很多条不同特征的道路(函数)。有些道路只允许一辆车在上面行驶,一辆车驶出后另一辆才能进入;有些道路可以让无数辆车同时在上面行驶。这些道路都是单行道,只可以沿一个方向行驶。在这些道路之间,除了明确的入口(entry)和出口(exit)之外,还可以通过中断和异常等机制从一条路飞越到另一条,再由另一条飞转到第三条或直接飞回到第一条。在这个系统中行驶的车辆也很特殊,它们速度很快,而且“无人驾驶”,完全不知道会跑到哪里,唯一的原则就是驶入一条路便沿着它向前跑……
如果说软件的执行过程就像是CPU在无数条道路(指令流)间飞奔,那么开发软件的过程就是设计和构建这个交通网络的过程。其基本目标是要让CPU在这个网络中奔跑时可以完成需求(requirement)中所定义的功能。对这个网络的其他要求通常还有可靠(reliable)、灵活(flexible)、健壮(robust)和易于维护(maintainable),开发者通过简单的改造就能让其他类型的车辆(CPU)在上面行驶(portable)……
开发一个满足以上要求的软件系统不是一件简单的事,通常需要经历分析(analysis)、设计(design)、编码(code)和测试(test)等多个环节。通过测试并发布(release)后,还需要维护(maintain)和支持(support)工作。在以上环节中,每一步都可能遇到这样那样的技术难题。
在软件世界中,螺丝刀、万用表等传统的探测工具和修理工具都不再适用了,取而代之的是以调试器为核心的各种软件调试(software debugging)工具。
软件调试的基本手段有断点、单步执行、栈回溯等,其初衷就是跟踪和记录CPU执行软件的过程,把动态的瞬间“凝固”下来,以供检查和分析。
软件调试的基本目标是定位软件中存在的设计错误(bug)。但除此之外,软件调试技术和工具还有很多其他用途,比如分析软件的工作原理、分析系统崩溃、辅助解决系统和硬件问题等。
综上所述,软件是通过指令的组合来指挥硬件,既简单又复杂,是个充满神秘与挑战的世界。而软件调试是帮助人们探索和征服这个神秘世界的有力工具。
第1章 软件调试基础
著名的计算机科学家布莱恩·柯林汉(Brian Kernighan)说过,“软件调试要比编写代码困难一倍,如果你发挥了最大才智编写代码,那么你的智商便不足以调试它。”
此外,软件调试是软件开发和维护中非常繁重的一项任务,几乎在软件生命周期的每个阶段,都有很多问题需要调试。
一方面是难度很高,另一方面是任务很多。因此,在一个典型的软件团队中,花费在软件调试上的人力和时间通常是很可观的。据不完全统计,一半以上的软件工程师把一半以上的时间用在软件调试上。很多时候,调试一个软件问题可能就需要几天乃至几周的时间。从这个角度来看,提高软件工程师的调试效率对于提高软件团队的工作效率有着重要意义。
本书旨在从多个角度和多个层次解析软件调试的原理、方法和技巧。在深入介绍这些内容之前,本章将做一个概括性的介绍,让读者了解一个简单的全貌,为阅读后面的章节做准备。
1.1 简介
本节首先给出软件调试的解释性定义,然后介绍软件调试的基本过程。
1.1.1 定义
什么是软件调试?我们不妨从英文的原词software debug说起。debug是在bug一词前面加上词头de,意思是分离和去除bug。
bug的本意就是“昆虫”,但早在19世纪时,人们就开始用这个词来描述电子设备中的设计缺欠。著名发明家托马斯·阿尔瓦·爱迪生(1847—1931)就用这个词来描述电路方面的设计错误。
关于bug一词在计算机方面的应用,业内流传着一个有趣的故事。20世纪40年代,当时的电子计算机体积非常庞大,数量也非常少,主要用在军事领域。194 ............

以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。

版权声明:书云(openelib.org)是世界上最大的在线非盈利图书馆之一,致力于让每个人都能便捷地了解我们的文明。我们尊重著作者的知识产权,如您认为书云侵犯了您的合法权益,请参考版权保护声明,通过邮件openelib@outlook.com联系我们,我们将及时处理您的合理请求。 数研咨询 流芳阁 研报之家
书云 Open E-Library » 软件调试(第2版)卷1:硬件基础 - (EPUB全文下载)