C/C++代码调试的艺术
上QQ阅读APP看书,第一时间看更新

前言

——“有人的地方就有江湖,有软件的地方就有BUG。”

比尔·盖茨在1998年演示Windows 98操作系统的时候,突然出现蓝屏,但是他一点也不惊慌,因为他知道这就是真实的软件世界。

盖茨表现淡定还有另外一个原因,那就是在Windows蓝屏以后,会生成崩溃转储文件,软件工程师可以根据该文件来分析蓝屏的原因,能够快速地定位并解决BUG。

为什么写作本书

在C/C++领域工作的这10多年里,令我印象深刻的并不是使用C/C++去实现一个复杂的功能有多么困难,而是解决一个看似微不足道的BUG并不像我们想象的那么容易。很多读者可能也有这个体会,长时间地熬夜加班,并不是为了完成一项重大的任务或者一个新功能,而通常是为了解决一个不容易发现的BUG—这个BUG可能是别人留下的,也可能是自己留下的。C/C++开发人员通常有很强的代码编写能力,可以完成复杂的任务。常言道“代码写得越多,BUG就会越多”,这是事实。如何才能又快又好地开发出高质量的软件呢?这也是软件行业一直在思考的问题,所以很多组织和培训机构都从软件开发的外围入手,比如使用一定的开发模式和方法,增加或者改变软件开发的流程等。的确,这些措施能够在一定程度上提升软件开发的效率。

但是BUG从没有减少,因此作者希望能够将这些年积累下来的解决C/C++程序BUG的经验整理成书,希望能够帮助读者在开发工作的初期避免一些本不应该出现的BUG。即使是在开发工作的后期出现BUG,相信读者也能够有效地使用本书中的调试手段和技巧,迅速地定位并解决BUG。

本书特色

本书理论结合实际,融入了作者10多年的Windows和Linux系统开发经验,尤其是C/C++开发方面的调试经验与心得。除第1章外,其他每章都编写了示例代码,无论是在Windows还是Linux系统中开发,本书都竭尽所能把问题解释清楚,确保每一位读者都能从本书中获得宝贵的调试技巧与方法。

通过本书中的示例代码,读者可以熟练掌握书中介绍的调试工具、调试方法、调试技巧。本书虽然无法做到面面俱到,但是只要读者掌握了相关理论以及相应的实战技巧,就一定能够提升调试技术,在解决BUG时产生事半功倍的效果。

主要内容

全书共分为11章,几乎涉及C/C++程序调试的方方面面,其中包括Windows系统和Linux系统C/C++程序的调试方法与技巧,主要内容如下。

·第1章,“C/C++调试基本知识”,主要介绍了什么是BUG,以及与调试有关的一些概念,并介绍了调试的重要性。

·第2章,“Visual C++调试基本功能”,详细介绍了Visual C++的基本调试功能,包括断点管理、调试执行、监视变量、内存查看、堆栈、线程管理等,还介绍了一些断点的高级用法,比如条件断点、数据断点等。

·第3章,“Linux系统gdb调试基本功能”,详细地介绍了Linux系统中gdb的调试技巧与方法,包括gdb的断点管理、查看变量、查看内存、调用堆栈、线程管理,以及一些gdb特有的调试功能,比如观察点、捕获点等。

·第4章,“多线程死锁调试”,介绍了一些多线程的基本知识,以及线程同步与互斥的概念,然后通过Windows和Linux系统调试多线程死锁实例来演示如何调试死锁问题,最后介绍了如何在多线程环境中避免死锁。

·第5章,“调试动态库”,介绍了Windows和Linux动态库的一些基本知识,并简单演示了如何在Windows系统和Linux系统中开发动态库,最后详细介绍了如何在Windows和Linux系统中自由地调试动态库以及调试动态库的多种方法。

·第6章,“内存检查”,介绍了如何调试、分析和发现C/C++代码中的内存错误,比如内存泄漏、堆栈溢出等,并详细地介绍了如何在Windows和Linux系统中发现和解决内存泄漏和堆栈溢出问题。

·第7章,“远程调试”,介绍了远程调试的多种方法与技巧,既包含Windows系统的远程调试方法,也包含Linux系统的远程调试方法,同时还演示了在Windows系统中如何远程调试Linux程序。

·第8章,“转储文件调试分析”,主要介绍了如何生成转储(dump)文件,以及如何分析死锁转储文件和崩溃转储文件。

·第9章,“发行(Release)版调试”,介绍了发行版与调试版的一些区别,解释了为什么发行版不容易进行调试,并演示了如何在Windows和Linux系统中调试发行版。

·第10章,“调试高级话题”,介绍了一些与调试有关的高级话题,比如断点的秘密、调试函数的使用等。

·第11章,“调试扩展知识”,介绍了在Windows和Linux系统中使用C/C++开发驱动的一些入门知识,并通过一个示例演示了如何写出第一个驱动程序,包括如何调试驱动,以及如何分析内核转储文件等。

资源获取

本书所有的示例代码都可以从异步社区下载。也可以使用Git客户端工具从地址https://github.com/SimpleSoft-2020/book_debug.git下载。在Windows系统中可以使用VC 2019打开debug_examples.sln解决方案文件。如果使用的是Linux,则可以进入到每个目录中,直接执行make命令编译运行。