軟體調試

軟體調試

《軟體調試》是2006年6月1日電子工業出版社出版的圖書,作者是張銀奎,主要講述了包括CPU的調試、Windows作業系統中的調試設施、Visual C/C++編譯器的調試支持,以及WinDBG調試器主要調試功能的套用實例。

基本介紹

  • 書名:軟體調試
  • 作者:張銀奎
  • ISBN:9787121064074
  • 類別:軟體工程/開發項目管理
  • 頁數:1006
  • 定價:¥128.00
  • 出版社電子工業出版社
  • 出版時間:2008-6-1
  • 開本:16開
  • 字數: 1200000
編輯推薦,內容簡介,圖書目錄,

編輯推薦

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標準命令列表
索引

相關詞條

熱門詞條

聯絡我們