- C/C++代碼調試的藝術(第2版)
- 張海洋
- 1873字
- 2023-06-21 18:59:21
前言
——“有人的地方就有江湖,有軟件的地方就有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,還介紹了與調試有關的一些概念,以及C/C++調試的重要性。
● “第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)文件,以及如何在Windows系統和Linux系統中分析死鎖轉儲文件和崩潰轉儲文件。
● “第9章發行(Release)版調試”介紹了發行版與調試版的一些區別,解釋了為什么發行版不容易進行調試,并演示了如何在Windows系統和Linux系統中調試發行版。
● “第10章調試高級話題”介紹了一些與調試有關的高級話題,比如斷點的秘密、與Windows調試和Linux調試相關的API和系統調用、使用gdb“破解”軟件密碼等。
● “第11章調試擴展知識”介紹了在Windows系統和Linux系統中使用C/C++開發驅動的一些入門知識,并通過一個示例演示了如何創建第一個驅動程序,包括如何調試驅動,以及如何分析內核轉儲文件等,最后介紹了用Visual Studio 2022調試C/C++程序的新特性。
資源獲取
本書所有的示例代碼可以從異步社區下載,也可以使用Git客戶端工具從地址https://github.com/SimpleSoft-2020/book_debug.git下載。如果使用的是Windows系統,那么可以使用VC 2019打開debug_examples.sln解決方案文件。如果使用的是Linux系統,就可以進入每個目錄,然后直接執行make命令來編譯和運行示例代碼。
- FuelPHP Application Development Blueprints
- Mastering Zabbix(Second Edition)
- 算法精粹:經典計算機科學問題的Python實現
- Python數據分析(第2版)
- 精通Scrapy網絡爬蟲
- C++ 從入門到項目實踐(超值版)
- ExtJS高級程序設計
- 微信小程序全棧開發技術與實戰(微課版)
- PHP+MySQL+Dreamweaver動態網站開發從入門到精通(第3版)
- Python開發基礎
- Android Sensor Programming By Example
- Visual Basic程序設計全程指南
- The Statistics and Calculus with Python Workshop
- SQL Server實例教程(2008版)
- ArcPy and ArcGIS(Second Edition)