《C++程序调试实用手册》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(美)Chris H.Pappas,(美)William H.Murray,Ⅲ著;段来盛等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2000
  • ISBN:7505362143
  • 页数:505 页
图书介绍:

第一部分 代码开发技巧 3

第1章 编写好的代码 3

1.1谁需要本书? 4

1.2教学方法 5

1.3从何处开始阅读? 5

1.4警告!并非所有的C/C++编译器都完全相同 6

1.5语言无关的设计工具101 6

1.5.1准备 7

1.5.2模型! 7

1.5.3结构图、伪代码及IPO框图 8

1.6好的程序设计的五点要素 12

1.7规则意味着可以打破 13

1.7.1安塞尔亚当斯(Ansel Adams)或毕加索(Picasso) 13

1.7.2注释块 13

1.7.3标识符:identifiers、IDENTIFIERS和Identifiers 14

1.7.4间隔与缩进 15

1.8数据类型 20

1.9匈牙利表示法 23

1.9.1 MFC、句柄、控件及结构的命名规范 23

1.9.2一般前缀命名规范 24

1.9.3变量命名规范 24

1.9.5 Microsoft MFC宏命名规范 25

1.9.4应用程序符号命名规范 25

1.9.7静态库版本命名规范 26

1.9.8动态连接库命名规范 26

1.9.9 windows.h命名规范 26

1.9.6库标识符命名规范 26

1.10操作符优先级 27

1.11小结 28

第2章 使用编译器优化 31

2.1编码的责任与编译器的优化 32

2.2 Microsoft Visual C++的优化 33

2.2.2函数级连接 34

2.2.1调度指令 34

2.2.3字符串池 35

2.2.4使用register键字 35

2.2.5常量和复制的传播 36

2.2.6消除死代码和死存储 37

2.2.7删除冗余子表达式 37

2.2.8优化循环 37

2.2.9降低强度 38

2.2.10 inline键字的使用 38

2.2.12关闭堆栈检查 39

2.2.11省略帧指针 39

2.2.13覆盖堆栈 40

2.2.14函数调用之间允许使用别名 41

2.2.15全局优化 41

2.2.16产生内部函数的内联 41

2.2.17优化math.h 42

2.3 Microsoft C++的优化开关 42

2.4使用Microsoft Visual Studio设置编译器选项 43

2.4.1 Project Settings对话框中的General类型 45

2.4.2 Project Settings对话框中的Code Generation类型 46

2.4.5 Project Settings对话框中的Optimizations类型 48

2.4.4 Project Settings对话框中的Customize类型 48

2.4.3选择结构对齐方式 48

2.5建立发行版本的建议 51

2.6小结 51

第3章 逻辑与语法错误 53

3.1好的调试策略 55

3.2四种程序错误类型 56

3.2.1语法错误 56

3.2.2连接错误 57

3.2.3运行错误 58

3.3查看错误消息 60

3.2.4逻辑错误 60

3.4预防性维护 62

3.4.1桌面检查的含义 63

3.5异常处理设计 63

3.6“请多多支持” 64

3.7 Microsoft Visual C++的帮助 65

3.8小结 66

第4章 debugger 67

4.1确认Debugger可以使用 68

4.2启动Debugger 69

4.2.3 Run to Cursor 71

4.2.1 Step Into和Step Over的区别 71

4.2.2 Go 71

4.3理解Debugger工具栏图标 72

4.3.1 Restart 73

4.3.2 Stop Debugging 73

4.3.3 Break Execution 73

4.3.4 Apply Code Changes、Eidt and Continue 73

4.3.5 Show Next Statement 74

4.3.6 Step Into 74

4.3.11 Watch 75

4.3.10 QuickWatch 75

4.3.12 Variables 75

4.3.7 Step Over 75

4.3.8 Step Out 75

4.3.9 Run to Cursor 75

4.3.13 Regisers 76

4.3.14 Meomry 76

4.3.15 Call Stack 76

4.3.16 Disassembly 76

4.3.17 Debugger Toolbar Menu Equivalents 76

4.4.4 Modules 77

4.5.1 List Members 77

4.5本地菜单Debugger选项 77

4.4.1 Step Into Specific Function 77

4.4.3 Threads 77

4.4.2 Exceptions 77

4.4其他Debug菜单选项 77

4.5.2 Type Info 78

4.5.3 Parameter Information 78

4.5.4 Complete Word 78

4.5.7 Insert/Remove Breakpoint 79

4.6 Debugger窗口 79

4.5.5 Go To Definition/Reference 79

4.5.6 Go To Disassembly 79

4.6.1 Trace窗口 80

