幫助中心 | 我的帳號 | 關於我們

高效C\C++調試

  • 作者:(美)嚴琦//盧憲廷|責編:趙軍
  • 出版社:清華大學
  • ISBN:9787302649717
  • 出版日期:2024/01/01
  • 裝幀:平裝
  • 頁數:316
人民幣:RMB 99 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書是關於軟體調試技術的深度探索,融合了作者的實踐智慧。書中不僅指導讀者如何使用專業的調試工具,還介紹了如何宏觀和微觀地分析問題,並最大限度地發揮調試器功能。此外,書中還深入解讀了調試背後的技術原理,如調試符號、內存管理及系統內核對內存的操作機制,以揭示內存管理的關鍵性和複雜性。
    除了介紹基礎概念外,本書還涵蓋了許多增強調試能力的工具與插件。儘管焦點集中在C/C++,但其中的策略與技巧具有普適性,適用於多種編程語境。內容包括從內存泄漏預防調試、Linux下的eBPF和strace調試方法,到Kubernetes容器調試,再到C++20的協程與崩潰信息收集策略。
    本書主要面向具有C/C++編程基礎的讀者,同時也非常適合對軟體技術原理有深入探索興趣的讀者以及追求高效調試技巧的開發人員。

作者介紹
(美)嚴琦//盧憲廷|責編:趙軍

目錄
第1章  調試符號和調試器
  1.1  調試符號
    1.1.1  調試符號概覽
    1.1.2  DWARF格式
  1.2  實戰故事1:數據類型的不一致
  1.3  調試器的內部結構
    1.3.1  用戶界面
    1.3.2  符號管理模塊
    1.3.3  目標管理模塊
  1.4  技巧和注意事項
    1.4.1  特殊的調試符號
    1.4.2  改變執行及其副作用
    1.4.3  符號匹配的自動化
    1.4.4  後期分析
    1.4.5  內存保護
    1.4.6  斷點不工作
  1.5  本章小結
第2章  堆數據結構
  2.1  理解內存管理器
    2.1.1  ptmalloc
    2.1.2  TCMalloc
    2.1.3  多個堆
  2.2  利用堆元數據
  2.3  本章小結
第3章  內存損壞
  3.1  內存是怎麼損壞的
    3.1.1  內存溢出與下溢
    3.1.2  訪問釋放的內存
    3.1.3  使用未初始化的值
  3.2  調試內存損壞
    3.2.1  初始調查
    3.2.2  內存調試工具
    3.2.3  堆與棧內存損壞對比
    3.2.4  工具箱
  3.3  實戰故事2:神秘的位元組序轉換
    3.3.1  癥狀
    3.3.2  分析和調試
    3.3.3  錯誤和有價值的點
  3.4  實戰故事3:覆寫棧變數
    3.4.1  癥狀
    3.4.2  分析和調試
  3.5  本章小結
第4章  C++對象布局
  4.1  對齊和大小端
    4.1.1  對齊
    4.1.2  大小端
  4.2  C++對象布局
  4.3  實戰故事4:訪問已經釋放的數據
    4.3.1  癥狀
    4.3.2  分析和調試

  4.4  搜索引用樹
  4.5  本章小結
第5章  優化后的二進位
  5.1  調試版和發行版的區別
  5.2  調試優化代碼的挑戰
  5.3  彙編代碼介紹
    5.3.1  寄存器
    5.3.2  指令集
    5.3.3  程序彙編的結構
    5.3.4  函數調用習慣
  5.4  分析優化后的代碼
  5.5  調試優化后的代碼示例
  5.6  本章小結
第6章  進程鏡像
  6.1  二進位文件格式
  6.2  運行期載入和鏈接
  6.3  進程映射表
    6.3.1  可執行文件
    6.3.2  共享庫
    6.3.3  線程棧
    6.3.4  無名區域
    6.3.5  攔截
    6.3.6  鏈接時替換
    6.3.7  預先載入代理函數
    6.3.8  修改導入和導出表
    6.3.9  對目標函數進行手術改變
    6.3.10  核心轉儲文件格式
    6.3.11  核心轉儲文件分析工具
  6.4  本章小結
