軟件調試

軟件調試

計算機知識書籍
《軟件調試》系計算機軟件工程、開發項目管理類圖書,作者:張銀奎。2008年6月由電子工業出版社出版發行。本書包括CPU的調試、Windows操作系統中的調試設施、Visual C/C++編譯器的調試支持,以及WinDBG調試器主要調試功能的應用實例。Windows操作系統中的調試設施,包括内核調試引擎、用戶态調試予系統、驗證器、Dr.Watson、WER、ETW、故障轉儲、WHEA等。本書是對軟件調試技術在過去50年中所取得成就的全面展示,也是筆者本人在軟件設計和系統開發第一線奮戰10多年的經驗總結。
    書名:軟件調試 别名: 作者:張銀奎 類别:軟件工程/開發項目管理 原作品: 譯者: 出版社:電子工業出版社 頁數:1006 定價:128 開本:16 裝幀: ISBN: 字數:1200000 ISBN:9787121064074

内容簡介

《軟件調試》系計算機軟件工程、開發項目管理類圖書,作者:張銀奎。2008年6月由電子工業出版社出版發行。本書包括CPU的調試、Windows操作系統中的調試設施、Visual C/C++編譯器的調試支持,以及WinDBG調試器主要調試功能的應用實例。n圍繞如何實現高效調試這一主題,本書深入系統地介紹了以調試器為核心的各種軟件調試技術。

本書共30章,分為6篇。第1篇介紹了軟件調試的概況和簡要曆史。第2篇以英特爾架構(IA)的CPU為例,介紹了計算機系統的硬件核心所提供的調試支持,包括異常、斷點指令、單步執行标志、分支監視、JTAG和MCE等。第3篇以Windows操作系統為例,介紹了計算機系統的軟件核心中的調試設施,包括内核調試引擎、用戶态調試子系統、異常處理、驗證器、錯誤報告、事件追蹤、故障轉儲、硬件錯誤處理等。第4篇以Visual C/C++編譯器為例,介紹了生産軟件的主要工具的調試支持,重點讨論了編譯期檢查、運行期檢查及調試符号。第5篇讨論了軟件的可調試性,探讨了如何在軟件架構設計和軟件開發過程中加入調試支持,使軟件更容易被調試。

n在前5篇内容的基礎上,第6篇首先介紹了調試器的發展曆史、典型功能和實現方法,然後全面介紹了WinDBG調試器,包括它的模塊結構、工作模型、使用方法和主要調試功能的實現細節。n本書是對軟件調試技術在過去50年中所取得成就的全面展示,也是對作者本人在軟件設計和系統開發第一線奮戰10多年的經驗總結。本書理論與實踐緊密結合,選取了大量具有代表性和普遍意義的技術細節進行讨論,是學習軟件調試技術的寶貴資料,适合每一位希望深刻理解軟件和自由駕馭軟件的人閱讀,特别是從事軟件開發、測試、支持的技術人員和有關的研究人員。

圖書目錄

第1篇 緒論n第1章 軟件調試基礎n

1.1 簡介n

1.2 基本特征n

1.3 簡要曆史n

1.4 分類n

1.5 調試技術概覽n

1.6 錯誤與缺欠n

1.7 與軟件工程的關系n

1.8 本章總結n

第2篇 CPU的調試支持n

第2章 CPU基礎n

2.1 指令和指令集n

2.2 IA-32處理器n

2.3 CPU的操作模式n

2.4 寄存器n

2.5 理解保護模式n

2.6 段機制n

2.7 分頁機制(Paging)n

2.8 系統概貌n

2.9 本章總結n

第3章 中斷和異常n

3.1 概念和差異n

3.2 異常的分類n

3.3 異常例析n

3.4 中斷/異常優先級n

3.5 中斷/異常處理n

3.6 本章總結n

第4章 斷點和單步執行n

4.1 軟件斷點n

4.2 硬件斷點n

4.3 陷阱标志n

4.4 實模式調試器例析n

4.5 本章總結n

第5章 分支記錄和性能監視n

5.1 分支監視概覽n

5.2 使用寄存器的分支記錄n

5.3 使用内存的分支記錄n

5.4 DS示例:CpuWheren

5.5 性能監視n

5.6 本章總結n

第6章 機器檢查架構(MCA)n

6.1 奔騰處理器的機器檢查機制n

6.2 MCAn

6.3 編寫MCA軟件n

6.4 本章總結n

第7章 JTAG調試n

7.1 簡介n

7.2 JTAG原理n

7.3 JTAG應用n

7.4 IA-32處理器的JTAG支持n

7.5 本章總結n

第3篇 操作系統的調試支持n