4.6.2 Watch窗口 80

4.7 View菜单和Debugger窗口 80

4.7.1 Workspace 80

4.7.2 Output 81

4.8以不同的数据类型查看观察变量 81

4.9打开Just-in-Time调试 83

4.10 Options窗口中的Debug标签 83

4.10.6 Parameter Types 84

4.10.10 Format 84

4.10.9 Address 84

4.10.8 Load COEF Exports 84

4.10.7 Return Value 84

4.10.1 Hexadecimal Display 84

4.10.5 Parameter Values 84

4.10.4 Symbols 84

4.10.3 Code Bytes 84

4.10.2 Source Annotation 84

4.10.16 Just-in-Time Debugging 85

4.10.17 OLE RPC Debugging 85

4.10.15 View Floating Point Registers 85

4.10.18 Debug Commands Invoke Edit and Continue 85

4.10.12 Show Data Bytes 85

4.10.14 Display Unicode Strings 85

4.10.13 Fixed Width 85

4.10.11 Re-evaluate Expression 85

4.11键盘映射 86

4.12 Debugger快捷键 87

4.13小结 87

第5章 调试版本与发行版本 89

5.2为调试版本建立修改工程设置 90

5.1缺省的调试版本建立与发行版本建立设置 90

5.2.1修改调试选项 91

5.2.2修改产生调试信息的格式 91

5.2.3产生一个映射文件 91

5.2.4重定向调试输入和输出 92

5.3什么是.pdb文件? 92

5.4什么是.dbg文件 93

5.5调试优化的代码 93

5.6打开Debugger的另一种方法 96

5.7使用基本版或调试版本 96

5.8 C/C++运行调试库 97

5.8.1旧版iostream.h和新版iostream之间的混乱 98

5.9连接器参考资料 99

5.10在调试版本中检测发行版本错误 101

5.10.1局部变量的自动初始化 101

5.10.2检查函数指针调用堆栈的合法性 102

5.10.3 检查调用堆栈的合法性 102

5.11 TRACE宏 102

5.12 VERIFT宏 103

5.13 移植Visual C++旧的32位版本 103

5.13.2与Visual C++以前的版本共存 104

5.13.1转换早期的32位工作空间和工程 104

5.14小结 105

第二部分 面向过程的环境 109

第6章 定位、分析和修复命令行代码错误 109

6.1快速启动调试 110

6.1.1启动Debugger的快速方法 112

6.1.2变量初始化跟踪 115

6.1.3小心调试代码 121

6.1.4快速查看变量的内容 124

6.1.6执行到代码的指定行 125

6.1.5中途停止Debugger 125

6.1.7全速执行到一个断点 127

6.1.8运行至光标处 128

6.1.9现在测试 128

6.2高级Debugger技巧 129

6.2.1使用新值运行 130

6.2.2循环调试技巧 141

6.2.3调用调试函数 142

6.2.4递归调用与调用堆栈 149

6.2.5查看反汇编代码 154

6.3进一步观察变量 157

6.3.1使用QuickWatch窗口 158

6.3.2使用Watch窗口 159

6.4小结 160

第7章 调试内联汇编语言代码 161

7.1汇编语言初步 162

7.1.1数据类型 162

7.1.2寄存器 163

7.1.3寻址模式 163

7.1.5协处理器 164

7.1.4指针 164

7.2调试 165

7.2.1减法运算 166

7.2.2使用256位整数 170

7.2.3程序循环 179

7.2.4使用协处理器求和实数 186

7.2.5使用协处理器计算正切值 190

7.3小结 199

第8章 在Windows 代码中定位、分析和修复错误 201

8.1使用两台计算机调试 202

8.1.1准备远程目标计算机 203

8.1.2准备主计算机 204

8.1.3启动调试会话 206

8.2简明Windows 入门 207

8.2.1基本的Windows 代码 208

8.2.2调试文件详述 209

8.2.3程序执行的情况 210

8.3调试 217

8.3.1一个动画位图程序 217

8.3.2使用鼠标绘画 233

8.4小结 248

第9章 定位、分析和修复命令行中的错误 251

第三部分 面向对象过程的环境 251

9.1高级调试工具 252

9.1.1内存卸出 252

9.1.2定位错误参数从何处传递而来 255

9.1.3查找何处修改了指针 257

9.2 ClassView窗口要素 267

9.2.1 ClassView窗口的Grouped by Access功能 269

9.2.2 ClassView窗口的Base Classes功能 270

9.2.4 ClassView窗口的 Derived Classes功能 273

9.2.3 ClassView窗口的References功能 273