第7章  調試多線程程序
  7.1  競爭條件
  7.2  它是競爭條件嗎
  7.3  調試競爭條件
  7.4  實戰故事5:記錄重要區域
    7.4.1  癥狀
    7.4.2  分析調試
  7.5  死鎖
  7.6  本章小結
第8章  更多調試方法
  8.1  重現錯誤
    8.1.1  歸因
    8.1.2  收集環境信息
    8.1.3  重建環境
  8.2  防止未來的bug
    8.2.1  知識保留和傳遞
    8.2.2  增強提前檢查
    8.2.3  編寫更好調試的代碼
  8.3  不要忘記這些調試規則
    8.3.1  分治法
    8.3.2  退一步,獲取新的觀點

    8.3.3  保留調試歷史
  8.4  逆向調試
    8.4.1  rr:Record and Replay
    8.4.2  rr注意事項
  8.5  本章小結
第9章  拓展調試器能力
  9.1  使用Python拓展GDB
    9.1.1  美化輸出
    9.1.2  編寫自己的美觀列印器
    9.1.3  將重複的工作變成一個命令
    9.1.4  更快地調試bug
    9.1.5  使用Python設置斷點
    9.1.6  通過命令行來啟動程序和設置斷點
  9.2  GDB自定義命令
  9.3  本章小結
第10章  內存調試工具
  10.1  ptmalloc』s MALLOC_CHECK_
  10.2  Google Address Sanitizer
  10.3  AccuTrak
  10.4  有效地調試內存損壞
  10.5  實戰故事6:內存管理器的崩潰問題
    10.5.1  癥狀
    10.5.2  分析和調試
  10.6  本章小結
第11章  Core Analyzer
  11.1  使用示例
  11.2  主要功能
    11.2.1  搜索引用的對象(水平搜索)
    11.2.2  查詢地址及其底層對象(垂直搜索)
    11.2.3  內存模式分析
    11.2.4  查詢堆內存塊
    11.2.5  堆遍歷(檢查整個堆以發現損壞並獲取內存使用統計)
  11.3  本章小結
第12章  更多調試工具
  12.1  strace
    12.1.1  常用功能
    12.1.2  常用附加選項
  12.2  實戰故事7:僵屍進程
    12.2.1  遇到難題
    12.2.2  揭示bug的真相
  12.3  Perf
  12.4  eBPF
    12.4.1  準備環境
    12.4.2  編寫代碼
    12.4.3  編譯程序
    12.4.4  載入和運行程序
  12.5  實戰故事8:鏈接問題
    12.5.1  切入
    12.5.2  更奇怪的事情
    12.5.3  柳暗花明

    12.5.4  補充
    12.5.5  結論
  12.6  實戰故事9:臨時變數的生命周期
  12.7  本章小結
第13章  崩潰發送機制
  13.1  客戶端
  13.2  遠程報告收集伺服器
  13.3  終端集成器
  13.4  本章小結
第14章  內存泄漏
  14.1  為什麼RAII是基石
  14.2  分析
  14.3  調試內存泄漏
  14.4  本章小結
第15章  協程
  15.1  C++協程
  15.2  協程的切分點
  15.3  協程之諾
  15.4  本章小結
第16章  遠程調試
  16.1  GDB遠程調試
  16.2  Visual Studio遠程調試
  16.3  本章小結
第17章  容器世界
  17.1  容器示例
  17.2  容器應用
  17.3  C/C++容器調試
  17.4  實戰故事10:CrashLoopBackOff
  17.5  實戰故事11:liveness failure
  17.6  本章小結
第18章  盡量不要調試程序
  18.1  借助編譯器來提前發現錯誤
  18.2  編寫簡短的實驗代碼
  18.3  日誌和監控
    18.3.1  日誌
    18.3.2  監控
  18.4  遵循最佳編碼實踐
  18.5  本章小結
附錄A  調試混合語言
附錄B  在Windows/x86環境下進行程序調試
  B.1  PE文件格式
  B.2  Windows Minidump格式
附錄C  一個簡單的C++ coroutine程序

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032