複製鏈接
請複製以下鏈接發送給好友

軟件調試

鎖定
《軟件調試》是2006年6月1日電子工業出版社出版的圖書,作者是張銀奎,主要講述了包括CPU的調試、Windows操作系統中的調試設施、Visual C/C++編譯器的調試支持,以及WinDBG調試器主要調試功能的應用實例。
中文名
軟件調試
作    者
張銀奎
出版時間
2008年6月1日
出版社
電子工業出版社
頁    數
1006 頁
字    數
1200000
ISBN
9787121064074
類    別
軟件工程/開發項目管理
定    價
128 元
開    本
16 開

軟件調試編輯推薦

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及其實現等,是學習軟件調試技術的寶貴資料。該書可供各大專院校作為教材使用,也可供從事相關工作的人員作為參考用書使用。

軟件調試內容簡介

《軟件調試》系計算機軟件工程、開發項目管理類圖書,作者:張銀奎。2008年6月由電子工業出版社出版發行。本書包括CPU的調試、Windows操作系統中的調試設施、Visual C/C++編譯器的調試支持,以及WinDBG調試器主要調試功能的應用實例。
圍繞如何實現高效調試這一主題,本書深入系統地介紹了以調試器為核心的各種軟件調試技術。本書共30章,分為6篇。第1篇介紹了軟件調試的概況和簡要歷史。第2篇以英特爾架構(IA)的CPU為例,介紹了計算機系統的硬件核心所提供的調試支持,包括異常、斷點指令、單步執行標誌、分支監視、JTAG和MCE等。第3篇以Windows操作系統為例,介紹了計算機系統的軟件核心中的調試設施,包括內核調試引擎、用户態調試子系統、異常處理、驗證器、錯誤報告、事件追蹤、故障轉儲、硬件錯誤處理等。第4篇以Visual C/C++編譯器為例,介紹了生產軟件的主要工具的調試支持,重點討論了編譯期檢查、運行期檢查及調試符號。第5篇討論了軟件的可調試性,探討了如何在軟件架構設計和軟件開發過程中加入調試支持,使軟件更容易被調試。
在前5篇內容的基礎上,第6篇首先介紹了調試器的發展歷史、典型功能和實現方法,然後全面介紹了WinDBG調試器,包括它的模塊結構、工作模型、使用方法和主要調試功能的實現細節。
本書是對軟件調試技術在過去50年中所取得成就的全面展示,也是對作者本人在軟件設計和系統開發第一線奮戰10多年的經驗總結。本書理論與實踐緊密結合,選取了大量具有代表性和普遍意義的技術細節進行討論,是學習軟件調試技術的寶貴資料,適合每一位希望深刻理解軟件和自由駕馭軟件的人閲讀,特別是從事軟件開發、測試、支持的技術人員和有關的研究人員。

軟件調試圖書目錄