9.2.5 ClassView窗口中菜单的其余项 275

9.2.6 ClassView窗口的Properities功能 276

9.2.7在ClassView窗口中添加文件夹 277

9.2.8在文件夹之间移动类 277

9.2.9隐藏或显示ClassView窗口 277

9.3调试argc和argv[] 278

9.4小结 282

第10章 使用MFC类库开发Windows 程序 283

10.1为什么使用类库 284

10.2一个真正的基础类——CObect 285

10.4一个图形程序 287

10.3什么是应用程序向导和类向导 287

10.4.1使用AppWizard 288

10.4.2使用ClassWizard 294

10.4.3建立AppWizard代码 295

10.4.4 AppWizard模板代码 296

10.4.5在客户区的图形对象 304

10.5剖面法 308

10.6小结 313

第11章 定位、分析和修复MFC Windows 代码中的错误 315

11.1内存问题 316

11.1.1有问题的代码 316

11.1.2定位和分析 320

11.1.3修复工程 328

11.2绘图问题 331

11.2.1有问题的代码 332

11.2.2定位和分析 336

11.2.3修改工程 344

11.3小结 348

第四部分 标准模板库(STL) 351

第12章 STL编程实践 351

12.1多体系结构 352

12.2掌握C++ 352

12.5 STL和HP公司 354

12.4初识STL 354

12.3 STL——进退维谷的数据结构 354

12.6大众化的STL 355

12.7 STL总览 355

12.8 ANSI/ISO C++接受STL的过程 355

12.9 STL基本组件 356

12.9.1什么是容器? 356

12.9.2什么是适配器? 357

12.9.3什么是算法? 358

12.9.4什么是迭代器? 358

12.10完整的STL程序包 359

12.9.5其他的STL组件 359

12.11杂乱的C/C++家族 361

12.12回顾数据结构 361

12.12.1静态与动态 361

12.12.2类型指针 362

12.12.3 void指针 363

12.13复习匈牙利命名法 365

12.14函数重载 367

12.15函数指针 367

12.16.1运算符和函数调用的重载 370

12.16运算符重载 370

12.16.2编写自己的重载运算符 371

12.17从结构到模板 373

12.17.1 template关键字 374

12.17.2模板语法 374

12.17.3模板函数 375

12.17.4模板类 375

12.18为什么STL比模板好 376

12.19小结 377

第13章 定位、分析和修复STL代码中的错误 379

13.1.1用迭代器遍历容器 380

13.1从标准C++转同STL语法的过程中出现的问题 380

13.1.2仔细研究迭代器 381

13.1.3流迭代器 382

13.1.4为什么使用end() 382

13.1.5复制列表 383

13.1.6列表中的列表 383

13.1.7 STL字符串指针的麻烦 384

13.1.8释放STL指针 385

13.2一个C++程序转变为STL语法的例子 385

13.2.1第一步——更新aSingleCard类 389

13.2.2第二步——更新WarDeck类 392

13.2.3第三步——修复STL代码的执行错误 396

13.2.4第四步——更新Opponent类 398

13.2.5第五步——运转的STL程序 399

13.3 STL语法的源文件wargame.cpp 400

13.4小结 405

第五部分 特殊的调试问题 409

第14章 使用DLL工作 409

14.1创建一个基于MFC的动态链接库 410

14.1.1头文件Framer.h 412

14.1.2源代码文件Framer.cpp 414

14.1.3建立Framer.dll 416

14.2创建使用DLL的主应用程序 417

14.2.1头文件DLLDemoView.h 418

14.2.2源代码文件DLLDemoView.cpp 419

14.3更加仔细地查看 425

14.3.1远程调试 425

14.3.2有问题的代码 428

14.3.3改正后的代码 432

14.4小结 433

第15章 使用ActiveX控件工作 435

15.1开发一个ActiveX控件 436

15.1.1使用ControlWizard 437

15.1.2 Test Container 440

15.1.3产生一个真实的Clock控件 443

15.2调试Clock控件 453

15.2.1准备远程目标计算机 453

15.2.2准备主计算机 454

15.2.3开始调试过程 454

15.2.4查找问题 456

15.3小结 459

第16章 调试COM、ATL和DHTML 461

16.1 COM对象模型 462

16.2创建一个ATL多边形工程 462

16.2.1优化模块代码 467

16.2.2测试控件 480

16.3调试ATL COM控件 482

16.4小结 484

第17章 STL和MFC编程 485

17.1产生一个STL和MFC应用程序 486

17.1.1复数 486

17.1.2模板语法 487

17.1.3基本的应用程序代码 493

17.2调试 497

17.3小结 505