注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)高效C/C++調(diào)試

高效C/C++調(diào)試

高效C/C++調(diào)試

定 價(jià):¥99.00

作 者: (美)嚴(yán)琦,盧憲廷
出版社: 清華大學(xué)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787302649717 出版時(shí)間: 2024-01-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡介

  《高效C/C 調(diào)試》是關(guān)于軟件調(diào)試技術(shù)的深度探索,融合了作者的實(shí)踐智慧。書中不僅指導(dǎo)讀者如何使用專業(yè)的調(diào)試工具,還介紹了如何宏觀和微觀地分析問題,并最大限度地發(fā)揮調(diào)試器功能。此外,書中還深入解讀了調(diào)試背后的技術(shù)原理,如調(diào)試符號、內(nèi)存管理及系統(tǒng)內(nèi)核對內(nèi)存的操作機(jī)制,以揭示內(nèi)存管理的關(guān)鍵性和復(fù)雜性。除了介紹基礎(chǔ)概念外,本書還涵蓋了許多增強(qiáng)調(diào)試能力的工具與插件。盡管焦點(diǎn)集中在C/C ,但其中的策略與技巧具有普適性,適用于多種編程語境。內(nèi)容包括從內(nèi)存泄漏預(yù)防調(diào)試、Linux下的eBPF和strace調(diào)試方法,到Kubernetes容器調(diào)試,再到C 20的協(xié)程與崩潰信息收集策略?!陡咝/C 調(diào)試》主要面向具有C/C 編程基礎(chǔ)的讀者,同時(shí)也非常適合對軟件技術(shù)原理有深入探索興趣的讀者以及追求高效調(diào)試技巧的開發(fā)人員。

作者簡介

  嚴(yán)琦 畢業(yè)于中國科技大學(xué)和美國倫斯勒理工學(xué)院。 畢業(yè)后近三十年里曾先后任職于五家軟件技術(shù)公司從事技算機(jī)編程工作,從初級程序員成長為一個(gè)中等規(guī)模的軟件公司的首席架構(gòu)師,涉及包括嵌入式系統(tǒng),有限元分析,計(jì)算機(jī)輔助設(shè)計(jì),商業(yè)智能系統(tǒng)等領(lǐng)域,致力于微處理器,編譯器,服務(wù)器,系統(tǒng)內(nèi)核等技術(shù)。作者有多項(xiàng)開源項(xiàng)目在實(shí)際應(yīng)用中受到公司內(nèi)外的肯定和感謝,在工作中申請并獲批一項(xiàng)軟件專利,并有另一項(xiàng)專利在審批中。 盧憲廷 本科畢業(yè)于天津大學(xué),研究生東南大學(xué)。目前在微策略軟件擔(dān)任高級軟件工程師,負(fù)責(zé)設(shè)計(jì)和開發(fā)優(yōu)化企業(yè)全域搜索引擎;專注于高穩(wěn)定/事件驅(qū)動異步架構(gòu)/C /Rust編程。

圖書目錄


