第一部分 调试策略 3
第1章 调试的过程 3
1.1 错误的调试五步曲 3
1.2 正确的调试五步曲 4
1.3 确定错误的存在 5
1.4 收集错误信息 5
1.5 分析错误信息 10
1.6 消除错误 16
1.7 修改的验证 16
1.8 巧妙地而不是艰苦地调试 17
1.9 推荐阅读 24
第2章 编写便于调试的C++代码 26
2.1 设计 26
2.2 C++编程风格 27
2.3 C++语言 35
2.4 Visual C++编译器 56
2.5 推荐阅读 61
第3章 使用断言 63
3.1 断言的局限性 65
3.2 断言的类型 66
3.3 更多的MFC断言宏 71
3.4 自定义断言 77
3.5 可移植的断言(Portable Assertions) 78
3.6 使用断言的策略 79
3.7 不变关系 82
3.8 断言模式 85
3.9 为你的断言书写文档注释 91
3.10 实现AssertValid 92
3.11 防御性的编程(Defensive Programming) 95
3.12 错误处理 98
3.13 各种各样的提示 99
3.14 推荐阅读 104
第4章 使用跟踪语句 106
4.1 跟踪语句的类型 108
4.2 自定义的跟踪语句 120
4.3 跟踪语句策略 121
4.4 各种技巧 126
4.5 推荐阅读 129
第5章 使用异常和返回值 130
5.1 不正确的错误处理结果 132
5.2 策略的需要 134
5.3 使用异常 135
5.4 使用返回值 136
5.5 异常和错误 137
5.6 C++异常和Windows结构异常处理比较 139
5.7 将结构异常转化为C++异常 140
5.8 异常的性能 143
5.9 异常策略 146
5.10 使用异常的防御性编程 155
5.11 调试异常 163
5.12 各种技巧 165
5.13 推荐阅读 168
第二部分 调试工具 173
第6章 在Windows中调试 173
6.1 事后调试 174
6.2 Windows API错误码 175
6.3 Windows异常基础知识 178
6.4 可移植的可执行文件基础知识 180
6.5 DLL重定位 182
6.6 汇编语言基础知识 184
6.7 使用映射文件调试 192
6.8 使用PDB文件调试 198
6.9 使用Windows 98崩溃对话框调试 199
6.10 使用Dr. Watson调试 202
6.11 各种技巧 214
6.12 推荐阅读 217
第7章 使用Visual C++调试器调试 219
7.1 编译与链接选项 220
7.2 调试版本与发布版本 221
7.3 调试发布版本 227
7.4 测试版本 230
7.5 调试符号 231
7.6 调试窗口 235
7.7 查看表达式 238
7.8 数据标签表达式 243
7.9 寄存器和伪寄存器 243
7.10 观察窗口的格式化符号 245
7.11 使用Autoexp.dat 248
7.12 使用断点调试 251
7.13 即时调试 260
7.14 远程调试 261
7.15 编辑继续调试 262
7.16 推荐阅读 266
第三部分 调试技术 269
第8章 基本调试技术 269
8.1 普通调试技术 269
8.2 Visual C++调试器技术 272
8.3 Windows调试技术 278
8.4 MFC调试技术 283
8.5 推荐阅读 285
第9章 内存调试 287
9.1 内存泄漏为什么不可接受 288
9.2 内存调试的类型 290
9.3 使用调试堆 299
9.4 调试堆是如何工作的 308
9.5 查看Windows内存地址 311
9.6 调试内存破坏 316
9.7 调试内存泄漏 318
9.8 调试Windows资源泄漏 326
9.9 调试Windows线程堆栈 333
9.10 各种技巧 339
9.11 推荐阅读 342
第10章 调试多线程程序 344
10.1 什么是多线程 345
10.2 多线程程序的几个要点 345
10.3 书写线程安全的代码 348
10.4 线程的创建和终止 358
10.5 理解调试器 364
10.6 调试技术 370
10.7 推荐阅读 378
第11章 COM调试 380
11.1 本章基础 381
11.2 防御性的COM编程实战经验 382
11.3 调试基COM DLL 392
11.4 调试基COM EXE 398
11.5 调试配定组件 403
11.6 调试被ASP调用的基COM DLL 407
11.7 推荐阅读 408
第12章 非常规策略 410
12.1 检查简单的东西 411
12.2 开动你的脑筋 412
12.3 重新检查你的假设 414
12.4 检查明显的事物 416
12.5 检查代码 417
12.6 检查系统 417
12.7 再次检查文档 420
12.8 依靠其他人 420
12.9 使用新闻组 422
12.10 结束危险的生活 424