高效C/C++调试

高效C/C++调试

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

一本关于高效调试的实用指南。

内容简介

本书是关于软件调试技术的深度探索,融合了作者的实践智慧。书中不仅指导读者如何使用专业的调试工具,还介绍了如何宏观和微观地分析问题,并最大限度地发挥调试器功能。此外,书中还深入解读了调试背后的技术原理,如调试符号、内存管理及系统内核对内存的操作机制,以揭示内存管理的关键性和复杂性。

除了介绍基础概念外,本书还涵盖了许多增强调试能力的工具与插件。尽管焦点集中在C/C++ ,但其中的策略与技巧具有普适性,适用于多种编程语境。内容包括从内存泄漏预防调试、Linux下的eBPF和strace调试方法,到Kubernetes容器调试,再到C 20的协程与崩溃信息收集策略。

作者简介

作者严琦,毕业于中国科技大学和美国伦斯勒理工学院。毕业后近三十年里曾先后任职于五家软件技术公司从事技算机编程工作,从初级程序员成长为一个中等规模的软件公司的首席架构师,涉及包括嵌入式系统,有限元分析,计算机辅助设计,商业智能系统等领域,致力于微处理器,编译器,服务器,系统内核等技术。

章节目录

版权信息

作者简介

内容简介

序一

序二

第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 调试混合语言

使用C++ JNI的Java程序

附录B 在Windows/x86环境下进行程序调试

B.1 PE文件格式

B.2 Windows Minidump格式

附录C 一个简单的C++ coroutine程序

高效C/C++调试是2024年由清华大学出版社出版,作者[美] 严琦。

得书感谢您对《高效C/C++调试》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
C++程序设计教程 电子书
全书共10章,第1章主要讲解了C++语言相对于C语言在基础知识上的扩充。第2—7章分别讲解了类与对象、继承与多态、运算符重载、模板、I/O流和异常。第8-9章分别讲解了STL、设计模式以及C++11的一些新特性,作为C++程序员,这一部分内容或早或晚都必须要学习,熟练掌握它们可使程序开发更加得心应手。第10章为项目实战,结合前面所学知识,开发了一个企业级项目——物流管理系统。
C++从入门到精通 电子书
C++基础知识、核心技术与提高篇实践项目。
C和C++游戏趣味编程 电子书
趣味案例教C/C++编程,激发学习兴趣,适合初学者自学。
C++ 开发从入门到精通 电子书
本书的特色是实现了入门知识、实例演示、范例演练、技术解惑、综合实战5大部分内容的融合,让读者看得懂、用得上、学得会。 一本书的容量,讲解了入门类、范例类和项目实战类三类图书的内容。 丰富的配套资源学习更高效 440个实例,更多的实践演练机会 837分钟视频讲解,降低学习难度 290个拓展实例,真正地举一反三 101个技术解惑,破解学习难点 “技术讲解”→范例演练”→“技术解惑”贯穿全书,全面掌握C++语言开发 技术讲解:通过145个实例,循序渐进地讲解了C开发的各个知识点。 范例演练:290个拓展范例和5个综合实例,使读者真正具有项目实战能力。 技术解惑:把容易混淆的概念单独讲解和剖析,帮助读者绕过学习中的陷阱。 QQ群 网站论坛实现教学互动,形成互帮互学的朋友圈 网站论坛:读者答疑/学习辅导/PPT资源下载读者 QQ群:疑惑快速解答/和作者直接交流
Visual C++ 程序设计教程 电子书
本书以VisualC++6.0为基础,详细阐述了VisualC++程序设计的基本原理和内容。全书以循序渐进的原则,构筑了VisualC++程序设计的几个模块,包括C++语法、WindowsC程序设计、简单应用程序框架及以此为基础的相关类和资源的使用、文档/视图结构及以此为基础的相关类和资源的使用。本书可作为普通高等院校、高职高专院校计算机及相关专业的教材,也可供应用开发人员和自学者参考。