分享
 
 
 

Windows 用户态程序高效排错

Windows 用户态程序高效排错  点此进入淘宝搜索页搜索
  特别声明:本站仅为商品信息简介,并不出售商品,您可点击文中链接进入淘宝网搜索页搜索该商品,有任何问题请与具体淘宝商家联系。
  參考價格: 点此进入淘宝搜索页搜索
  分類: 图书,计算机/网络,操作系统/系统开发,WINDOWS,

作者: 熊力著

出 版 社: 电子工业出版社

出版时间: 2007-12-1字数: 320000版次: 1页数: 236印刷时间: 2007/12/01开本: 16开印次: 1纸张: 胶版纸I S B N : 9787121051937包装: 平装编辑推荐

思考才是硬道理;精妙方法,源于思考;精彩案例,源于实践;深入剖析数十个微软企业客户的真实案例;让您成为福尔摩斯一样的排错高手。

用真实案例讲WINDOWS用户态程序排错方法和技巧献于所有乐于思考,参与WINDOWS用户态程序开发的人。

内容简介

本书是一本介绍Windows系统上的用户态程序排错方法和技巧的书。本书分为4个章节,先介绍最重要的、通用的思考方法,以便制定排错步骤;再介绍对排错有帮助的知识点和工具;并介绍了.NET Framework(CLR)的相关知识和调试技巧;最后一章针对常见的几大类问题进行了总结。

本书案例丰富,对现实中的实际问题进行了研究,并和读者一起分析解决办法;本书的写作思路为先给出问题描述,然后提供线索,再进行分析,让读者在阅读中也进行思考,以提高实际解决问题的能力。本书适合希望学习排错、调试知识的软件开发、测试人员,希望深入学习Windows系统上用户态程序的排错知识的软件开发、测试人员。

作者简介

熊力,2004年开始在上海微软技术支持中心担任技术支持工程师。他所在的小组负责帮助企业客户解决开发领域的技术难题。作者专注于.NET Framework、 C/C++、COM和Web开发,现任微软中国研发集团服务器与开发工具事业部测试工程师。

目录

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

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

1.1.1 问题描述

1.1.2 悲观和绝望

1.1.3 换位思考

1.1.4 排错

1.1.5 结论和收获

1.1.6 题外话和相关讨论

Safehandle的更多讨论

平衡、取舍、双赢和RFC 1925

Profiler的下载地址和相关资源

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

1.2.1 问题描述

1.2.2 第一印象

1.2.3 深入分析

1.2.4 革命尚未成功

1.2.5 结论

1.2.6 题外话和相关讨论

MSDN是最值得信赖的吗

你敢说CPU坏了

DWORD和文件长度

程序输出0xcdcdcdcd,想到了什么

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

1.3.1 问题描述

1.3.2 制定策略

1.3.3 具体操作和结论

1.3.4 题外话和相关讨论

排查session lost的经验

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

1.4.1 问题描述

1.4.2 排错步骤

1.4.3 错过的线索

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

2.1 排错的工具:调试器Windbg

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

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

2.1.3 一个简单的上手程序

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

vertarget检查进程概况

!peb 显示Process Environment Block

lmvm 检查模块的加载信息

.reload / !sym 加载符号文件

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

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

!address显示内存页信息

S 搜索内存

!runaway 检查线程的CPU消耗

~ 切换目标线程

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

u 反汇编

x 查找符号的二进制地址

dds 对应二进制地址的符号

2.1.5 检查程序资料的小例子

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

dt 格式化显示资料

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

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

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

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

Step Out的实现

2.1.7 远程调试(Remote debug)

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

2.1.9 Dump文件

2.1.10 CDB、NTSD和重定向到Kernel Debugging

2.1.11 Debugger Extension,扩展Windbg的功能

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

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

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

问题描述

我的分析

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

例子程序

跟踪汇编指令来分析

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

2.2.2 题外话和相关讨论

Release比 Debug快吗

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

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

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

2.3.2 Adplus,抓取dump的方便工具

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

问题描述

背景知识

问题分析

新的做法

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

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

案例分析:VB6的版本问题

2.3.4 题外话和相关讨论

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

Adplus,天天都用的工具

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

如何调试UnhandledExceptionFilter

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

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

2.4.2 PageHeap,调试Heap问题的工具

简单例子的多种情况

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

2.4.3 Stack overrun/corruption

2.4.4 题外话和相关讨论

PageHeap的/unaligned参数

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

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

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

2.5.1 从C运行库看层次

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

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

2.5.4 题外话和相关讨论

CRT Debug Heap一定对Debug有帮助吗

C++中new操作符的尴尬

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

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

句柄泄漏(Handle Leak)

死锁(Deadlock)

线程争用 (contention)

2.6.2 Windbg中的对应排错

!handle 检查句柄信息

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

!cs 列出CriticalSection的详细信息

排查CriticalSection leak( Orphan CriticalSection)

Invalid handle exception

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

问题描述

这个异常不简单

具体操作

结论

2.7 调试和设计

2.7.1 一位热心朋友的提问

案例分析:反被聪明误

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

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

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

3.1.2 JIT动态编译

3.1.3 GC 内存管理

3.1.4 Exception Handling异常处理

3.2 用Windbg探索CLR的实现

3.2.1 开源的CLR实现:Rotor

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

mscoree!_CorExeMain CLR引擎的入口

EEStartupHelper 重要的引擎初始化函数

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

CallDescr /MakeJitWorker Jit引擎发动的地方

NtUserWaitMessage 托管程序完成加载

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

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

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

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

3.3.2 SOS的命令介绍

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

3.4.1 .load SOS 加载SOS到Windbg

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

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

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

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

!threads查看托管线程

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

!SyncBlk查看托管线程的lock

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

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

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

3.5 题外话和相关讨论

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

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

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

3.5.4 臭名昭著的mixed DLL loading deadlock

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

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

4.1 排错开始前的准备工作

4.1.1 用正确的态度对待问题

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

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

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

4.2 崩溃(Crash)

4.2.1 崩溃的万千种不同死相

4.2.2 准确获取Dump

Adplus:最容易上手的dump脚本

华生医生(dr Watson)

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

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

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

案例分析:VC程序的崩溃

问题描述

MessageBox 嵌套调用

从源代码中发现的疑点

从This指针找崩溃的根源

结论

4.2.4 小结和更多的资源

4.2.5 题外话和相关讨论

HeapCorruption

StackCorruption

4.3 性能(Performance)

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

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

4.3.3 无所不知的性能监视器

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

重要的计数器

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

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

问题背景

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

问题背景

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

问题背景

小结

4.3.4 用Profiler精确定位性能瓶颈

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

问题背景

4.3.5 题外话和相关讨论

Task manager跟performance monitor的差别

性能监视器的超级用法

C++跟C#到底谁快

没有profiler怎么办

4.4 资源泄漏(Resource Leak)

4.4.1 资源泄漏分轻重缓急

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

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

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

区分managed heap leak和native leak

案例分析:IE7的内存泄漏

问题描述

重现问题和基本分析

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

方便强大的IIS Diagnostics工具

结论

分析IIS Diag

4.4.3 托管内存泄漏

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

问题背景

案例分析:一个bt的案例

碎片的其他原因

4.4.4 句柄泄漏(Handle Leak)

4.4.5 题外话和相关讨论

GDI Leak

Desktop heap issue

更多的资源

Windows 用户态程序高效排错

Windows 用户态程序高效排错

Windows 用户态程序高效排错

Windows 用户态程序高效排错

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有