第1章   調(diào)試符號和調(diào)試器 1
1.1  調(diào)試符號 1
1.1.1  調(diào)試符號概覽 2
1.1.2  DWARF格式 3
1.2  實(shí)戰(zhàn)故事1:數(shù)據(jù)類型的不一致 14
1.3  調(diào)試器的內(nèi)部結(jié)構(gòu) 16
1.3.1  用戶界面 16
1.3.2  符號管理模塊 16
1.3.3  目標(biāo)管理模塊 17
1.4  技巧和注意事項(xiàng) 21
1.4.1  特殊的調(diào)試符號 21
1.4.2  改變執(zhí)行及其副作用 24
1.4.3  符號匹配的自動化 25
1.4.4  后期分析 26
1.4.5  內(nèi)存保護(hù) 27
1.4.6  斷點(diǎn)不工作 27
1.5  本章小結(jié) 28
第2章   堆數(shù)據(jù)結(jié)構(gòu) 29
2.1  理解內(nèi)存管理器 30
2.1.1  ptmalloc 31
2.1.2  TCMalloc 34
2.1.3  多個(gè)堆 38
2.2  利用堆元數(shù)據(jù) 39
2.3  本章小結(jié) 42
第3章   內(nèi)存損壞 43
3.1  內(nèi)存是怎么損壞的 44
3.1.1  內(nèi)存溢出與下溢 44
3.1.2  訪問釋放的內(nèi)存 45
3.1.3  使用未初始化的值 46
3.2  調(diào)試內(nèi)存損壞 47
3.2.1  初始調(diào)查 49
3.2.2  內(nèi)存調(diào)試工具 53
3.2.3  堆與棧內(nèi)存損壞對比 53
3.2.4  工具箱 54
3.3  實(shí)戰(zhàn)故事2:神秘的字節(jié)序轉(zhuǎn)換 55
3.3.1  癥狀 55
3.3.2  分析和調(diào)試 56
3.3.3  錯(cuò)誤和有價(jià)值的點(diǎn) 64
3.4  實(shí)戰(zhàn)故事3:覆寫棧變量 65
3.4.1  癥狀 65
3.4.2  分析和調(diào)試 65
3.5  本章小結(jié) 68
第4章   C 對象布局 69
4.1  對齊和大小端 69
4.1.1  對齊 69
4.1.2  大小端 70
4.2  C 對象布局 71
4.3  實(shí)戰(zhàn)故事4:訪問已經(jīng)釋放的數(shù)據(jù) 94
4.3.1  癥狀 94
4.3.2  分析和調(diào)試 94
4.4  搜索引用樹 95
4.5  本章小結(jié) 101
第5章   優(yōu)化后的二進(jìn)制 102
5.1  調(diào)試版和發(fā)行版的區(qū)別 102
5.2  調(diào)試優(yōu)化代碼的挑戰(zhàn) 106
5.3  匯編代碼介紹 108
5.3.1  寄存器 109
5.3.2  指令集 111
5.3.3  程序匯編的結(jié)構(gòu) 113
5.3.4  函數(shù)調(diào)用習(xí)慣 116
5.4  分析優(yōu)化后的代碼 127
5.5  調(diào)試優(yōu)化后的代碼示例 130
5.6  本章小結(jié) 141
第6章   進(jìn)程鏡像 142
6.1  二進(jìn)制文件格式 144
6.2  運(yùn)行期加載和鏈接 148
6.3  進(jìn)程映射表 153
6.3.1  可執(zhí)行文件 154
6.3.2  共享庫 156
6.3.3  線程棧 157
6.3.4  無名區(qū)域 157
6.3.5  攔截 158
6.3.6  鏈接時(shí)替換 158
6.3.7  預(yù)先加載代理函數(shù) 159
6.3.8  修改導(dǎo)入和導(dǎo)出表 159
6.3.9  對目標(biāo)函數(shù)進(jìn)行手術(shù)改變 164
6.3.10  核心轉(zhuǎn)儲文件格式 166
6.3.11  核心轉(zhuǎn)儲文件分析工具 169
6.4  本章小結(jié) 170
第7章   調(diào)試多線程程序 171
7.1  競爭條件 171
7.2  它是競爭條件嗎 172
7.3  調(diào)試競爭條件 174
7.4  實(shí)戰(zhàn)故事5:記錄重要區(qū)域 175
7.4.1  癥狀 175
7.4.2  分析調(diào)試 175
7.5  死鎖 177
7.6  本章小結(jié) 179
第8章   更多調(diào)試方法 180
8.1  重現(xiàn)錯(cuò)誤 180
8.1.1  歸因 181
8.1.2  收集環(huán)境信息 182
8.1.3  重建環(huán)境 184
8.2  防止未來的bug 184
8.2.1  知識保留和傳遞 185
8.2.2  增強(qiáng)提前檢查 185
8.2.3  編寫更好調(diào)試的代碼 185
8.3  不要忘記這些調(diào)試規(guī)則 189
8.3.1  分治法 189
8.3.2  退一步,獲取新的觀點(diǎn) 189
8.3.3  保留調(diào)試歷史 190
8.4  逆向調(diào)試 190
8.4.1  rr:Record and Replay 191
8.4.2  rr注意事項(xiàng) 191
8.5  本章小結(jié) 192
第9章   拓展調(diào)試器能力 193
9.1  使用Python拓展GDB 193
9.1.1  美化輸出 194
9.1.2  編寫自己的美觀打印器 195
9.1.3  將重復(fù)的工作變成一個(gè)命令 197
9.1.4  更快地調(diào)試bug 198
9.1.5  使用Python設(shè)置斷點(diǎn) 200
9.1.6  通過命令行來啟動程序和設(shè)置斷點(diǎn) 203
9.2  GDB自定義命令 203
9.3  本章小結(jié) 206
第10章   內(nèi)存調(diào)試工具 207
10.1  ptmalloc’s MALLOC_CHECK_ 208
10.2  Google Address Sanitizer 212
10.3  AccuTrak 213
10.4  有效地調(diào)試內(nèi)存損壞 225
10.5  實(shí)戰(zhàn)故事6:內(nèi)存管理器的崩潰問題 228
10.5.1  癥狀 229
10.5.2  分析和調(diào)試 229
10.6  本章小結(jié) 235
第11章   Core Analyzer 236
11.1  使用示例 237
11.2  主要功能 239
11.2.1  搜索引用的對象(水平搜索) 239
11.2.2  查詢地址及其底層對象(垂直搜索) 240
11.2.3  內(nèi)存模式分析 241
11.2.4  查詢堆內(nèi)存塊 242
11.2.5  堆遍歷(檢查整個(gè)堆以發(fā)現(xiàn)損壞并獲取內(nèi)存使用統(tǒng)計(jì)) 242
11.3  本章小結(jié) 246
第12章   更多調(diào)試工具 247
12.1  strace 247
12.1.1  常用功能 247
12.1.2  常用附加選項(xiàng) 248
12.2  實(shí)戰(zhàn)故事7:僵尸進(jìn)程 248
12.2.1  遇到難題 248
12.2.2  揭示bug的真相 249
12.3  Perf 249
12.4  eBPF 250
12.4.1  準(zhǔn)備環(huán)境 251
12.4.2  編寫代碼 251
12.4.3  編譯程序 252
12.4.4   加載和運(yùn)行程序 254
12.5  實(shí)戰(zhàn)故事8:鏈接問題 255
12.5.1  切入 255
12.5.2  更奇怪的事情 258
12.5.3  柳暗花明 259
12.5.4  補(bǔ)充 260
12.5.5  結(jié)論 261
12.6  實(shí)戰(zhàn)故事9:臨時(shí)變量的生命周期 261
12.7  本章小結(jié) 264
第13章   崩潰發(fā)送機(jī)制 265
13.1  客戶端 266
13.2  遠(yuǎn)程報(bào)告收集服務(wù)器 267
13.3  終端集成器 268
13.4  本章小結(jié) 268
第14章   內(nèi)存泄漏 269
14.1  為什么RAII是基石 269
14.2  分析 270
14.3  調(diào)試內(nèi)存泄漏 273
14.4  本章小結(jié) 275
第15章   協(xié)程 276
15.1  C 協(xié)程 277
15.2  協(xié)程的切分點(diǎn) 279
15.3  協(xié)程之諾 281
15.4  本章小結(jié) 283
第16章   遠(yuǎn)程調(diào)試 284
16.1  GDB遠(yuǎn)程調(diào)試 285
16.2  Visual Studio遠(yuǎn)程調(diào)試 286
16.3  本章小結(jié) 287
第17章   容器世界 288
17.1  容器示例 288
17.2  容器應(yīng)用 289
17.3  C/C 容器調(diào)試 291
17.4  實(shí)戰(zhàn)故事10:CrashLoopBackOff 292
17.5  實(shí)戰(zhàn)故事11:liveness failure 292
17.6  本章小結(jié) 294
第18章   盡量不要調(diào)試程序 295
18.1  借助編譯器來提前發(fā)現(xiàn)錯(cuò)誤 295
18.2  編寫簡短的實(shí)驗(yàn)代碼 295
18.3  日志和監(jiān)控 296
18.3.1  日志 296
18.3.2  監(jiān)控 297
18.4  遵循最佳編碼實(shí)踐 297
18.5  本章小結(jié) 298
附錄A   調(diào)試混合語言 299
附錄B   在Windows/x86環(huán)境下進(jìn)行程序調(diào)試 301
B.1  PE文件格式 301
B.2  Windows Minidump格式 306
附錄C   一個(gè)簡單的C coroutine程序 309

本目錄推薦

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