第8章 Windows概要n

8.1 簡介n

8.2 進程和進程空間n

8.3 内核模式和用戶模式n

8.4 架構和系統部件n

8.5 本章總結n

第9章 用戶态調試模型n

9.1 概覽n

9.2 采集調試消息n

9.3 發送調試消息n

9.4 調試子系統服務器(XP之後)n

9.5 調試子系統服務器(XP之前)n

9.6 比較兩種模型n

9.7 NTDLL中的調試支持例程n

9.8 調試API 224n

9.9 本章總結n

第10章 用戶态調試過程n

10.1 調試器進程n

10.2 被調試進程n

10.3 從調試器中啟動被調試程序n

10.4 附加到已經啟動的進程n

10.5 處理調試事件n

10.6 中斷到調試器n

10.7 輸出調試字符串n

10.8 終止調試會話n

10.9 本章總結n

第11章 中斷和異常管理n

11.1 中斷描述符表n

11.2 異常的描述和登記n

11.3 異常分發過程n

11.4 結構化異常處理(SEH)n

11.5 向量化異常處理(VEH)n

11.6 本章總結n

第12章 未處理異常和JIT調試n

12.1 簡介n

12.2 默認的異常處理器n

12.3 未處理異常過濾函數n

12.4 應用程序錯誤對話框n

12.5 JIT調試和Dr. Watsonn

12.6 頂層異常過濾函數n

12.7 Dr. Watsonn

12.8 DRWTSN32的日志文件n

12.9 用戶态轉儲文件n

12.10 本章總結n

第13章 硬錯誤和藍屏n

13.1 硬錯誤提示n

13.2 藍屏終止(BSOD)n

13.3 系統轉儲文件n

13.4 分析系統轉儲文件n

13.5 輔助的錯誤提示方法n

13.6 配置錯誤提示機制n

13.7 防止濫用錯誤提示機制n

13.8 本章總結n

第14章 錯誤報告n

14.1 WER 1.0n

14.2 系統錯誤報告n

14.3 WER服務器端n

14.4 WER 2.0n

14.5 CERn

14.6 本章總結n

第15章 日志n

15.1 日志簡介n

15.2 ELF的架構n

15.3 ELF的數據組織n

15.4 察看和使用ELF日志n

15.5 CLFS的組成和原理n

15.6 CLFS的使用方法n

15.7 本章總結n

第16章 事件追蹤n

16.1 簡介n

16.2 ETW的架構n

16.3 提供ETW消息n

16.4 控制ETW會話n

16.5 消耗ETW消息n

16.6 格式描述n

16.7 NT Kernel Loggern

16.8 Global Logger Sessionn

16.9 Crimson APIn

16.10 本章總結n

第17章 WHEAn

17.1 目标和架構n

17.2 錯誤源n

17.3 錯誤處理過程n

17.4 錯誤持久化n

17.5 注入錯誤n

17.6 本章總結n

第18章 内核調試引擎n

18.1 概覽n

18.2 連接n

18.3 啟用n

18.4 初始化n

18.5 内核調試協議n

18.6 與内核交互n

18.7 建立和維持連接n

18.8 本地内核調試n

18.9 本章總結n

第19章 Windows的驗證機制n

19.1 簡介n

19.2 驅動驗證器的工作原理n

19.3 使用驅動驗證器n

19.4 應用程序驗證器的工作原理n

19.5 使用應用程序驗證器n

19.6 本章總結n

第4篇 編譯器的調試支持n

第20章 編譯和編譯期檢查n

20.1 程序的構建過程n

20.2 編譯n

20.3 Visual C++編譯器n

20.4 編譯錯誤和警告n

20.5 編譯期檢查n

20.6 标準标注語言n

20.7 本章總結n

第21章 運行庫和運行期檢查n

21.1 C/C++運行庫n

21.2 鍊接運行庫n

21.3 運行庫的初始化和清理n

21.4 運行期檢查n

21.5 報告運行期檢查錯誤n

21.6 本章總結n

第22章 棧和函數調用n

22.1 簡介n

22.2 棧的創建過程n

22.3 CALL和RET指令n

22.4 局部變量和棧幀n

22.5 幀指針省略(FPO)n

22.6 棧指針檢查n

22.7 調用協定n

22.8 棧空間的增長和溢出n

22.9 棧下溢n

22.10 緩沖區溢出n

22.11 變量檢查n

22.12 基于Cookie的安全檢查n

22.13 本章總結n

第23章 堆和堆檢查n

23.1 理解堆n

23.2 堆的創建和銷毀n

23.3 分配和釋放堆塊n

23.4 堆的内部結構n

