当前位置:首页 > 工业技术
Microsoft .NET和Windows应用程序调试
Microsoft .NET和Windows应用程序调试

Microsoft .NET和Windows应用程序调试PDF电子书下载

工业技术

  • 电子书积分:19 积分如何计算积分?
  • 作 者:(美)John Robbins著;刘立宇等译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2004
  • ISBN:7302086265
  • 页数:673 页
图书介绍:本书是《应用程序调试技术》的第二版,对第一版进行了全面的扩充与更新,是调试领域的权威著作。本书主要介绍了.NET和Windows应用程序的各种调试工具和技术,包括Visual Studio.NET的高级调试用法、高级.NET调试和本机代码技术;本机代码的调试工具和技术;.NET的调试工具和技术等。
《Microsoft .NET和Windows应用程序调试》目录

第Ⅰ部分 调试概述 1

第1章 错误来源和除错方法 3

1.1错误及其调试 3

1.1.1什么是错误 4

1.1.2错误产生的原因和解决办法 7

1.1.3规划调试 14

1.2优秀调试人员的必备技能 15

1.2.1所需技能 15

1.2.2学习各种技能 17

1.3调试过程 18

1.3.1步骤1:重现错误 19

1.3.2步骤2:描述错误 20

1.3.3步骤3:总是假设是您自己造成的错误 21

1.3.4步骤4:分而治之 21

1.3.5步骤5:创造性地思考 21

1.3.6步骤6:借助于工具 22

1.3.8步骤8:验证错误已经被更正 23

1.3.7步骤7:开始大规模调试 23

1.3.9步骤9:学习和与人分享 25

1.3.10调试过程的最终秘密 25

1.3.11本章小结 25

第2章 开始调试 26

2.1跟踪所有更改直至项目完成 26

2.1.1版本控制系统 27

2.1.2错误跟踪系统 30

2.1.3选择适当的系统 31

2.2在进度表中安排时间建立调试系统 32

2.2.1保证所有版本中都带调试符号 33

2.2.2把托管代码中的编译警告视为编译错误 37

2.2.3对于本机代码将大多数编译警告视为编译错误 39

2.2.4了解本机代码中DLL的加载位置 42

2.2.5如何处理托管模块及其基址 46

2.2.6为发布版本设计轻量级的诊断系统 53

2.3必须进行频繁生成和冒烟测试 54

2.3.1频繁生成 54

2.3.2冒烟测试 55

2.4尽早创建安装程序 56

2.5QA必须测试调试版本 57

2.6安装操作系统调试符号并建立符号库 57

2.7本章小结 66

第3章 边编码边调试 67

3.1断言 68

3.1.1如何断言以及断言什么 69

3.1.2在.NETWindows窗体或控制台应用程序中设置断言 78

3.1.3在ASP.NET程序和XMLWeb服务中设置断言 86

3.1.4在本机C++程序中设置断言 97

3.1.5VisualC++中不同类型的断言 101

3.1.6SUPERASSERT 103

3.2跟踪、跟踪、再跟踪 124

3.2.1在Windows窗体应用和控制台.NET应用程序中跟踪 125

3.2.2在ASP.NET应用程序和XMLWEBServices中跟踪 127

3.2.3在本机C++应用程序中跟踪 129

3.3注释、注释、再注释 130

3.4信任自己,但要进行验证(单元测试) 131

3.5本章小结 133

第Ⅱ部分 强大的调试技术 135

第4章 操作系统对调试的支持以及Win32调试器工作原理 137

4.1Windows调试器的类型 138

4.1.1用户模式调试器 138

4.1.2内核模式调试器 140

4.2Windows操作系统对调试对象的支持 142

4.2.1实时(JIT)调试 142

4.2.2在调试器中自动启动(映像文件执行选项) 146

4.3MinDBG:一个简单的Win32调试器 148

4.4WDBG:真正的调试器 168

4.4.1读/写内存 170

4.4.2断点和单步执行 173

4.4.3符号表、符号引擎和堆栈遍历 178

4.4.4StepInto、StepOver和StepOut 185

4.5编写您自己的调试器 186

4.6对WDBG的改进建议 187

4.7本章小结 188

第5章 VisualStudio.NET调试器高级用法 189

5.1.1断点设置技巧 190

5.1高级断点及其用法 190

5.1.2在任何函数位置快速中断 192

5.1.3位置断点智能特性 197

5.2Watch窗口 200

5.2.1在Watch窗口中调用方法 202

