注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件工程及軟件方法學(xué)軟件調(diào)試實(shí)戰(zhàn)

軟件調(diào)試實(shí)戰(zhàn)

軟件調(diào)試實(shí)戰(zhàn)

定 價(jià):¥45.00

作 者: (德)格勒特克 等著,趙俐 譯
出版社: 人民郵電出版社
叢編項(xiàng): 圖靈程序設(shè)計(jì)叢書
標(biāo) 簽: 軟件工程/開(kāi)發(fā)項(xiàng)目管理

ISBN: 9787115218858 出版時(shí)間: 2010-02-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 190 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  《軟件調(diào)試實(shí)戰(zhàn)》主要講述C/C++程序的調(diào)試和分析,書中的調(diào)試技術(shù)也可以應(yīng)用于其他語(yǔ)言編寫的程序。《軟件調(diào)試實(shí)戰(zhàn)》在講述簡(jiǎn)單的源代碼分析和測(cè)試的基礎(chǔ)上,講述了現(xiàn)實(shí)的程序中經(jīng)常遇到的一些問(wèn)題(如程序鏈接、內(nèi)存訪問(wèn)、并行處理和性能分析)并給出了解決方案?!盾浖{(diào)試實(shí)戰(zhàn)》適合軟件開(kāi)發(fā)人員、調(diào)試人員閱讀和使用。

作者簡(jiǎn)介

  Thorsten Grotker,Ulrich Holtmann,Holger Keding,Markus Wloka4位作者均擁有德國(guó)或美國(guó)著名高等學(xué)府的博士學(xué)位,目前都任職于EDA(電子設(shè)計(jì)自動(dòng)化)軟件領(lǐng)導(dǎo)廠商Synopsys(新思)公司,分別擔(dān)任研發(fā)主管、資深軟件工程師等職位,負(fù)責(zé)開(kāi)發(fā)編譯器和調(diào)試工具,具有解決各種調(diào)試問(wèn)題的豐富經(jīng)驗(yàn)。

圖書目錄

第1章 誰(shuí)編寫軟件,誰(shuí)制造bug(為什么需要本書)1
第2章 系統(tǒng)性調(diào)試方法3
2.1 為什么要遵循結(jié)構(gòu)化的過(guò)程3
2.2 充分利用機(jī)會(huì)3
2.3 13條黃金規(guī)則5
2.3.1 理解需求5
2.3.2 制造失敗6
2.3.3 簡(jiǎn)化測(cè)試用例6
2.3.4 讀取恰當(dāng)?shù)腻e(cuò)誤消息6
2.3.5 檢查顯而易見(jiàn)的問(wèn)題6
2.3.6 從解釋中分離出事實(shí)7
2.3.7 分而治之7
2.3.8 工具要與bug匹配8
2.3.9 一次只做一項(xiàng)更改9
2.3.10 保持審計(jì)跟蹤9
2.3.11 獲得全新觀點(diǎn)9
2.3.12 bug不會(huì)自己修復(fù)9
2.3.13 用回歸測(cè)試來(lái)檢查bug修復(fù)10
2.4 構(gòu)建一個(gè)好的工具包10
2.4.1 工具箱11
2.4.2 每天運(yùn)行測(cè)試,防止出現(xiàn)bug11
2.5 認(rèn)清敵人——遇到bug家族13
2.5.1 常見(jiàn)bug13
2.5.2 偶發(fā)性bug13
2.5.3 Heisenbug13
2.5.4 隱藏在bug背后的bug14
2.5.5 秘密bug——調(diào)試與機(jī)密性14
2.5.6 更多讀物15
第3章 查找根源——源代碼調(diào)試器17
3.1 可視化程序行為17
3.2 準(zhǔn)備簡(jiǎn)單的可預(yù)測(cè)的示例18
3.3 使調(diào)試器與程序一起運(yùn)行18
3.4 學(xué)習(xí)在程序崩潰時(shí)執(zhí)行棧跟蹤21
3.5 學(xué)習(xí)使用斷點(diǎn)21
3.6 學(xué)習(xí)在程序中導(dǎo)航22
3.7 學(xué)習(xí)檢查數(shù)據(jù):變量和表達(dá)式22
3.8 一個(gè)簡(jiǎn)單示例的調(diào)試會(huì)話23
第4章 修復(fù)內(nèi)存問(wèn)題27
4.1 C/C++中的內(nèi)存管理——功能強(qiáng)大但很危險(xiǎn)27
4.1.1 內(nèi)存泄漏27
4.1.2 內(nèi)存管理的錯(cuò)誤使用28
4.1.3 緩沖區(qū)溢出28
4.1.4 未初始化的內(nèi)存bug28
4.2 有效的內(nèi)存調(diào)試器28
4.3 示例1:檢測(cè)內(nèi)存訪問(wèn)錯(cuò)誤29
4.3.1 檢測(cè)無(wú)效的寫訪問(wèn)30
4.3.2 檢測(cè)對(duì)未初始化的內(nèi)存的讀取操作30
4.3.3 檢測(cè)內(nèi)存泄漏31
4.4 示例2:對(duì)內(nèi)存分配/釋放的不完整調(diào)用31
4.5 結(jié)合使用內(nèi)存調(diào)試器和源代碼測(cè)試器33
4.6 減少干擾,排查錯(cuò)誤33
4.7 何時(shí)使用內(nèi)存調(diào)試器34
4.8 約束34
4.8.1 測(cè)試用例應(yīng)該有很好的代碼覆蓋率34
4.8.2 提供更多計(jì)算機(jī)資源35
4.8.3 可能不支持多線程35
4.8.4 對(duì)非標(biāo)準(zhǔn)內(nèi)存處理程序的支持35
第5章 剖析內(nèi)存的使用37
5.1 基本策略——主要步驟37
5.2 示例:分配數(shù)組38
5.3 第1步:查找泄漏38
5.4 第2步:設(shè)置期望值38
5.5 第3步:測(cè)量?jī)?nèi)存使用39
5.5.1 使用多個(gè)輸入39
5.5.2 在固定時(shí)間間隔停止程序39
5.5.3 用簡(jiǎn)單工具測(cè)量?jī)?nèi)存使用40
5.5.4 使用top40
5.5.5 使用WindowsTaskManager41
5.5.6 為testmalloc選擇相關(guān)輸入值42
5.5.7 確定機(jī)器上的內(nèi)存是如何被釋放的42
5.5.8 使用內(nèi)存剖析工具43
5.6 第4步:查明大部分內(nèi)存被哪些數(shù)據(jù)結(jié)構(gòu)占用了44
5.7 綜合練習(xí)——genindex示例45
5.7.1 核實(shí)沒(méi)有大的內(nèi)存泄漏46
5.7.2 估計(jì)內(nèi)存使用46
5.7.3 測(cè)量?jī)?nèi)存使用46
5.7.4 查找使用內(nèi)存的數(shù)據(jù)結(jié)構(gòu)47
第6章 解決性能問(wèn)題51
6.1 分步查找性能bug51
6.1.1 執(zhí)行前期分析51
6.1.2 使用簡(jiǎn)單的時(shí)間測(cè)量方法52
6.1.3 創(chuàng)建測(cè)試用例52
6.1.4 使測(cè)試用例具有可再現(xiàn)性53
6.1.5 檢查程序的正確性53
6.1.6 創(chuàng)建可擴(kuò)展的測(cè)試用例53
6.1.7 排除對(duì)測(cè)試用例的干擾54
6.1.8 用time命令測(cè)量時(shí)可能會(huì)發(fā)生錯(cuò)誤和偏差54
6.1.9 選擇一個(gè)能夠揭示運(yùn)行時(shí)間瓶頸的測(cè)試用例55
6.1.10 算法與實(shí)現(xiàn)之間的差異56
6.2 使用剖析工具58
6.2.1 不要編寫自己的剖析工具58
6.2.2 剖析工具的工作原理58
6.2.3 了解gprof59
6.2.4 了解Quantify63
6.2.5 了解Callgrind64
6.2.6 了解VTune66
6.3 分析I/O性能68
第7章 調(diào)試并行程序71
7.1 用C/C++編寫并行程序71
7.2 調(diào)試競(jìng)爭(zhēng)條件72
7.2.1 使用基本調(diào)試器功能來(lái)查找競(jìng)爭(zhēng)條件73
7.2.2 使用日志文件來(lái)查找競(jìng)爭(zhēng)條件74
7.3 調(diào)試死鎖76
7.3.1 如何確定正在運(yùn)行的是哪個(gè)線程77
7.3.2 分析程序的線程78
7.4 了解線程分析工具78
7.5 異步事件和中斷處理程序80
第8章 查找環(huán)境和編譯器問(wèn)題83
8.1 環(huán)境變更——問(wèn)題的根源83
8.1.1 環(huán)境變量83
8.1.2 本地安裝依賴84
8.1.3 當(dāng)前工作目錄依賴84
8.1.4 進(jìn)程ID依賴84
8.2 如何查看程序正在做什么84
8.2.1 用top來(lái)查看進(jìn)程84
8.2.2 用ps來(lái)查找應(yīng)用程序的多個(gè)進(jìn)程85
8.2.3 使用/proc/來(lái)訪問(wèn)進(jìn)程85
8.2.4 使用strace跟蹤對(duì)操作系統(tǒng)的調(diào)用85
8.3 編譯器和調(diào)試器也有bug87
8.3.1 編譯器bug87
8.3.2 調(diào)試器和編譯器兼容性問(wèn)題88
第9章 處理鏈接問(wèn)題89
9.1 鏈接器的工作原理89
9.2 構(gòu)建并鏈接對(duì)象89
9.3 解析未定義的符號(hào)91
9.3.1 丟失鏈接器參數(shù)91
9.3.2 搜索丟失的符號(hào)91
9.3.3 鏈接順序問(wèn)題92
9.3.4 C++符號(hào)和名稱改編93
9.3.5 符號(hào)的反改編94
9.3.6 鏈接C和C++代碼94
9.4 具有多個(gè)定義的符號(hào)95
9.5 信號(hào)沖突96
9.6 識(shí)別編譯器和鏈接器版本不匹配96
9.6.1 系統(tǒng)庫(kù)不匹配97
9.6.2 對(duì)象文件不匹配97
9.6.3 運(yùn)行時(shí)崩潰98
9.6.4 確定編譯器版本98
9.7 解決動(dòng)態(tài)鏈接問(wèn)題100
9.7.1 鏈接或載入DLL100
9.7.2 無(wú)法找到DLL文件101
9.7.3 分析載入器問(wèn)題102
9.7.4 在DLL中設(shè)置斷點(diǎn)103
9.7.5 提供DLL問(wèn)題的錯(cuò)誤消息104
第10章 高級(jí)調(diào)試107
10.1 在C++函數(shù)、方法和操作符中設(shè)置斷點(diǎn)107
10.2 在模板化的函數(shù)和C++類中設(shè)置斷點(diǎn)109
10.3 進(jìn)入C++方法110
10.3.1 用step-into命令進(jìn)入到隱式函數(shù)中112
10.3.2 用step-out命令跳過(guò)隱式函數(shù)112
10.3.3 利用臨時(shí)斷點(diǎn)跳過(guò)隱式函數(shù)113
10.3.4 從隱式函數(shù)調(diào)用返回113
10.4 條件斷點(diǎn)和斷點(diǎn)命令114
10.5 調(diào)試靜態(tài)構(gòu)造/析構(gòu)函數(shù)116
10.5.1 由靜態(tài)初始化程序的順序依賴性引起的bug117
10.5.2 識(shí)別靜態(tài)初始化程序的棧跟蹤118
10.5.3 在靜態(tài)初始化之前連接調(diào)試器118
10.6 使用觀察點(diǎn)119
10.7 捕捉信號(hào)120
10.8 捕獲異常122
10.9 讀取棧跟蹤124
10.9.1 帶調(diào)試信息編譯的源代碼的棧跟蹤124
10.9.2 不帶調(diào)試信息編譯的源代碼的棧跟蹤124
10.9.3 不帶任何調(diào)試信息的幀125
10.9.4 實(shí)際工作中的棧跟蹤125
10.9.5 改編后的函數(shù)名稱126
10.9.6 被破壞的棧跟蹤126
10.9.7 核心轉(zhuǎn)儲(chǔ)127
10.10 操縱正在運(yùn)行的程序128
10.10.1 修改變量130
10.10.2 調(diào)用函數(shù)131
10.10.3 修改函數(shù)的返回值132
10.10.4 中止函數(shù)調(diào)用132
10.10.5 跳過(guò)或重復(fù)執(zhí)行個(gè)別語(yǔ)句133
10.10.6 輸出和修改內(nèi)存內(nèi)容133
10.11在沒(méi)有調(diào)試信息時(shí)進(jìn)行調(diào)試135
10.11.1 從棧讀取函數(shù)參數(shù)137
10.11.2 讀取局部/全局變量和用戶定義的數(shù)據(jù)類型138
10.11.3 在源代碼中查找語(yǔ)句的大概位置139
10.11.4 走查匯編代碼140
第11章 編寫可調(diào)試的代碼143
11.1 注釋的重要性143
11.1.1 函數(shù)簽名的注釋144
11.1.2 對(duì)折中辦法的注釋144
11.1.3 為不確定的代碼加注釋144
11.2 采用一致的編碼風(fēng)格144
11.2.1 仔細(xì)選擇名稱145
11.2.2 不要使用“聰明過(guò)頭”的結(jié)構(gòu)145
11.2.3 不要壓縮代碼145
11.2.4 為復(fù)雜表達(dá)式使用臨時(shí)變量145
11.3 避免使用預(yù)處理器宏146
11.3.1 使用常量或枚舉來(lái)替代宏146
11.3.2 使用函數(shù)來(lái)替代預(yù)處理器宏148
11.3.3 調(diào)試預(yù)處理器輸出149
11.3.4 使用功能更強(qiáng)的預(yù)處理器150
11.4 提供更多調(diào)試函數(shù)151
11.4.1 顯示用戶定義的數(shù)據(jù)類型151
11.4.2 自檢查代碼152
11.4.3 為操作符創(chuàng)建一個(gè)函數(shù),以便幫助調(diào)試153
11.5 為事后調(diào)試做準(zhǔn)備153
第12章 靜態(tài)檢查的作用155
12.1 使用編譯器作為調(diào)試工具155
12.1.1 不要認(rèn)為警告是無(wú)害的156
12.1.2 使用多個(gè)編譯器來(lái)檢查代碼158
12.2 使用lint158
12.3 使用靜態(tài)分析工具158
12.3.1 了解靜態(tài)檢查器158
12.3.2 將靜態(tài)檢查器檢測(cè)到的錯(cuò)誤減至(接近)零160
12.3.3 完成代碼清理后重新運(yùn)行所有測(cè)試用例160
12.4 靜態(tài)分析的高級(jí)應(yīng)用161
第13章 結(jié)束語(yǔ)163
附錄A 調(diào)試命令165
附錄B 工具資源167
附錄C 源代碼179
參考文獻(xiàn)189

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)