23.5 低碎片堆(LFH)n

23.6 堆的調試支持n

23.7 棧回溯數據庫n

23.8 堆溢出和檢測n

23.9 頁堆n

23.10 準頁堆n

23.11 CRT堆n

23.12 CRT堆的調試堆塊n

23.13 CRT堆的調試功能n

23.14 堆塊轉儲n

23.15 洩漏轉儲n

23.16 本章總結n

第24章 異常處理代碼的編譯n

24.1 概覽n

24.2 FS:[0]鍊條n

24.3 遍曆FS:[0]鍊條n

24.4 執行異常處理函數n

24.5 __try{}__except()結構n

24.6 安全問題n

24.7 本章總結n

第25章 調試符号n

25.1 名稱修飾n

25.2 調試信息的存儲格式n

25.3 目标文件中的調試信息n

25.4 PE文件中的調試信息n

25.5 DBG文件n

25.6 PDB文件n

25.7 有關的編譯和鍊接選項n

25.8 PDB文件中的數據表n

25.9 本章總結n

第5篇 可調試性n

第26章 可調試性概覽n

26.1 簡介n

26.2Showstopper和未雨綢缪n

26.3 基本原則n

26.4 不可調試代碼n

26.5 可調試性例析n

26.6 與安全、性能和商業秘密的關系n

26.7 本章總結n

第27章 可調試性的實現n

27.1 角色和職責n

27.2 可調試架構n

27.3 通過棧回溯實現可追溯性n

27.4 數據的可追溯性n

27.5 可觀察性的實現n

27.6 自檢和自動報告n

27.7 本章總結n

第6篇 調試器n

第28章 調試器概覽n

28.1 TX-0計算機和FLIT調試器n

28.2 小型機和DDT調試器n

28.3 個人計算機和它的調試器n

28.4 調試器的功能n

28.5 分類标準n

28.6 實現模型n

28.7 經典架構n

28.8 HPD标準n

28.9 本章總結n

第29章 WinDBG及其實現n

29.1 WinDBG溯源n

29.2 C階段的架構n

29.3 重構n

29.4 調試器引擎的架構n

29.5 調試目标n

29.6 調試會話n

29.7 接收和處理命令n

29.8 本章總結n

第30章 WinDBG用法詳解n

30.1 工作空間n

30.2 命令概覽n

30.3 用戶界面n

30.4 輸入和執行命令n

30.5 建立調試會話n

30.6 終止調試會話n

30.7 理解上下文n

30.8 調試符号n

30.9 事件處理n

30.10 控制調試目标n

30.11 單步執行n

30.12 使用斷點n

30.13 控制進程和線程n

30.14 觀察棧n

30.15 分析内存n

30.16 遍曆鍊表n

30.17 調用目标程序的函數n

30.18 命令程序n

30.19 本章總結n

附錄A 示例程序列表n

附錄B WinDBG标準命令列表

索引

圖書信息

作者: 張銀奎着

出 版 社:電子工業出版社

出版時間: 2008-6-1

字數: 1200000

頁數: 1006

開本: 16開

I S B N : 9787121064074

分類:圖書>> 計算機/網絡 >>軟件工程/開發項目管理

定價:¥128.00

編輯推薦

ACM院士和調試技術先驅Jack B.Dennis教授做曆史回顧計算機和操作系統領域資深專家David A.Solomon撰寫序言。調試高手筆耕三載集十餘年經驗成百萬言篇,業内專家鼎力相助,彙五十年精華補軟件界空白。

您将學習到:

CPU的調試支持,包括異常、斷點、單步執行、分支監視、JTAG、MCE等。

Windows操作系統中的調試設施,包括内核調試引擎、用戶态調試予系統、驗證器、Dr.Watson、WER、ETW、故障轉儲、WHEA等。

Visual C/C++編譯器的調試支持,包括編譯期檢查、運行期檢查,以及調試符号。

WinDBG調試器的發展曆史、模塊結構、工作模型、使用方法、主要調試功能的實現細節,以及遍布全書的應用實例。

内核調試、用戶态調試、JIT調試、遠程調試的原理、實現和用法。異常的概念、分發方法、處理方法(seh、VEH、CppEH),未處理異常,以及編譯器編譯異常處理代碼的方法。

調試符号的作用、産生過程、存儲格式和使用方法。棧和堆的結構布局、工作原理和有關的軟件問題,包括棧的自動增長和溢出,緩;中區溢出,溢出攻擊,内存洩漏,堆崩潰等。

軟件的可調試性和提高可調試性的方法。