5.2.2SetNextStatement命令 203

5.3本章小结 205

6.1.NET程序中的高级断点 206

6.1.1条件表达式 206

第6章 VisualStudio.NET高级.NET调试 206

6.2Watch窗口 211

6.2.1自动展开自定义类型 211

6.3提示与技巧 214

6.3.1DebuggerStepThroughAttribute和DebuggerHiddenAttribute 214

6.3.2混合模式调试 215

6.3.3远程调试 216

6.4ILDASM和Microsoft中间语言 218

6.4.1开始学习ILDASM 219

6.4.2公共语言运行库(CLR)基础 224

6.4.3MSIL、局部变量和参数 225

6.4.4重要指令 226

6.5其他逆向工程工具 232

6.6本章小结 233

第7章 VisualStudio.NET本机代码高级调试技术 234

7.1本机应用程序的高级断点 234

7.1.1高级断点语法 234

7.1.2系统或导出函数的断点 236

7.1.3条件表达式 238

7.1.4数据断点 240

7.1.5更好的数据断点 243

7.2Watch窗口 243

7.2.1数据的格式化和表达式的计算 243

7.2.2在Watch窗口中记录代码执行时间 246

7.2.3未归档的伪寄存器 246

7.2.4自动展开自己的类型 246

7.3远程调试 254

7.4.1调试插入的代码 256

7.4提示与技巧 256

7.4.2Memory窗口和自动内存计算 257

7.4.3监视异常 257

7.4.4处理符号的更多技巧 260

7.4.5与Windows2000进程分离 260

7.4.6处理转储文件 261

7.5x86汇编语言 263

7.5.1CPU基础 263

7.5.2浅谈VisualC++.NET内联汇编器 268

7.5.3您需要了解的指令 269

7.5.4通用序列:函数的入口和出口 272

7.5.5调用过程和返回 274

7.5.6调用约定 275

7.5.7变量访问:全局变量、参数和局部变量 280

7.5.8更多需要了解的指令 285

7.5.9字符串操作 290

7.5.10常见的汇编语言结构 294

7.5.11结构引用和类引用 296

7.5.12完整的示例 297

7.5.13Disassembly窗口 300

7.5.14手动查看堆栈 303

7.5.15提示与技巧 306

7.6本章小结 307

第8章 WinDBG的高级本机代码调试技术 309

8.1要点回顾 310

8.2基础知识 312

8.3调试环境 315

8.3.2确保加载了正确的符号 316

8.3.1获得帮助信息 316

8.3.3进程和线程 320

8.4使用Command窗口进行普通调试 325

8.4.1查看和计算变量 325

8.4.2执行、步进和跟踪 327

8.4.3断点 332

8.4.4异常和事件 334

8.4.5控制WinDBG 336

8.5.1加载和控制扩展 338

8.5神奇的扩展命令 338

8.5.2重要的扩展命令 339

8.6处理转储文件 343

8.6.1创建转储文件 343

8.6.2打开转储文件 345

8.6.3调试转储文件 346

8.7SonofStrike(SOS)扩展 346

8.7.1使用SOS 347

8.8本章小结 353

第Ⅲ部分 NET的强大调试工具和技术 355

第9章 扩展VisualStudio.NETIDE 357

9.1使用宏进行扩展 358

9.1.1宏的参数 360

9.1.2与项目有关的问题 361

9.1.3代码元素 362

9.2CommenTater:能解决共同面临的棘手问题吗? 364

9.3外接程序简介 372

9.3.1修改外接程序向导生成的代码 373

9.3.2处理工具栏按钮问题 376

9.3.3创建工具窗口 377

9.3.4使用托管代码创建选项属性页 379

9.4SuperSaver外接程序 383

9.5SettingsMaster外接程序 388

9.5.1SettingsMaster的实现要点 395

9.5.2对SettingsMaster的改进建议 396

9.6本章小结 396

10.1ProfilingAPI简介 397

第10章 托管异常的监视 397

10.1.1启动您的分析器 404

10.2ProfilerLib 405

10.3ExceptionMon 407

10.3.1进程内调试与ExceptionMon 408

10.4.NET中异常的使用 414

10.5本章小结 416

第11章 流程跟踪 417

11.1在ProfilingAPI中钩挂函数 417

11.1.2实现钩子函数 418

11.1.1请求Enter和Leave通知 418

11.1.3内联 419

11.1.4FunctionIDMapper函数 420

11.2使用FlowTrace 421

