图书介绍

Windows用户态程序高效排错PDF|Epub|txt|kindle电子书版本网盘下载

Windows用户态程序高效排错
  • 熊力著 著
  • 出版社: 北京:电子工业出版社
  • ISBN:7121051931
  • 出版时间:2007
  • 标注页数:236页
  • 文件大小:17MB
  • 文件页数:265页
  • 主题词:窗口软件,Windows-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

Windows用户态程序高效排错PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 比工具、技巧和经验都重要的是你的思考——从四个风格迥异的案例说起1

1.1 绝望的性能问题:ADO.NET 2.0竟然比1.0要慢1

1.1.1 问题描述1

1.1.2 悲观和绝望2

1.1.3 换位思考3

1.1.4 排错3

1.1.5 结论和收获5

1.1.6 题外话和相关讨论6

Safehandle的更多讨论6

平衡、取舍、双赢和RFC 19256

Profiler的下载地址和相关资源7

1.2 不可思议:一个API同时打开了两个文件7

1.2.1 问题描述7

1.2.2 第一印象7

1.2.3 深入分析8

1.2.4 革命尚未成功9

1.2.5 结论12

1.2.6 题外话和相关讨论12

MSDN是最值得信赖的吗12

你敢说CPU坏了12

DWORD和文件长度13

程序输出Oxcdcdcdcd,想到了什么13

1.3简单的问题最棘手:稀疏平常的ASP.NET Session Lost问题14

1.3.1 问题描述14

1.3.2 制定策略14

1.3.3 具体操作和结论15

1.3.4 题外话和相关讨论16

排查session lost的经验16

1.4 本可以做得更好:SharePoint中文界面变英文17

1.4.1 问题描述17

1.4.2 排错步骤17

1.4.3 错过的线索19

第2章 汇编、异常、内存、同步和调试器——重要的知识点和神兵利器21

2.1 排错的工具:调试器Windbg21

2.1.1 调试器的功能:检查代码和资料,保存dump文件, 断点控制程序的执行22

2.1.2 符号文件(Symbol file),把二进制和源代码对应起来23

2.1.3 一个简单的上手程序24

2.1.4 用Internet Explorer来操练调试器的基本命令32

vertarget检查进程概况32

!peb显示Process Environment Block33

lmvm检查模块的加载信息33

.reload/!sym加载符号文件33

lmf列出当前进程中加载的所有模块34

r,d,e寄存器,内存的检查和修改34

!address显示内存页信息35

S搜索内存35

!runaway检查线程的CPU消耗36

~切换目标线程37

k,kb,kp,kv,kn检查call stack37

u反汇编38

x查找符号的二进制地址38

dds对应二进制地址的符号38

2.1.5 检查程序资料的小例子40

.frame在栈中切换以便检查局部变量41

dt格式化显示资料41

2.1.6 用Windbg控制程序进行实时调试(Live Debug)42

Wt Watch and Trace,跟踪执行的强大命令42

断点和条件断点(condition breakpoint),高效地控制观测目标44

伪寄存器,帮助保存调试的中间信息46

Step Out的实现47

2.1.7 远程调试(Remote debug)47

2.1.8 如何通过Windbg命令行让中文魔兽争霸运行在英文系统上48

2.1.9 Dump文件49

2.1.10 CDB、NTSD和重定向到Kernel Debugging49

2.1.11 Debugger Extension,扩展Windbg的功能50

2.2 读懂机器的语言:汇编,CPU执行指令的最小单元50

2.2.1 需要用汇编来排错的常见情况50

案例分析:用汇编读懂VC编译器的优化51

问题描述51

我的分析51

案例分析:VC2003编译器的bug、debug模式正常,release模式会崩溃52

例子程序52

跟踪汇编指令来分析53

案例分析:臭名昭著的DLL Hell如何导致ASP.NET出现Server Unavailable54

2.2.2 题外话和相关讨论55

Release比Debug快吗55

2.3 理解操作系统对程序的反馈:异常(Exception)和通知(Debug Event)56

2.3.1 异常(Exception)的方方面面和一篇字字珠玑的文章56

案例分析:如何让C++像C#一样打印出函数调用栈(callstack)58

2.3.2 Adplus,抓取dump的方便工具58

案例分析:华生医生(Dr.Watson)在什么情况下不能记录Dump文件59

问题描述59

背景知识59

问题分析60

新的做法61

问题解决了,可是为什么华生医生(Dr.Watson)抓不到dump呢61

2.3.3 通知(Debug Event)是操作系统跟调试器交流的一种方法63

案例分析:VB6的版本问题64

2.3.4 题外话和相关讨论65

错过第一现场后还从dump中分析出线索吗65

Adplus,天天都用的工具67

未处理异常发生后的主动退出67

如何调试UnhandledExceptionFilter68

2.4 平坦内存空间中的层次结构:Heap和Stack69

2.4.1 Heap是对平坦空间的高效管理和利用69

2.4.2 PageHeap,调试Heap问题的工具71

简单例子的多种情况71

Heap上的内存泄漏和内存碎片73

2.4.3 Stack overrun/corruption74

2.4.4 题外话和相关讨论76

PageHeap的/unaligned参数76

Heap trace,系统帮你记录下每次Heap的操作76

为何才分配了300MB内存,就报告Out of memory79

2.5 找准排查问题的对应层次80

2.5.1 从C运行库看层次80

2.5.2 简单的_CRTDBG_MAP_ALLOC定义就可以让内存泄漏无可遁形81

2.5.3 BSTR Cache,建立在Heap之上的COM字符串内存管理82

2.5.4 题外话和相关讨论83

CRT Debug Heap一定对Debug有帮助吗83

C++中new操作符的尴尬83

