關(guān)于我們
書單推薦
新書推薦
|
軟件調(diào)試 第2版 卷1:硬件基礎(chǔ)
本書堪稱是軟件調(diào)試的“百科全書”。作者圍繞軟件調(diào)試的“生態(tài)”系統(tǒng)(ecosystem)、異常(exception)和調(diào)試器 3 條主線,介紹軟件調(diào)試的相關(guān)原理和機(jī)制,探討可調(diào)試性(debuggability)的內(nèi)涵、意義以及實(shí)現(xiàn)軟件可調(diào)試性的原則和方法,總結(jié)軟件調(diào)試的方法和技巧。
第1卷主要圍繞硬件技術(shù)展開介紹。全書分為4篇,共16章。第一篇“緒論”(第1章),介紹了軟件調(diào)試的概念、基本過程、分類和簡(jiǎn)要?dú)v史,并綜述了本書后面將詳細(xì)介紹的主要調(diào)試技術(shù)。第二篇“CPU及其調(diào)試設(shè)施”(第2~7章),以英特爾和ARM架構(gòu)的CPU為例系統(tǒng)描述了CPU的調(diào)試支持。第三篇“GPU及其調(diào)試設(shè)施”(第8~14章),深入探討了Nvidia、AMD、英特爾、ARM和Imagination 這五大廠商的GPU。第四篇“可調(diào)試性”(第15~16章),介紹了提高軟件可調(diào)試性的意義、基本原則、實(shí)例和需要注意的問題,并討論了如何在軟件開發(fā)實(shí)踐中實(shí)現(xiàn)可調(diào)試性。
本書理論與實(shí)踐緊密結(jié)合,既涵蓋了相關(guān)的技術(shù)背景知識(shí),又針對(duì)大量具有代表性和普遍意義的技術(shù)細(xì)節(jié)進(jìn)行了討論,是學(xué)習(xí)軟件調(diào)試技術(shù)的寶貴資料。本書適合所有從事軟件開發(fā)工作的讀者閱讀,特別適合從事軟件開發(fā)、測(cè)試、支持的技術(shù)人員,從事反病毒、網(wǎng)絡(luò)安全、版權(quán)保護(hù)等工作的技術(shù)人員,以及高等院校相關(guān)專業(yè)的教師和學(xué)生學(xué)習(xí)參考。
1. 軟件調(diào)試領(lǐng)域的“百科全書”,圍繞軟件調(diào)試的“生態(tài)”系統(tǒng)(ecosystem)、異常(exception)和調(diào)試器三條主線,介紹軟件調(diào)試的相關(guān)原理和機(jī)制,探討可調(diào)試性(debuggability)的內(nèi)涵、意義,以及實(shí)現(xiàn)軟件可調(diào)試性的原則和方法,總結(jié)軟件調(diào)試的方法和技巧;
2. 設(shè)有“格物致知”實(shí)踐環(huán)節(jié),提供配套資源,可供讀者動(dòng)手實(shí)踐;
3. 豐富的行業(yè)背景知識(shí)和人文故事,讓讀者體驗(yàn)技術(shù)的有血有肉、有感情有溫度。
第2版卷1新增內(nèi)容如下:
·關(guān)于CPU增加了ARM處理器的相關(guān)內(nèi)容;
·關(guān)于操作系統(tǒng)增加了Linux系統(tǒng)的相關(guān)內(nèi)容;
·關(guān)于編譯器增加了GCC的相關(guān)內(nèi)容;
·關(guān)于調(diào)試器增加了GDB的相關(guān)內(nèi)容;
·增加了全新的GPU內(nèi)容。
張銀奎,國(guó)內(nèi)知名的調(diào)試技術(shù)專家。畢業(yè)于上海交通大學(xué)信息與控制工程系,長(zhǎng)期從事軟件開發(fā)和研究工作,曾在英特爾工作13 年,對(duì) IA-32 架構(gòu)、操作系統(tǒng)內(nèi)核、驅(qū)動(dòng)程序,尤其是對(duì)軟件調(diào)試有較深入的研究。著有《軟件調(diào)試》《格蠹匯編》等暢銷、常銷技術(shù)圖書, 格蠹科技(xedge.ai) 創(chuàng)始人,高端調(diào)試網(wǎng)站(advdbg.org)創(chuàng)建者。翻譯(合譯)作品有《二十一世紀(jì)機(jī)器人》《觀止——微軟創(chuàng)建NT和未來的奪命狂奔》《數(shù)據(jù)挖掘原理》《機(jī)器學(xué)習(xí)》《人工智能:復(fù)雜問題求解的結(jié)構(gòu)和策略》等。
第 一篇 緒論
第 1章 軟件調(diào)試基礎(chǔ) 3
1.1 簡(jiǎn)介 3
1.1.1 定義 3
1.1.2 基本過程 5
1.2 基本特征 5
1.2.1 難度大 6
1.2.2 難以估計(jì)完成時(shí)間 7
1.2.3 廣泛的關(guān)聯(lián)性 7
1.3 簡(jiǎn)要?dú)v史 8
1.3.1 單步執(zhí)行 8
1.3.2 斷點(diǎn)指令 10
1.3.3 分支監(jiān)視 11
1.4 分類 12
1.4.1 按調(diào)試目標(biāo)的系統(tǒng)環(huán)境分類 12
1.4.2 按目標(biāo)代碼的執(zhí)行方式分類 12
1.4.3 按目標(biāo)代碼的執(zhí)行模式分類 13
1.4.4 按軟件所處的階段分類 13
1.4.5 按調(diào)試器與調(diào)試目標(biāo)的相對(duì)位置分類 14
1.4.6 按調(diào)試目標(biāo)的活動(dòng)性分類 14
1.4.7 按調(diào)試工具分類 15
1.5 調(diào)試技術(shù)概覽 15
1.5.1 斷點(diǎn) 15
1.5.2 單步執(zhí)行 16
1.5.3 輸出調(diào)試信息 17
1.5.4 日志 17
1.5.5 事件追蹤 17
1.5.6 轉(zhuǎn)儲(chǔ)文件 18
1.5.7 棧回溯 18
1.5.8 反匯編 18
1.5.9 觀察和修改內(nèi)存數(shù)據(jù) 19
1.5.10 控制被調(diào)試進(jìn)程和線程 19
1.6 錯(cuò)誤與缺欠 19
1.6.1 內(nèi)因與表象 19
1.6.2 誰(shuí)的bug 20
1.6.3 bug的生命周期 21
1.6.4 軟件錯(cuò)誤的開支曲線 21
1.7 重要性 23
1.7.1 調(diào)試與編碼的關(guān)系 23
1.7.2 調(diào)試與測(cè)試的關(guān)系 24
1.7.3 調(diào)試與逆向工程的關(guān)系 24
1.7.4 學(xué)習(xí)調(diào)試技術(shù)的意義 25
1.7.5 調(diào)試技術(shù)尚未得到應(yīng)有的重視 25
1.8 本章小結(jié) 26
參考資料 26
第二篇 CPU及其調(diào)試設(shè)施
第 2章 CPU基礎(chǔ) 29
2.1 指令和指令集 29
2.1.1 基本特征 30
2.1.2 尋址方式 31
2.1.3 指令的執(zhí)行過程 32
2.2 英特爾架構(gòu)處理器 33
2.2.1 80386處理器 34
2.2.2 80486處理器 34
2.2.3 奔騰處理器 35
2.2.4 P6系列處理器 36
2.2.5 奔騰4處理器 38
2.2.6 Core 2系列處理器 38
2.2.7 Nehalem微架構(gòu) 39
2.2.8 Sandy Bridge微架構(gòu) 39
2.2.9 Ivy Bridge微架構(gòu) 40
2.2.10 Haswell微架構(gòu) 40
2.2.11 Broadwell微架構(gòu) 41
2.2.12 Skylake微架構(gòu) 41
2.2.13 Kaby Lake微架構(gòu) 41
2.3 CPU的操作模式 42
2.4 寄存器 44
2.4.1 通用數(shù)據(jù)寄存器 44
2.4.2 標(biāo)志寄存器 45
2.4.3 MSR寄存器 46
2.4.4 控制寄存器 46
2.4.5 其他寄存器 48
2.4.6 64位模式時(shí)的寄存器 49
2.5 理解保護(hù)模式 50
2.5.1 任務(wù)間的保護(hù)機(jī)制 50
2.5.2 任務(wù)內(nèi)的保護(hù) 51
2.5.3 特權(quán)級(jí) 52
2.5.4 特權(quán)指令 53
2.6 段機(jī)制 54
2.6.1 段描述符 54
2.6.2 描述符表 56
2.6.3 段選擇子 56
2.6.4 觀察段寄存器 57
2.7 分頁(yè)機(jī)制 59
2.7.1 32位經(jīng)典分頁(yè) 60
2.7.2 PAE分頁(yè) 66
2.7.3 IA-32e分頁(yè) 68
2.7.4 大內(nèi)存頁(yè) 71
2.7.5 WinDBG的有關(guān)命令 72
2.8 PC系統(tǒng)概貌 73
2.9 ARM架構(gòu)基礎(chǔ) 75
2.9.1 ARM的多重含義 75
2.9.2 主要版本 76
2.9.3 操作模式和狀態(tài) 78
2.9.4 32位架構(gòu)核心寄存器 80
2.9.5 協(xié)處理器 82
2.9.6 虛擬內(nèi)存管理 83
2.9.7 偽段支持 87
2.9.8 64位ARM架構(gòu) 88
2.10 本章小結(jié) 90
參考資料 90
第3章 中斷和異!91
3.1 概念和差異 91
3.1.1 中斷 91
3.1.2 異常 93
3.1.3 比較 93
3.2 異常的分類 93
3.2.1 錯(cuò)誤類異!93
3.2.2 陷阱類異!94
3.2.3 中止類異!95
3.3 異常例析 95
3.3.1 列表 95
3.3.2 錯(cuò)誤代碼 97
3.3.3 示例 97
3.4 中斷/異常的優(yōu)先級(jí) 99
3.5 中斷/異常處理 100
3.5.1 實(shí)模式 100
3.5.2 保護(hù)模式 101
3.5.3 IA-32e模式 109
3.6 ARM架構(gòu)中的異常機(jī)制 110
3.7 本章小結(jié) 112
參考資料 113
第4章 斷點(diǎn)和單步執(zhí)行 114
4.1 軟件斷點(diǎn) 114
4.1.1 INT 3 114
4.1.2 在調(diào)試器中設(shè)置斷點(diǎn) 115
4.1.3 斷點(diǎn)命中 116
4.1.4 恢復(fù)執(zhí)行 118
4.1.5 特殊用途 118
4.1.6 斷點(diǎn)API 119
4.1.7 系統(tǒng)對(duì)INT 3的優(yōu)待 119
4.1.8 觀察調(diào)試器寫入的INT 3指令 121
4.1.9 歸納和提示 122
4.2 硬件斷點(diǎn) 123
4.2.1 調(diào)試寄存器概覽 123
4.2.2 調(diào)試地址寄存器 124
4.2.3 調(diào)試控制寄存器 124
4.2.4 指令斷點(diǎn) 127
4.2.5 調(diào)試異!127
4.2.6 調(diào)試狀態(tài)寄存器 128
4.2.7 示例 129
4.2.8 硬件斷點(diǎn)的設(shè)置方法 132
4.2.9 歸納 134
4.3 陷阱標(biāo)志 135
4.3.1 單步執(zhí)行標(biāo)志 135
4.3.2 高級(jí)語(yǔ)言的單步執(zhí)行 136
4.3.3 任務(wù)狀態(tài)段陷阱標(biāo)志 138
4.3.4 按分支單步執(zhí)行標(biāo)志 138
4.4 實(shí)模式調(diào)試器例析 140
4.4.1 Debug.exe 140
4.4.2 8086 Monitor 142
4.4.3 關(guān)鍵實(shí)現(xiàn) 143
4.5 反調(diào)試示例 145
4.6 ARM架構(gòu)的斷點(diǎn)支持 147
4.6.1 斷點(diǎn)指令 148
4.6.2 斷點(diǎn)寄存器 149
4.6.3 監(jiān)視點(diǎn)寄存器 153
4.6.4 單步跟蹤 155
4.7 本章小結(jié) 156
參考資料 157
第5章 分支記錄和性能監(jiān)視 158
5.1 分支監(jiān)視概覽 159
5.2 使用寄存器的分支記錄 159
5.2.1 LBR 160
5.2.2 LBR!161
5.2.3 示例 161
5.2.4 在Windows操作系統(tǒng)中的應(yīng)用 165
5.3 使用內(nèi)存的分支記錄 166
5.3.1 DS區(qū) 166
5.3.2 啟用DS機(jī)制 168
5.3.3 調(diào)試控制寄存器 168
5.4 DS示例:CpuWhere 169
5.4.1 驅(qū)動(dòng)程序 170
5.4.2 應(yīng)用界面 173
5.4.3 2.0版本 175
5.4.4 局限性和擴(kuò)展建議 178
5.4.5 Linux內(nèi)核中的BTS驅(qū)動(dòng) 179
5.5 性能監(jiān)視 180
5.5.1 奔騰處理器的性能監(jiān)視機(jī)制 181
5.5.2 P6處理器的性能監(jiān)視機(jī)制 182
5.5.3 P4處理器的性能監(jiān)視 183
5.5.4 架構(gòu)性的性能監(jiān)視機(jī)制 186
5.5.5 酷睿微架構(gòu)處理器的性能監(jiān)視機(jī)制 187
5.5.6 資源 188
5.6 實(shí)時(shí)指令追蹤 188
5.6.1 工作原理 189
5.6.2 RTIT數(shù)據(jù)包 190
5.6.3 Linux支持 191
5.7 ARM架構(gòu)的性能監(jiān)視設(shè)施 192
5.7.1 PMUv1和PMUv2 192
5.7.2 PMUv3 194
5.7.3 示例 194
5.7.4 CoreSight 195
5.8 本章小結(jié) 195
參考資料 195
第6章 機(jī)器檢查架構(gòu) 196
6.1 奔騰處理器的機(jī)器檢查機(jī)制 196
6.2 MCA 198
6.2.1 概覽 198
6.2.2 MCA的全局寄存器 199
6.2.3 MCA的錯(cuò)誤報(bào)告寄存器 201
6.2.4 擴(kuò)展的機(jī)器檢查狀態(tài)寄存器 202
6.2.5 MCA錯(cuò)誤編碼 203
6.3 編寫MCA軟件 205
6.3.1 基本算法 205
6.3.2 示例 207
6.3.3 在Windows系統(tǒng)中的應(yīng)用 208
6.3.4 在Linux系統(tǒng)中的應(yīng)用 210
6.4 本章小結(jié) 212
參考資料 212
第7章 JTAG調(diào)試 213
7.1 簡(jiǎn)介 213
7.1.1 ICE 213
7.1.2 JTAG 214
7.2 JTAG原理 215
7.2.1 邊界掃描鏈路 215
7.2.2 TAP信號(hào) 216
7.2.3 TAP寄存器 217
7.2.4 TAP控制器 217
7.2.5 TAP指令 218
7.3 JTAG應(yīng)用 219
7.3.1 JTAG調(diào)試 220
7.3.2 調(diào)試端口 221
7.4 IA處理器的JTAG支持 221
7.4.1 P6處理器的JTAG實(shí)現(xiàn) 221
7.4.2 探測(cè)模式 223
7.4.3 ITP接口 223
7.4.4 XDP端口 225
7.4.5 ITP-XDP調(diào)試儀 226
7.4.6 直接連接接口 226
7.4.7 典型應(yīng)用 227
7.5 ARM處理器的JTAG支持 227
7.5.1 ARM調(diào)試接口 228
7.5.2 調(diào)試端口 228
7.5.3 訪問端口 229
7.5.4 被調(diào)試器件 229
7.5.5 調(diào)試接插口 229
7.5.6 硬件調(diào)試器 231
7.5.7 DS-5 232
7.6 本章小結(jié) 232
參考資料 233
第三篇 GPU及其調(diào)試設(shè)施
第8章 GPU基礎(chǔ) 237
8.1 GPU簡(jiǎn)史 237
8.1.1 從顯卡說起 237
8.1.2 硬件加速 239
8.1.3 可編程和通用化 240
8.1.4 三輪演進(jìn) 242
8.2 設(shè)備身份 243
8.2.1 “喂模式” 243
8.2.2 內(nèi)存復(fù)制 243
8.2.3 超時(shí)檢測(cè)和復(fù)位 243
8.2.4 與CPU之并立 243
8.3 軟件接口 244
8.3.1 設(shè)備寄存器 244
8.3.2 批命令緩沖區(qū) 245
8.3.3 狀態(tài)模型 245
8.4 GPU驅(qū)動(dòng)模型 247
8.4.1 WDDM 247
8.4.2 DRI和DRM 249
8.5 編程技術(shù) 250
8.5.1 著色器 250
8.5.2 Brook和CUDA 251
8.5.3 OpenCL 252
8.6 調(diào)試設(shè)施 252
8.6.1 輸出調(diào)試信息 253
8.6.2 發(fā)布斷點(diǎn) 253
8.6.3 其他斷點(diǎn) 254
8.6.4 單步執(zhí)行 254
8.6.5 觀察程序狀態(tài) 254
8.7 本章小結(jié) 254
參考資料 255
第9章 Nvidia GPU及其調(diào)試設(shè)施 256
9.1 概要 256
9.1.1 一套微架構(gòu) 256
9.1.2 三條產(chǎn)品線 256
9.1.3 封閉 257
9.2 微架構(gòu) 257
9.2.1 G80(特斯拉1.0微架構(gòu)) 257
9.2.2 GT200(特斯拉2.0微架構(gòu)) 259
9.2.3 GF100(費(fèi)米微架構(gòu)) 260
9.2.4 GK110(開普勒微架構(gòu)) 261
9.2.5 GM107(麥斯威爾微架構(gòu)) 263
9.2.6 GP104(帕斯卡微架構(gòu)) 263
9.2.7 GV100(伏特微架構(gòu)) 265
9.2.8 持續(xù)改進(jìn) 267
9.3 硬件指令集 268
9.3.1 SASS 269
9.3.2 指令格式 270
9.3.3 謂詞執(zhí)行 270
9.3.4 計(jì)算能力 271
9.3.5 GT200的指令集 271
9.3.6 GV100的指令集 274
9.4 PTX指令集 279
9.4.1 匯編和反匯編 280
9.4.2 狀態(tài)空間 282
9.4.3 虛擬寄存器 283
9.4.4 數(shù)據(jù)類型 284
9.4.5 指令格式 284
9.4.6 內(nèi)嵌匯編 285
9.5 CUDA 286
9.5.1 源于Brook 286
9.5.2 算核 286
9.5.3 執(zhí)行配置 288
9.5.4 內(nèi)置變量 290
9.5.5 Warp 291
9.5.6 顯式并行 292
9.6 異常和陷阱 293
9.6.1 陷阱指令 293
9.6.2 陷阱后綴 293
9.6.3 陷阱處理 293
9.7 系統(tǒng)調(diào)用 296
9.7.1 vprintf 296
9.7.2 malloc和free 297
9.7.3 __assertfail 298
9.8 斷點(diǎn)指令 299
9.8.1 PTX的斷點(diǎn)指令 299
9.8.2 硬件的斷點(diǎn)指令 300
9.9 Nsight的斷點(diǎn)功能 301
9.9.1 源代碼斷點(diǎn) 301
9.9.2 函數(shù)斷點(diǎn) 301
9.9.3 根據(jù)線程組和線程編號(hào)設(shè)置條件斷點(diǎn) 302
9.10 數(shù)據(jù)斷點(diǎn) 304
9.10.1 設(shè)置方法 304
9.10.2 命中 304
9.10.3 數(shù)量限制 306
9.10.4 設(shè)置時(shí)機(jī) 306
9.11 調(diào)試符號(hào) 306
9.11.1 編譯選項(xiàng) 306
9.11.2 ELF載體 306
9.11.3 DWARF 307
9.12 CUDA GDB 307
9.12.1 通用命令 307
9.12.2 擴(kuò)展 308
9.12.3 局限 308
9.13 CUDA調(diào)試器API 308
9.13.1 頭文件 309
9.13.2 調(diào)試事件 309
9.13.3 工作原理 310
9.14 本章小結(jié) 312
參考資料 312
第 10章 AMD GPU及其調(diào)試設(shè)施 314
10.1 演進(jìn)簡(jiǎn)史 314
10.1.1 三個(gè)發(fā)展階段 314
10.1.2 兩種產(chǎn)品形態(tài) 315
10.2 Terascale微架構(gòu) 315
10.2.1 總體結(jié)構(gòu) 315
10.2.2 SIMD核心 317
10.2.3 VLIW 317
10.2.4 四類指令 318
10.3 GCN微架構(gòu) 318
10.3.1 邏輯結(jié)構(gòu) 319
10.3.2 CU和波陣 319
10.3.3 內(nèi)存層次結(jié)構(gòu) 321
10.3.4 工作組 321
10.3.5 多執(zhí)行引擎 323
10.4 GCN指令集 323
10.4.1 7種指令類型 323
10.4.2 指令格式 324
10.4.3 不再是VLIW指令 324
10.4.4 指令手冊(cè) 324
10.5 編程模型 325
10.5.1 地!325
10.5.2 HSA 326
10.5.3 ROCm 326
10.5.4 Stream SDK和APP SDK 327
10.5.5 Linux系統(tǒng)的驅(qū)動(dòng) 327
10.6 異常和陷阱 327
10.6.1 9種異!328
10.6.2 啟用 328
10.6.3 陷阱狀態(tài)寄存器 328
10.6.4 陷阱處理器基地址 329
10.6.5 陷阱處理過程 329
10.7 控制波陣的調(diào)試接口 330
10.7.1 5種操作 330
10.7.2 指定目標(biāo) 330
10.7.3 發(fā)送接口 331
10.7.4 限制 332
10.8 地址監(jiān)視 332
10.8.1 4種監(jiān)視模式 332
10.8.2 數(shù)量限制 333
10.8.3 報(bào)告命中 333
10.8.4 寄存器接口 333
10.8.5 用戶空間接口 333
10.9 單步調(diào)試支持 333
10.9.1 單步調(diào)試模式 334
10.9.2 控制方法 334
10.10 根據(jù)調(diào)試條件實(shí)現(xiàn)分支跳轉(zhuǎn)的指令 335
10.10.1 兩個(gè)條件標(biāo)志 335
10.10.2 4條指令 335
10.11 代碼斷點(diǎn) 335
10.11.1 陷阱指令 336
10.11.2 在GPU調(diào)試SDK中的使用 336
10.12 GPU調(diào)試模型和開發(fā)套件 337
10.12.1 組成 337
10.12.2 進(jìn)程內(nèi)調(diào)試模型 337
10.12.3 面向事件的調(diào)試接口 339
10.13 ROCm-GDB 340
10.13.1 源代碼 340
10.13.2 安裝和編譯 340
10.13.3 常用命令 340
10.14 本章小結(jié) 341
參考資料 342
第 11章 英特爾GPU及其調(diào)試設(shè)施 343
11.1 演進(jìn)簡(jiǎn)史 343
11.1.1 i740 343
11.1.2 集成顯卡 344
11.1.3 G965 345
11.1.4 Larabee 345
11.1.5 GPU 346
11.1.6 第三輪努力 347
11.1.7 公開文檔 347
11.2 GEN微架構(gòu) 348
11.2.1 總體架構(gòu) 349
11.2.2 片區(qū)布局 350
11.2.3 子片布局 351
11.2.4 EU 352
11.2.5 經(jīng)典架構(gòu)圖 353
11.3 寄存器接口 354
11.3.1 兩大類寄存器 354
11.3.2 顯示功能的寄存器 355
11.4 命令流和環(huán)形緩沖區(qū) 357
11.4.1 命令 357
11.4.2 環(huán)形緩沖區(qū) 358
11.4.3 環(huán)形緩沖區(qū)寄存器 359
11.5 邏輯環(huán)上下文和執(zhí)行列表 360
11.5.1 LRC 360
11.5.2 執(zhí)行鏈表提交端口 362
11.5.3 理解LRC的提交和執(zhí)行過程 362
11.6 GuC和通過GuC提交任務(wù) 365
11.6.1 加載固件和啟動(dòng)GuC 365
11.6.2 以MMIO方式通信 366
11.6.3 基于共享內(nèi)存的命令傳遞機(jī)制 367
11.6.4 提交工作任務(wù) 367
11.7 媒體流水線 368
11.7.1 G965的媒體流水線 368
11.7.2 MFX引擎 370
11.7.3 狀態(tài)模型 370
11.7.4 多種計(jì)算方式 371
11.8 EU指令集 372
11.8.1 寄存器 372
11.8.2 寄存器區(qū)塊 373
11.8.3 指令語(yǔ)法 375
11.8.4 VLIW和指令級(jí)別并行 375
11.9 內(nèi)存管理 377
11.9.1 GGTT 377
11.9.2 PPGTT 378
11.9.3 I915和GMMLIB 379
11.10 異!379
11.10.1 異常類型 379
11.10.2 系統(tǒng)過程 380
11.11 斷點(diǎn)支持 381
11.11.1 調(diào)試控制位 381
11.11.2 操作碼匹配斷點(diǎn) 381
11.11.3 IP匹配斷點(diǎn) 381
11.11.4 初始斷點(diǎn) 382
11.12 單步執(zhí)行 382
11.13 GT調(diào)試器 382
11.13.1 架構(gòu) 382
11.13.2 調(diào)試事件 384
11.13.3 符號(hào)管理 385
11.13.4 主要功能 385
11.13.5 不足 385
11.14 本章小結(jié) 386
參考資料 386
第 12章 Mali GPU及其調(diào)試設(shè)施 387
12.1 概況 387
12.1.1 源于挪威 387
12.1.2 納入ARM 387
12.1.3 三代微架構(gòu) 388
12.1.4 發(fā)貨最多的圖形處理器 388
12.1.5 精悍的團(tuán)隊(duì) 389
12.1.6 封閉的技術(shù)文檔 389
12.1.7 單元化設(shè)計(jì) 389
12.2 Midgard微架構(gòu) 389
12.2.1 邏輯結(jié)構(gòu) 390
12.2.2 三流水線著色器核心 390
12.2.3 VLIW指令集 392
12.3 Bifrost微架構(gòu) 393
12.3.1 邏輯結(jié)構(gòu) 393
12.3.2 執(zhí)行核心 394
12.3.3 標(biāo)量指令集和Warp 395
12.4 Mali圖形調(diào)試器 395
12.4.1 雙機(jī)模式 395
12.4.2 面向幀調(diào)試 396
12.5 Gator 396
12.5.1 Gator內(nèi)核模塊(gator.ko) 397
12.5.2 Gator文件系統(tǒng)(gatorfs) 397
12.5.3 Gator后臺(tái)服務(wù)(gatord) 398
12.5.4 Kbase驅(qū)動(dòng)中的gator支持 399
12.5.5 含義 399
12.6 Kbase驅(qū)動(dòng)的調(diào)試設(shè)施 399
12.6.1 GPU版本報(bào)告 399
12.6.2 編譯選項(xiàng) 400
12.6.3 DebugFS下的虛擬文件 401
12.6.4 SysFS下的虛擬文件 401
12.6.5 基于ftrace的追蹤設(shè)施 401
12.6.6 Kbase的追蹤設(shè)施 402
12.7 其他調(diào)試設(shè)施 403
12.7.1 Caiman 403
12.7.2 devlib 404
12.7.3 Mali離線編譯器 404
12.8 缺少的調(diào)試設(shè)施 405
12.8.1 GPGPU調(diào)試器 405
12.8.2 GPU調(diào)試SDK 406
12.8.3 反匯編器 406
12.8.4 ISA文檔 406
12.9 本章小結(jié) 406
參考資料 406
第 13章 PowerVR GPU及其調(diào)試設(shè)施 407
13.1 概要 407
13.1.1 發(fā)展簡(jiǎn)史 407
13.1.2 兩條產(chǎn)品線 409
13.1.3 基于圖塊延遲渲染 409
13.1.4 Intel GMA 409
13.1.5 開放性 410
13.2 Rogue微架構(gòu) 410
13.2.1 總體結(jié)構(gòu) 410
13.2.2 USC 411
13.2.3 ALU流水線 412
13.3 參考指令集 413
13.3.1 寄存器 414
13.3.2 指令組 414
13.3.3 指令修飾符 415
13.3.4 指令類型 415
13.3.5 標(biāo)量指令 416
13.3.6 并行模式 416
13.4 軟件模型和微內(nèi)核 417
13.4.1 軟件模型 417
13.4.2 微內(nèi)核的主要功能 417
13.4.3 優(yōu)點(diǎn) 418
13.4.4 存在的問題 418
13.5 斷點(diǎn)支持 418
13.5.1 bpret指令 419
13.5.2 數(shù)據(jù)斷點(diǎn) 419
13.5.3 ISP斷點(diǎn) 420
13.6 離線編譯和反匯編 420
13.6.1 離線編譯 420
13.6.2 反匯編 421
13.7 PVR-GDB 421
13.7.1 跟蹤調(diào)試 421
13.7.2 寄存器訪問 422
13.7.3 其他功能 422
13.7.4 全局?jǐn)帱c(diǎn)和局限性 422
13.8 本章小結(jié) 423
參考資料 423
第 14章 GPU綜述 424
14.1 比較 424
14.1.1 開放性 424
14.1.2 工具鏈 425
14.1.3 開發(fā)者文檔 425
14.2 主要矛盾 425
14.2.1 專用性和通用性 426
14.2.2 強(qiáng)硬件和弱軟件 426
14.3 發(fā)展趨勢(shì) 426
14.3.1 從固定功能單元到通用執(zhí)行引擎 426
14.3.2 從向量指令到標(biāo)量指令 427
14.3.3 從指令并行到線程并行 427
14.4 其他GPU 427
14.4.1 Adreno 428
14.4.2 VideoCore 428
14.4.3 圖芯GPU 429
14.4.4 TI TMS34010 429
14.5 學(xué)習(xí)資料和工具 430
14.5.1 文檔 430
14.5.2 源代碼 430
14.5.3 工具 431
14.6 本章小結(jié) 432
參考資料 432
第四篇 可調(diào)試性
第 15章 可調(diào)試性概覽 435
15.1 簡(jiǎn)介 435
15.2 觀止和未雨綢繆 436
15.2.1 NT 3.1的故事 436
15.2.2 未雨綢繆 438
15.3 基本原則 439
15.3.1 最短距離原則 439
15.3.2 最小范圍原則 439
15.3.3 立刻終止原則 440
15.3.4 可追溯原則 441
15.3.5 可控制原則 442
15.3.6 可重復(fù)原則 442
15.3.7 可觀察原則 442
15.3.8 易辨識(shí)原則 443
15.3.9 低海森伯效應(yīng)原則 443
15.4 不可調(diào)試代碼 444
15.4.1 系統(tǒng)的異常分發(fā)函數(shù) 444
15.4.2 提供調(diào)試功能的系統(tǒng)函數(shù) 444
15.4.3 對(duì)調(diào)試器敏感的函數(shù) 445
15.4.4 反跟蹤和調(diào)試的程序 445
15.4.5 時(shí)間敏感的代碼 446
15.4.6 應(yīng)對(duì)措施 446
15.5 可調(diào)試性例析 446
15.5.1 健康性檢查和BSOD 447
15.5.2 可控制性 447
15.5.3 公開的符號(hào)文件 448
15.5.4 WER 448
15.5.5 ETW和日志 448
15.5.6 性能計(jì)數(shù)器 449
15.5.7 內(nèi)置的內(nèi)核調(diào)試引擎 449
15.5.8 手動(dòng)觸發(fā)崩潰 449
15.6 與安全、商業(yè)秘密和性能的關(guān)系 449
15.6.1 可調(diào)試性與安全性 450
15.6.2 可調(diào)試性與商業(yè)秘密 450
15.6.3 可調(diào)試性與性能 450
15.7 本章小結(jié) 450
參考資料 451
第 16章 可調(diào)試性的實(shí)現(xiàn) 452
16.1 角色和職責(zé) 452
16.1.1 架構(gòu)師 452
16.1.2 程序員 453
16.1.3 測(cè)試人員 453
16.1.4 產(chǎn)品維護(hù)和技術(shù)支持工程師 454
16.1.5 管理者 454
16.2 可調(diào)試架構(gòu) 455
16.2.1 日志 455
16.2.2 輸出調(diào)試信息 456
16.2.3 轉(zhuǎn)儲(chǔ) 457
16.2.4 基類 458
16.2.5 調(diào)試模型 458
16.3 通過;厮輰(shí)現(xiàn)可追溯性 459
16.3.1 棧回溯的基本原理 459
16.3.2 利用DbgHelp函數(shù)庫(kù)回溯!461
16.3.3 利用RTL函數(shù)回溯!465
16.4 數(shù)據(jù)的可追溯性 466
16.4.1 基于數(shù)據(jù)斷點(diǎn)的方法 466
16.4.2 使用對(duì)象封裝技術(shù)來追蹤數(shù)據(jù)變化 471
16.5 可觀察性的實(shí)現(xiàn) 472
16.5.1 狀態(tài)查詢 472
16.5.2 WMI 473
16.5.3 性能計(jì)數(shù)器 475
16.5.4 轉(zhuǎn)儲(chǔ) 478
16.5.5 打印或者輸出調(diào)試信息 479
16.5.6 日志 480
16.6 自檢和自動(dòng)報(bào)告 480
16.6.1 BIST 480
16.6.2 軟件自檢 481
16.6.3 自動(dòng)報(bào)告 482
16.7 本章小結(jié) 482
參考資料 483
你還可能感興趣
我要評(píng)論
|