11.3FlowTrace实现中的主要问题 422

11.4对FlowTrace的改进建议 424

11.5本章小结 424

第Ⅳ部分 本机代码的强大调试工具和技术 425

第12章 通过崩溃时返回的地址找到源文件和行信息 427

12.1创建和读取MAP文件 429

12.1.1MAP文件内容 430

12.1.2寻找源文件、函数名和行号 433

12.1.3PDB2MAP—崩溃发生后的Map文件 434

12.2使用CrashFinder 437

12.2.1实现要点 439

12.3对CrashFinder的改进建议 446

12.4本章小结 446

第13章 崩溃处理机制 447

13.1.2结构化异常处理机制 448

13.1结构化异常处理机制和异常处理机制 448

13.1.2C++异常处理机制 451

13.1.3避免使用C++异常处理 452

13.1.4不要使用_set_se_translator 456

13.2SetUnhandledExceptionFilterAPI函数 457

13.3使用CrashHandlerAPI函数 459

13.4转换EXCEPTION_POINTERS结构 486

13.5小型转储(Minidump) 488

13.5.1MiniDumpWriteDumpAPI 488

13.5.2关于MiniDumpWriteDump 490

13.6本章小结 498

第14章 调试Windows服务和加载到服务中的DLL 499

14.1服务的基础知识 499

14.1.1API要点 500

14.1.2安全问题 501

14.2调试服务 502

14.2.1调试核心代码 502

14.2.2调试基本服务 503

14.3本章小结 509

第15章 多线程死锁 510

15.1多线程编程提示和技巧 510

15.1.1不要使用多线程 511

15.1.2不要过多使用多线程 511

15.1.3只在很小的离散程序段中使用多线程 511

15.1.4在最低级别同步 512

15.1.5旋转临界区 515

15.1.6不要使用CreateThread/ExitThread 516

15.1.7默认的内存管理器可能令程序失败 517

15.1.8当场进行转储 518

15.1.9检查代码——并再次检查代码 519

15.1.10在多处理器机器上进行测试 519

15.2DeadlockDetection的要求 522

15.3关于DeadlockDetection的高级设计问题 523

15.4使用DeadlockDetection 524

15.5实现DeadlockDetection 527

15.5.1钩挂导入函数 527

15.5.2实现要点 536

15.6对DeadlockDetection的改进建议 550

15.7本章小结 551

第16章 自动化测试 552

16.1单元测试的难点:用户界面 552

16.2对Tester的要求 553

16.3使用Tester 554

16.3.1Tester脚本 554

16.3.2记录脚本 559

16.4.1TESTER.DLL通知和回放的实现 562

16.4实现Tester 562

16.4.2实现TESTREC.EXE 578

16.5对Tester的改进建议 589

16.6本章小结 590

第17章 调试C运行时库和内存管理 591

17.1调试C运行时库的特性 592

17.2使用调试C运行时库 593

17.2.1DCRT中的缺陷 594

17.2.2DCRT函数 598

17.3为应用程序选择合适的C运行时库 599

17.4使用MemDumperValidator 601

17.4.1在C++中使用MenDumperValidator 608

17.4.2在C语言中使用MenDumperValidator 609

17.4.3深层验证 610

17.5实现MemDumperValidator 614

17.5.1在C++中初始化和终止 616

17.5.2泄漏报告都到哪儿去了? 617

17.6使用MemStress 617

17.6.1有趣的压力测试问题 619

17.7操作系统堆 620

17.8发现内存问题的技巧 622

17.8.1发现未初始化的内存写入问题 622

17.8.2发现内存溢出 623

17.9重要开关 629

17.9.1运行时检查开关 629

17.9.2缓冲区安全检查开关 635

17.10本章小结 636

第18章 FastTrace:用于服务器应用程序的高性能跟踪工具 637

18.1基本问题和解决方案 638

18.2使用FastTrace 638

18.2.1合并跟踪日志文件 640

18.3FastTrace的实现 641

18.4本章小结 641

第19章 优化工作集 642

19.1工作集调整 642

19.2使用SWS 646

19.2.1设置SWS编译 647

19.2.2使用SWS运行应用程序 648

19.2.3生成和使用排序文件 650

19.3实现SWS 651

19.3.1_penter函数 651

19.3.2.SWS文件格式和符号枚举 656

19.3.3运行时符号问题和模块调整 661

19.4对SWS的改进建议 664

19.5本章小结 664

附录A:阅读Dr.Watson日志 665

返回顶部