2.6 理清多个线程对资源的竞争:同步和锁84

2.6.1 句柄泄漏、死锁和线程争用,三个典型问题84

句柄泄漏(Handle Leak)84

死锁(Deadlock)84

线程争用(contention)86

2.6.2 Windbg中的对应排错87

!handle检查句柄信息87

!htrace检查操作句柄的历史记录88

!cs列出CriticalSection的详细信息89

排查CriticalSection leak(Orphan CriticalSection)90

Invalid handle exception92

案例分析:ArrayList.Add的时候发生IndexOutOfRangeException93

问题描述93

这个异常不简单93

具体操作94

结论95

2.7 调试和设计96

2.7.1 一位热心朋友的提问96

案例分析:反被聪明误98

第3章 .NET Framework的原理和SOS调试——剖析CLR程序和CLR本身101

3.1 MetaData、JIT、GC和Exception的关键点101

3.1.1 MetaData(元资料)和引擎初始化101

3.1.2 JIT动态编译102

3.1.3 GC内存管理103

3.1.4 Exception Handling异常处理104

3.2 用Windbg探索CLR的实现105

3.2.1 开源的CLR实现:Rotor105

3.2.2 对一个Hello world的WinForm程序庖丁解牛106

mscoree!_CorExeMain CLR引擎的入口106

EEStartupHelper重要的引擎初始化函数107

mscorwks!SystemDomain∷ExecuteMainMethod执行托管代码的入口108

CallDescr/MakeJitWorker Jit引擎发动的地方109

NtUserWaitMessage托管程序完成加载111

gc_heap∷allocate_more_space/GCHeap∷GarbageCollect通过GC管理内存的分配和释放113

AppDomain,ThreadPool,Exception,StackWalk,Security都是有趣的话题115

3.3 通过SOS快捷方便地调试托管程序116

3.3.1 CLR让托管程序的调试变得非常简单116

3.3.2 SOS的命令介绍117

3.4 用简单的程序演示SOS的常见操作121

3.4.1 .load SOS加载SOS到Windbg121

3.4.2 !dumpheap统计托管内存使用信息122

3.4.3 !do显示托管对象的详细信息122

3.4.4 !gcroot查找托管对象的引用关系123

案例分析:ASP.NET High CPU和更多的CLR命令演示124

!threads查看托管线程125

!tp查看线程池和CPU占用率125

!SyncBlk查看托管线程的lock127

!ip2md映像内存地址到托管函数名128

!savemodule保存模块到本地以便用reflector分析128

著名的blog:If broken it is,fix it you should129

3.5 题外话和相关讨论129

3.5.1 ReleaseCOMObject释放COM对象时候的两难困境129

3.5.2 PInvoke应该Pin住内存防止崩溃130

3.5.3 Pin住内存又会导致内存碎片131

3.5.4 臭名昭著的mixed DLL loading deadlock131

3.5.5 有趣且有用的练习和更多的资料132

第4章 崩溃,性能和资源泄漏——分享一些经验133

4.1 排错开始前的准备工作133

4.1.1 用正确的态度对待问题133

4.1.2 用简单的提问缩小排错的范围134

4.1.3 通过MPS REPORT获取系统的详细信息135

4.1.4 通过简单的Dump分析获取基本信息136

4.2 崩溃(Crash)137

4.2.1 崩溃的万千种不同死相137

4.2.2 准确获取Dump141

Adplus:最容易上手的dump脚本141

华生医生(dr Watson)143

通过Image File Execution Options让调试器随目标程序一起启动143

COM+和ASP.NET的dump获取需要特殊配置144

4.2.3 crash dump中需要重点关注的信息144

案例分析:VC程序的崩溃145

问题描述145

MessageBox嵌套调用146

从源代码中发现的疑点148

从This指针找崩溃的根源149

结论152

4.2.4 小结和更多的资源153

4.2.5 题外话和相关讨论153

HeapCorruption153

StackCorruption153

4.3 性能(Performance)154

4.3.1 “你真牛,不如你再给我缩短10秒吧!”不是想要多快就能调到多快155

4.3.2 性能调优的步骤,CPU利用率是关键156

4.3.3 无所不知的性能监视器157

使用性能监视器的基本步骤158

重要的计数器159

案例分析:博客园的性能问题163

案例分析:堵塞在SqlCommand.ExecuteReader上就一定在等sql吗168

问题背景168

案例分析:堵塞在Assembly.Load上的deadlock172

问题背景172

案例分析:196个线程织成的一张网180

问题背景180

小结191

4.3.4 用Profiler精确定位性能瓶颈191

案例分析:DataTable中foreach和for loop性能差了50%192

问题背景192

4.3.5 题外话和相关讨论197

Task manager跟performance monitor的差别197

性能监视器的超级用法197

C++跟C#到底谁快199

没有profiler怎么办199

4.4 资源泄漏(Resource Leak)201

4.4.1 资源泄漏分轻重缓急201

4.4.2 内存泄漏排错的基本步骤203

泄漏了什么,谁分配的,为什么无法释放203

定位泄漏内存的类型和增长趋势203

区分managed heap leak和native leak204

案例分析:IE7的内存泄漏205

问题描述205

重现问题和基本分析205

用传统的Pageheap+UMDH找到问题根源207

方便强大的IIS Diagnostics工具213

结论222

分析IIS Diag222

4.4.3 托管内存泄漏223

案例分析:object chain让排错简单明了223

问题背景223

案例分析:一个bt的案例229

碎片的其他原因231

4.4.4 句柄泄漏(Handle Leak)231

4.4.5 题外话和相关讨论233

GDI Leak233

Desktop heap issue233

更多的资源235

热门推荐