此外,書中還诠釋了很多較難理解的概念,思考了一系列耐人深思和具有普遍意義的問題。本書是對軟件調試技術在過去50年中所取得成就的全面展示,也是筆者本人在軟件設計和系統開發第一線奮戰10多年的經驗總結。本書适合每一位希望深刻理解軟件和自由駕馭軟件的人閱讀,不論您是否直接參與軟件開發和測試;不論您是熱愛軟件,還是憎恨軟件;不論您是想發現軟件中的瑕疵,還是想領略其中蘊含的智慧!

本書直面軟件工程中的最困難任務——偵錯

圍繞軟件世界中的最強大工具——調試器

全方位展示了軟件調試技術的無比威力和無窮魅力

80個示例程序的源程序文件和項目文件

浏覽符号文件的SymView工具

與内核調試引擎對話的KdTalker工具

直接浏覽用戶态轉儲文件的UdmpView工具

顯示CPU執行軌迹(分支)的Cpuwhere工具

觀察IDT、GDT和系統對象的SOZOOmer工具

本書是對軟件調試技術在過去50年中所取得成就的全面展示,也是對作者本人在軟件設計和系統開發第一線奮戰10多年的經驗總結。全書共分6篇30章,選取了大量具有代表性和普遍意義的技術細節進行讨論,包括CPU的調試支持、操作系統的調試支持、編譯器的調試支持、WinDBG及其實現等,是學習軟件調試技術的寶貴資料。該書可供各大專院校作為教材使用,也可供從事相關工作的人員作為參考用書使用。

圖書章節

第1篇 緒論

第1章 軟件調試基礎

1955年,一個名叫Computer Usage Corporation(CUC)的公司誕生了,它是世界上第一個專門從事軟件開發和服務的公司。CUC公司的創始人是Elmer Kubie和John w Sheldon,他們都在IBM工作過。從當時計算機硬件的迅速發展中,他們看到了軟件方面所潛在的機遇。CUC的誕生标志着一個新興的産業正式起步了。

與其他産業相比,軟件産業的發展速度是驚人的。短短50幾年後,我們已經難以統計世界上共有多少個軟件公司,隻知道一定是一個很龐大的數字,而且這個數量還在不斷增大。同時,軟件産品的數量也達到了難以統計的程度,各種各樣的軟件已經滲透到人類生産和生活的各個領域,越來越多的人開始依賴軟件工作和生活。

與傳統的産品相比,軟件産品具有根本的不同,其生産過程也有着根本的差異。在開發軟件的整個過程中,存在非常多的不确定性因素。在一個軟件真正完成之前,很難預計它的完成日期。很多軟件項目都經曆了多次的延期,還有很多中途夭折。直到今天,人們還沒有找到一種有效的方法來控制軟件的生産過程。導緻軟件生産難以控制的根本原因是來源于軟件本身的複雜性。一個軟件的規模越大,它的複雜度也越高。

簡單來說,軟件是程序(program)和文檔(document)的集合,程序的核心内容便是按一定順序排列的一系列指令(instruction)。如果把每個指令看作一塊積木,那麼軟件開發就是使用這些積木修建一個讓CPU(中央處理器)在其中運行的交通系統。這個系統中有很多條不同特征的道路(函數)。有些道路隻允許一輛車在上面行駛,一輛車駛出後另一輛才能進入,有些道路可以讓無數輛車同時在上面飛奔。這些道路都是單行道,隻可以沿一個方向行駛。在這些道路之間,除了明确的入口(entry)和出口(exit)之外,還可以通過中斷和異常等機制從一條路飛越到另一條,另一條又可以飛轉到第三條或直接飛回到第一條。在這個系統中行駛的車輛也很特殊,它們速度很快,而且“無人駕駛”,完全不知道會跑到哪裡,唯一的原則就是上了一條路便沿着它向前跑……

如果說軟件的執行過程就好像是CPU在無數條道路(指令流)間飛奔,那麼開發軟件的過程就是設計和構建這個交通網絡的過程。其基本目标是要讓CPU在這個網絡中奔跑時可以完成需求(requirement)中所定義的功能。對這個網絡的其他要求通常還有可靠(reliable)、靈活(flexible)、健壯(robust)、易于維護(maintainable),可以簡單地改造就能讓其他類型的車輛(CPU)在上面行駛(portable)……

開發一個滿足以上要求的軟件系統不是一件簡單的事,通常需要經曆分析(analysis)、設計(design)、編碼(code)和測試(test)等多個環節。通過測試并發布(release)後,還需要維護(maintain)和支持(support)工作。在以上環節中,每一步都可能遇到這樣那樣的技術難題。

上一篇:OpenCV教程:基礎篇

下一篇:刺槐屬

相關詞條

相關搜索

其它詞條