第1篇 緒論
第1章 軟件調試基礎
1.1 簡介
1.2 基本特徵
1.3 簡要歷史
1.4 分類
1.5 調試技術概覽
1.6 錯誤與缺欠
1.7 與軟件工程的關係
1.8 本章總結
第2篇 CPU的調試支持
第2章 CPU基礎
2.1 指令和指令集
2.2 IA-32處理器
2.3 CPU的操作模式
2.4 寄存器
2.5 理解保護模式
2.6 段機制
2.7 分頁機制(Paging)
2.8 系統概貌
2.9 本章總結
第3章 中斷和異常
3.1 概念和差異
3.2 異常的分類
3.3 異常例析
3.4 中斷/異常優先級
3.5 中斷/異常處理
3.6 本章總結
第4章 斷點和單步執行
4.1 軟件斷點
4.3 陷阱標誌
4.4 實模式調試器例析
4.5 本章總結
第5章 分支記錄和性能監視
5.1 分支監視概覽
5.2 使用寄存器的分支記錄
5.3 使用內存的分支記錄
5.4 DS示例:CpuWhere
5.5 性能監視
5.6 本章總結
第6章 機器檢查架構(MCA)
6.1 奔騰處理器的機器檢查機制
6.2 MCA
6.3 編寫MCA軟件
6.4 本章總結
第7章 JTAG調試
7.1 簡介
7.2 JTAG原理
7.3 JTAG應用
7.4 IA-32處理器的JTAG支持
7.5 本章總結
第3篇 操作系統的調試支持
第8章 Windows概要
8.1 簡介
8.2 進程和進程空間
8.3 內核模式和用户模式
8.4 架構和系統部件
8.5 本章總結
第9章 用户態調試模型
9.1 概覽
9.2 採集調試消息
9.3 發送調試消息
9.4 調試子系統服務器(XP之後)
9.5 調試子系統服務器(XP之前)
9.6 比較兩種模型
9.7 NTDLL中的調試支持例程
9.8 調試API 224
9.9 本章總結
第10章 用户態調試過程
10.1 調試器進程
10.2 被調試進程
10.3 從調試器中啓動被調試程序
10.4 附加到已經啓動的進程
10.5 處理調試事件
10.6 中斷到調試器
10.7 輸出調試字符串
10.8 終止調試會話
10.9 本章總結
第11章 中斷和異常管理
11.2 異常的描述和登記
11.3 異常分發過程
11.5 向量化異常處理(VEH)
11.6 本章總結
第12章 未處理異常和JIT調試
12.1 簡介
12.2 默認的異常處理器
12.3 未處理異常過濾函數
12.4 應用程序錯誤對話框
12.5 JIT調試和Dr. Watson
12.6 頂層異常過濾函數
12.7 Dr. Watson
12.8 DRWTSN32的日誌文件
12.9 用户態轉儲文件
12.10 本章總結
第13章 硬錯誤和藍屏
13.1 硬錯誤提示
13.2 藍屏終止(BSOD)
13.3 系統轉儲文件
13.4 分析系統轉儲文件
13.5 輔助的錯誤提示方法
13.6 配置錯誤提示機制
13.7 防止濫用錯誤提示機制
13.8 本章總結
第14章 錯誤報告
14.1 WER 1.0
14.2 系統錯誤報告
14.3 WER服務器端
14.4 WER 2.0
14.5 CER
14.6 本章總結
第15章 日誌
15.1 日誌簡介
15.2 ELF的架構
15.3 ELF的數據組織
15.4 察看和使用ELF日誌
15.5 CLFS的組成和原理
15.6 CLFS的使用方法
15.7 本章總結
第16章 事件追蹤
16.1 簡介
16.2 ETW的架構
16.3 提供ETW消息
16.4 控制ETW會話
16.5 消耗ETW消息
16.6 格式描述
16.7 NT Kernel Logger
16.8 Global Logger Session
16.9 Crimson API
16.10 本章總結
第17章 WHEA
17.1 目標和架構
17.2 錯誤源
17.3 錯誤處理過程
17.4 錯誤持久化
17.5 注入錯誤
17.6 本章總結
第18章 內核調試引擎
18.1 概覽
18.2 連接
18.3 啓用
18.4 初始化
18.5 內核調試協議
18.6 與內核交互
18.7 建立和維持連接
18.8 本地內核調試
18.9 本章總結
第19章 Windows的驗證機制
19.1 簡介
19.2 驅動驗證器的工作原理
19.3 使用驅動驗證器
19.4 應用程序驗證器的工作原理
19.5 使用應用程序驗證器
19.6 本章總結
第4篇 編譯器的調試支持
第20章 編譯和編譯期檢查
20.1 程序的構建過程
20.2 編譯
20.3 Visual C++編譯器
20.4 編譯錯誤和警告
20.5 編譯期檢查
20.6 標準標註語言
20.7 本章總結
第21章 運行庫和運行期檢查
21.1 C/C++運行庫
21.2 鏈接運行庫
21.3 運行庫的初始化和清理
21.4 運行期檢查
21.5 報告運行期檢查錯誤
21.6 本章總結
第22章 棧和函數調用
22.1 簡介
22.2 棧的創建過程
22.3 CALL和RET指令
22.5 幀指針省略(FPO)
22.6 棧指針檢查
22.7 調用協定
22.8 棧空間的增長和溢出
22.9 棧下溢
22.11 變量檢查
22.12 基於Cookie的安全檢查
22.13 本章總結
第23章 堆和堆檢查
23.1 理解堆
23.2 堆的創建和銷燬
23.3 分配和釋放堆塊
23.4 堆的內部結構
23.5 低碎片堆(LFH)
23.6 堆的調試支持
23.7 棧回溯數據庫
23.8 堆溢出和檢測
23.9 頁堆
23.10 準頁堆
23.11 CRT堆
23.12 CRT堆的調試堆塊
23.13 CRT堆的調試功能
23.14 堆塊轉儲
23.15 泄漏轉儲
23.16 本章總結
第24章 異常處理代碼的編譯
24.1 概覽
24.2 FS:[0]鏈條
24.3 遍歷FS:[0]鏈條
24.4 執行異常處理函數
24.5 __try{}__except()結構
24.6 安全問題
24.7 本章總結
第25章 調試符號
25.1 名稱修飾
25.2 調試信息的存儲格式
25.3 目標文件中的調試信息
25.4 PE文件中的調試信息
25.5 DBG文件
25.6 PDB文件
25.7 有關的編譯和鏈接選項
25.8 PDB文件中的數據表
25.9 本章總結
第5篇 可調試性
第26章 可調試性概覽
26.1 簡介
26.2Showstopper和未雨綢繆
26.3 基本原則
26.4 不可調試代碼
26.5 可調試性例析
26.6 與安全、性能和商業秘密的關係
26.7 本章總結
第27章 可調試性的實現
27.1 角色和職責
27.2 可調試架構
27.3 通過棧回溯實現可追溯性
27.4 數據的可追溯性
27.5 可觀察性的實現
27.6 自檢和自動報告
27.7 本章總結
第6篇 調試器
第28章 調試器概覽
28.1 TX-0計算機和FLIT調試器
28.2 小型機和DDT調試器
28.3 個人計算機和它的調試器
28.4 調試器的功能
28.5 分類標準
28.6 實現模型
28.7 經典架構
28.8 HPD標準
28.9 本章總結
第29章 WinDBG及其實現
29.1 WinDBG溯源
29.2 C階段的架構
29.3 重構
29.4 調試器引擎的架構
29.5 調試目標
29.6 調試會話
29.7 接收和處理命令
29.8 本章總結
第30章 WinDBG用法詳解
30.1 工作空間
30.2 命令概覽
30.3 用户界面
30.4 輸入和執行命令
30.5 建立調試會話
30.6 終止調試會話
30.7 理解上下文
30.8 調試符號
30.9 事件處理
30.10 控制調試目標
30.11 單步執行
30.12 使用斷點
30.13 控制進程和線程
30.14 觀察棧
30.15 分析內存
30.16 遍歷鏈表
30.17 調用目標程序的函數
30.18 命令程序
30.19 本章總結
附錄A 示例程序列表
附錄B WinDBG標準命令列表
索引 [1-2] 
參考資料