C/C++代码调试的艺术(第2版) C语言C++代码调试程序设计系统开发软件开发驱动开发断点调试
¥82.40
运费: | ¥ 0.00-20.00 |
商品详情
书名:C/C++代码调试的艺术:第2版
定价:109.8
ISBN:9787115608062
作者:张海洋
版次:第2版
出版时间:2023-04
内容提要:
本书围绕C/C++程序调试这一主题,系统深入地介绍了在Windows和Linux操作系统上如何*地调试C/C++程序。 本书分为11章,内容涵盖了程序调试的基本知识、Visual C++调试的基本功能与技巧、Linux系统中gdb工具的使用、死锁调试、动态库调试、内存检查、远程调试、转储文件调试分析、发行版调试,以及调试的*话题和调试方面的扩展知识。 本书作为学习C/C++调试技术的重要资料,讲解通俗易懂,选取的示例注重理论与实际的联系。
作者简介:
张海洋,云坞科技联合创立人,清华大学计算机专业毕业,从事软件开发近20年,曾在外企工作10余年,长期工作在开发一线,已经申请软件发明专利10余项。精通C/C++、Python等编程语言,在Windows驱动、Linux驱动、Windows/Linux系统开发和调试方面具有丰富的经验。
目录:
第 1章 C/C++调试基本知识 1
1.1 BUG与Debug 1
1.2 为什么选择C/C++ 3
1.3 什么是调试器 4
第 2章 Visual C++调试基本功能 5
2.1 Visual C++简介 5
2.1.1 VC 2019版本选择 7
2.1.2 VC 2019安装 8
2.2 断点管理 9
2.2.1 设置/删除断点 10
2.2.2 禁用断点 10
2.2.3 查看所有断点 11
2.3 调试执行 14
2.3.1 启动调试 14
2.3.2 逐语句执行 15
2.3.3 逐过程执行 17
2.3.4 跳出执行 17
2.3.5 运行到光标处 17
2.3.6 多次执行代码 18
2.4 监视/快速监视 20
2.4.1 快速监视 20
2.4.2 监视窗口 21
2.4.3 表达式支持 23
2.5 内存查看 25
2.5.1 字符串内存布局 26
2.5.2 整型变量内存布局 27
2.6 通过“局部变量”窗口和“自动”窗口查看变量 28
2.6.1 “局部变量”窗口查看变量 28
2.6.2 “自动”窗口查看变量 30
2.7 即时窗口 31
2.7.1 显示变量的值 31
2.7.2 执行内嵌函数 32
2.8 调用堆栈 32
2.8.1 调用堆栈基本信息 33
2.8.2 设置符号信息 33
2.9 多线程管理 36
2.9.1 创建多线程测试项目 36
2.9.2 开始调试多线程程序 37
2.10 查看错误码 40
2.11 调试宏assert使用 43
2.11.1 assert宏简介 44
2.11.2 使用assert宏的注意事项 45
2.12 其他 46
2.12.1 编辑并继续调试 46
2.12.2 字符串可视化工具 47
2.12.3 条件断点 48
2.12.4 函数断点 51
2.12.5 数据断点 52
2.12.6 VC调试时常用的快捷键和组合键列表 55
第3章 Linux系统下gdb调试基本功能 57
3.1 Linux系统下C/C++编程的基本知识 57
3.1.1 开发环境安装 58
3.1.2 开发第 一个C/C++程序 61
3.2 gdb简介 68
3.2.1 gdb的安装 68
3.2.2 gdb常用功能概览 70
3.3 调试执行 71
3.3.1 启动调试 71
3.3.2 启动调试并添加参数 74
3.3.3 附加到进程 75
3.4 断点管理 77
3.4.1 设置断点 77
3.4.2 启用/禁用断点 86
3.4.3 启用断点一次 87
3.4.4 启用断点并删除 88
3.4.5 启用断点并命中N次 89
3.4.6 忽略断点前N次命中 90
3.4.7 查看断点 90
3.4.8 删除断点 91
3.5 程序执行 92
3.5.1 启动程序 92
3.5.2 继续运行 93
3.5.3 继续运行并跳过当前断点N次 94
3.5.4 继续运行直到当前函数执行完成 94
3.5.5 单步执行 95
3.5.6 逐过程执行 96
3.6 查看当前函数参数 96
3.7 查看/修改变量的值 97
3.7.1 使用gdb内嵌函数 98
3.7.2 查看结构体/类的值 99
3.7.3 查看数组 101
3.8 自动显示变量的值 102
3.9 查看源代码 104
3.10 查看内存 106
3.11 查看寄存器 109
3.12 查看调用栈 111
3.12.1 查看栈回溯信息 112
3.12.2 切换栈帧 113
3.12.3 查看帧信息 115
3.13 线程管理 115
3.13.1 查看所有线程信息 118
3.13.2 切换线程 118
3.13.3 为线程设置断点 119
3.13.4 为线程执行命令 120
3.14 其他 121
3.14.1 观察点 121
3.14.2 捕获点 124
3.14.3 搜索源代码 126
3.14.4 查看变量类型 128
3.14.5 跳转执行 130
3.14.6 窗口管理 132
3.14.7 调用Shell命令 134
3.14.8 assert宏使用 135
3.14.9 gdb常用命令列表 137
第4章 多线程死锁调试 141
4.1 创建多线程 142
4.2 多线程的同步 144
4.3 C++标准库中的锁 146
4.3.1 std::mutex类 146
4.3.2 std::timed_mutex类 149
4.3.3 std::recursive_mutex和std::recursive_timed_mutex 149
4.4 死锁调试 150
4.4.1 Windows系统中的死锁调试 151
4.4.2 Linux系统中的死锁调试 153
4.4.3 死锁条件 156
4.4.4 解决死锁 157
第5章 调试动态库 160
5.1 Windows系统动态库开发与调试 161
5.1.1 创建动态库 161
5.1.2 使用动态库 164
5.1.3 调试动态库 165
5.2 Linux系统动态库开发与调试 170
5.2.1 创建动态库 171
5.2.2 使用动态库 174
5.2.3 调试动态库 177
第6章 内存检查 183
6.1 VC调试器和C/C++内存检查机制 183
6.1.1 内存泄漏测试程序 184
6.1.2 使用VC运行时库函数来检测内存泄漏 186
6.1.3 检测堆内存破坏(堆溢出) 193
6.1.4 使用数据断点来定位堆内存破坏问题 196
6.1.5 使用地址擦除系统(AddressSanitizer)来定位内存问题 206
6.1.6 其他调试函数 214
6.2 Linux系统内存检查 215
6.2.1 检查内存泄漏 215
6.2.2 检查堆溢出 217
6.2.3 检查栈溢出 218
6.2.4 检查全局变量的内存溢出 219
6.2.5 检查内存被释放后继续使用 220
第7章 远程调试 222
7.1 远程调试简介 222
7.2 Visual C++远程调试 223
7.2.1 准备测试程序 223
7.2.2 准备目标机环境 223
7.2.3 启动远程调试 226
7.3 Linux系统gdb远程调试 232
7.3.1 准备测试程序 232
7.3.2 准备目标机环境 233
7.3.3 启动调试 233
7.4 使用VC远程调试Linux程序 236
7.5 使用VC创建Linux程序并调试 238
第8章 转储文件调试分析 242
8.1 Windows系统中的转储文件分析 242
8.1.1 转储文件死锁调试分析 242
8.1.2 崩溃转储调试分析 245
8.2 Linux系统中的转储文件分析 251
8.2.1 内核转储文件调试分析死锁 251
8.2.2 内核转储文件调试分析程序崩溃问题 255
第9章 发行(Release)版调试 259
9.1 在VC中调试发行版 259
9.1.1 去优化测试 259
9.1.2 保留优化调试 262
9.2 在gdb中调试发行版 266
9.2.1 从调试版中提取调试符号 268
9.2.2 直接使用调试版作为符号源 269
第 10章 调试*话题 272
10.1 断点的秘密 272
10.2 你好,烫 275
10.3 与Windows调试相关的API 278
10.3.1 输出窗口输出信息 279
10.3.2 检测是否在调试器运行 279
10.3.3 Windows调试API列表 280
10.4 与Linux调试相关的系统调用 281
10.5 使用gdb为软件制作补丁 281
10.5.1 为有源码软件制作软件补丁 282
10.5.2 为无源码软件制作软件补丁 285
10.6 使用gdb“破解”软件密码 287
第 11章 调试扩展知识 292
11.1 Windows驱动开发调试入门 292
11.1.1 环境准备 292
11.1.2 创建Helloworld驱动项目 293
11.1.3 编译、构建驱动 294
11.1.4 部署驱动 294
11.1.5 安装驱动程序 298
11.1.6 调试驱动 299
11.2 WinDbg简介 300
11.2.1 直接启动应用程序进行调试 300
11.2.2 附加到进程 301
11.2.3 调试转储文件 303
11.2.4 WinDbg命令列表 303
11.3 Linux内核驱动开发简介 306
11.3.1 环境准备 306
11.3.2 开发Helloworld 307
11.3.3 加载和卸载驱动 308
11.4 Linux内核转储文件调试分析 310
11.4.1 Ubuntu系统 310
11.4.2 在CentOS系统中配置内核转储 312
11.4.3 分析内核转储文件 314
11.5 Visual Studio 2022调试新特性介绍 316
11.5.1 临时断点 316
11.5.2 断点行为控制 318
11.5.3 依赖断点 319
11.5.4 强制运行到光标处 321
11.5.5 强制运行到单击处 321
11.5.6 附加到进程 321
定价:109.8
ISBN:9787115608062
作者:张海洋
版次:第2版
出版时间:2023-04
内容提要:
本书围绕C/C++程序调试这一主题,系统深入地介绍了在Windows和Linux操作系统上如何*地调试C/C++程序。 本书分为11章,内容涵盖了程序调试的基本知识、Visual C++调试的基本功能与技巧、Linux系统中gdb工具的使用、死锁调试、动态库调试、内存检查、远程调试、转储文件调试分析、发行版调试,以及调试的*话题和调试方面的扩展知识。 本书作为学习C/C++调试技术的重要资料,讲解通俗易懂,选取的示例注重理论与实际的联系。
作者简介:
张海洋,云坞科技联合创立人,清华大学计算机专业毕业,从事软件开发近20年,曾在外企工作10余年,长期工作在开发一线,已经申请软件发明专利10余项。精通C/C++、Python等编程语言,在Windows驱动、Linux驱动、Windows/Linux系统开发和调试方面具有丰富的经验。
目录:
第 1章 C/C++调试基本知识 1
1.1 BUG与Debug 1
1.2 为什么选择C/C++ 3
1.3 什么是调试器 4
第 2章 Visual C++调试基本功能 5
2.1 Visual C++简介 5
2.1.1 VC 2019版本选择 7
2.1.2 VC 2019安装 8
2.2 断点管理 9
2.2.1 设置/删除断点 10
2.2.2 禁用断点 10
2.2.3 查看所有断点 11
2.3 调试执行 14
2.3.1 启动调试 14
2.3.2 逐语句执行 15
2.3.3 逐过程执行 17
2.3.4 跳出执行 17
2.3.5 运行到光标处 17
2.3.6 多次执行代码 18
2.4 监视/快速监视 20
2.4.1 快速监视 20
2.4.2 监视窗口 21
2.4.3 表达式支持 23
2.5 内存查看 25
2.5.1 字符串内存布局 26
2.5.2 整型变量内存布局 27
2.6 通过“局部变量”窗口和“自动”窗口查看变量 28
2.6.1 “局部变量”窗口查看变量 28
2.6.2 “自动”窗口查看变量 30
2.7 即时窗口 31
2.7.1 显示变量的值 31
2.7.2 执行内嵌函数 32
2.8 调用堆栈 32
2.8.1 调用堆栈基本信息 33
2.8.2 设置符号信息 33
2.9 多线程管理 36
2.9.1 创建多线程测试项目 36
2.9.2 开始调试多线程程序 37
2.10 查看错误码 40
2.11 调试宏assert使用 43
2.11.1 assert宏简介 44
2.11.2 使用assert宏的注意事项 45
2.12 其他 46
2.12.1 编辑并继续调试 46
2.12.2 字符串可视化工具 47
2.12.3 条件断点 48
2.12.4 函数断点 51
2.12.5 数据断点 52
2.12.6 VC调试时常用的快捷键和组合键列表 55
第3章 Linux系统下gdb调试基本功能 57
3.1 Linux系统下C/C++编程的基本知识 57
3.1.1 开发环境安装 58
3.1.2 开发第 一个C/C++程序 61
3.2 gdb简介 68
3.2.1 gdb的安装 68
3.2.2 gdb常用功能概览 70
3.3 调试执行 71
3.3.1 启动调试 71
3.3.2 启动调试并添加参数 74
3.3.3 附加到进程 75
3.4 断点管理 77
3.4.1 设置断点 77
3.4.2 启用/禁用断点 86
3.4.3 启用断点一次 87
3.4.4 启用断点并删除 88
3.4.5 启用断点并命中N次 89
3.4.6 忽略断点前N次命中 90
3.4.7 查看断点 90
3.4.8 删除断点 91
3.5 程序执行 92
3.5.1 启动程序 92
3.5.2 继续运行 93
3.5.3 继续运行并跳过当前断点N次 94
3.5.4 继续运行直到当前函数执行完成 94
3.5.5 单步执行 95
3.5.6 逐过程执行 96
3.6 查看当前函数参数 96
3.7 查看/修改变量的值 97
3.7.1 使用gdb内嵌函数 98
3.7.2 查看结构体/类的值 99
3.7.3 查看数组 101
3.8 自动显示变量的值 102
3.9 查看源代码 104
3.10 查看内存 106
3.11 查看寄存器 109
3.12 查看调用栈 111
3.12.1 查看栈回溯信息 112
3.12.2 切换栈帧 113
3.12.3 查看帧信息 115
3.13 线程管理 115
3.13.1 查看所有线程信息 118
3.13.2 切换线程 118
3.13.3 为线程设置断点 119
3.13.4 为线程执行命令 120
3.14 其他 121
3.14.1 观察点 121
3.14.2 捕获点 124
3.14.3 搜索源代码 126
3.14.4 查看变量类型 128
3.14.5 跳转执行 130
3.14.6 窗口管理 132
3.14.7 调用Shell命令 134
3.14.8 assert宏使用 135
3.14.9 gdb常用命令列表 137
第4章 多线程死锁调试 141
4.1 创建多线程 142
4.2 多线程的同步 144
4.3 C++标准库中的锁 146
4.3.1 std::mutex类 146
4.3.2 std::timed_mutex类 149
4.3.3 std::recursive_mutex和std::recursive_timed_mutex 149
4.4 死锁调试 150
4.4.1 Windows系统中的死锁调试 151
4.4.2 Linux系统中的死锁调试 153
4.4.3 死锁条件 156
4.4.4 解决死锁 157
第5章 调试动态库 160
5.1 Windows系统动态库开发与调试 161
5.1.1 创建动态库 161
5.1.2 使用动态库 164
5.1.3 调试动态库 165
5.2 Linux系统动态库开发与调试 170
5.2.1 创建动态库 171
5.2.2 使用动态库 174
5.2.3 调试动态库 177
第6章 内存检查 183
6.1 VC调试器和C/C++内存检查机制 183
6.1.1 内存泄漏测试程序 184
6.1.2 使用VC运行时库函数来检测内存泄漏 186
6.1.3 检测堆内存破坏(堆溢出) 193
6.1.4 使用数据断点来定位堆内存破坏问题 196
6.1.5 使用地址擦除系统(AddressSanitizer)来定位内存问题 206
6.1.6 其他调试函数 214
6.2 Linux系统内存检查 215
6.2.1 检查内存泄漏 215
6.2.2 检查堆溢出 217
6.2.3 检查栈溢出 218
6.2.4 检查全局变量的内存溢出 219
6.2.5 检查内存被释放后继续使用 220
第7章 远程调试 222
7.1 远程调试简介 222
7.2 Visual C++远程调试 223
7.2.1 准备测试程序 223
7.2.2 准备目标机环境 223
7.2.3 启动远程调试 226
7.3 Linux系统gdb远程调试 232
7.3.1 准备测试程序 232
7.3.2 准备目标机环境 233
7.3.3 启动调试 233
7.4 使用VC远程调试Linux程序 236
7.5 使用VC创建Linux程序并调试 238
第8章 转储文件调试分析 242
8.1 Windows系统中的转储文件分析 242
8.1.1 转储文件死锁调试分析 242
8.1.2 崩溃转储调试分析 245
8.2 Linux系统中的转储文件分析 251
8.2.1 内核转储文件调试分析死锁 251
8.2.2 内核转储文件调试分析程序崩溃问题 255
第9章 发行(Release)版调试 259
9.1 在VC中调试发行版 259
9.1.1 去优化测试 259
9.1.2 保留优化调试 262
9.2 在gdb中调试发行版 266
9.2.1 从调试版中提取调试符号 268
9.2.2 直接使用调试版作为符号源 269
第 10章 调试*话题 272
10.1 断点的秘密 272
10.2 你好,烫 275
10.3 与Windows调试相关的API 278
10.3.1 输出窗口输出信息 279
10.3.2 检测是否在调试器运行 279
10.3.3 Windows调试API列表 280
10.4 与Linux调试相关的系统调用 281
10.5 使用gdb为软件制作补丁 281
10.5.1 为有源码软件制作软件补丁 282
10.5.2 为无源码软件制作软件补丁 285
10.6 使用gdb“破解”软件密码 287
第 11章 调试扩展知识 292
11.1 Windows驱动开发调试入门 292
11.1.1 环境准备 292
11.1.2 创建Helloworld驱动项目 293
11.1.3 编译、构建驱动 294
11.1.4 部署驱动 294
11.1.5 安装驱动程序 298
11.1.6 调试驱动 299
11.2 WinDbg简介 300
11.2.1 直接启动应用程序进行调试 300
11.2.2 附加到进程 301
11.2.3 调试转储文件 303
11.2.4 WinDbg命令列表 303
11.3 Linux内核驱动开发简介 306
11.3.1 环境准备 306
11.3.2 开发Helloworld 307
11.3.3 加载和卸载驱动 308
11.4 Linux内核转储文件调试分析 310
11.4.1 Ubuntu系统 310
11.4.2 在CentOS系统中配置内核转储 312
11.4.3 分析内核转储文件 314
11.5 Visual Studio 2022调试新特性介绍 316
11.5.1 临时断点 316
11.5.2 断点行为控制 318
11.5.3 依赖断点 319
11.5.4 强制运行到光标处 321
11.5.5 强制运行到单击处 321
11.5.6 附加到进程 321
- 人民邮电出版社有限公司 (微信公众号认证)
- 人民邮电出版社微店,为您提供最全面,最专业的一站式购书服务
- 扫描二维码,访问我们的微信店铺
- 随时随地的购物、客服咨询、查询订单和物流...