Windows用户态程序高效排错 目录草稿

Windows用户态程序高效排错
思路 技巧 案例 方法

前言8
0.1 本书介绍什么?8
0.2 本书的组织结构8
0.3 本书的适合人群9
0.4 本书叙述上的特点9
0.5 您的反馈和最新动态10
第一部分,比工具,技巧和经验都重要的是你的思考 -- 从四个风格迥异的案例说起11
1.0 热身运动11
1.1绝望的性能问题, ADO.net 2.0竟然比 1.0要慢!12
问题描述12
悲观和绝望12
换位思考13
排错14
结论和收获15
题外话和相关讨论16
Safehandle的更多讨论16
平衡,取舍,双赢和RFC 192516
Profiler的下载地址和相关资源:17
1.2 不可思议:一个 API同时打开了两个文件?17
问题描述17
第一映像17
深入分析18
革命尚未成功19
结论22
题外话和相关讨论22
MSDN是最值得信赖的吗22
你敢说CPU坏了?22
[DWORD和文件长度]23
[程序输出0xcdcdcdcd,想到了什么]23
1.3 简单的问题最棘手:稀疏平常的ASP.NET Session Lost问题25
问题描述25
制定策略25
具体操作和结论26
题外话和相关讨论27
排查session lost的经验:27
1.4本可以做得更好:SharePoint中文界面变英文28
问题描述28
排错步骤28
错过的线索30
第二部分,汇编,异常,内存,同步和调试器 -- 重要的知识点和神兵利器31
2.1排错的工具:调试器Windbg31
调试器的功能:检查代码和数据,保存dump文件,用断点控制程序的执行32
符号文件 (Symbol file),把二进制和源代码对应起来33
一个简单的上手程序33
用Internet Explorer来操练调试器的基本命令43
Vertarget 检查进程概况44
!peb 显示Process Environment Block44
Lmvm 检查模块的加载信息44
.relad / !sym 加载符号文件45
Lmf 列出当前进程中加载的所有模块46
r,d,e 寄存器,内存的检查和修改46
S 搜索内存47
!runaway 检查线程的CPU消耗48
~ 切换目标线程49
k,kb,kp,kv,kn 检查call stack50
U 反汇编50
X 查找符号的二进制地质50
dds 对应二进制地址到符号51
检查程序数据的小例子52
.frame 在栈中切换以便检查局部变量54
Dt 格式化显示数据55
用windbg控制程序进行实时调试(Live Debug)56
Wt Watch and Trace, 跟踪执行的强大命令56
条件断点 (condition breakpoint),高效地控制观测目标58
伪寄存器,帮助保存调试的中间信息61
Step Out的实现61
远程调试(Remote debug)62
如何通过windbg命令行让中文魔兽争霸运行在英文系统上62
Adplus的常见用法63
Debugger Extension,扩展Windbg的功能64
2.2读懂机器的语言:汇编,CPU执行指令的最小单元64
需要用汇编来排错的常见情况64
案例研究,用汇编读懂VC编译器的优化65
问题描述65
我的分析65
案例研究,VC2003 编译器的bug, debug模式正常,release模式会崩溃66
例子程序66
跟踪汇编指令来分析68
案例研究,臭名昭著的DLL Hell如何导致ASP.NET出现Server Unavailable69
[题外话和相关讨论]70
Release比 Debug快吗70
2.3理解操作系统对程序的反馈:异常(Exception)和通知(Debug Event)72
异常(Exception)的方方面面和一篇字字珠玑的文章72
案例研究,如何让C++像C#一样打印出函数调用栈(callstack)73
案例研究,华生医生(Dr. Watson)在什么情况下不能记录Dump文件74
问题描述74
背景知识74
问题分析74
新的做法75
问题解决了,可是为什么华生医生(Dr. Watson)抓不到dump呢76
通知(Debug Event)是操作系统跟调试器交流的一种方法79
案例研究,VB6的版本问题79
题外话和相关讨论81
错过第一现场后还从dump中分析出线索吗81
Adplus,天天都用的工具82
未处理异常发生后的主动退出83
如何调试UnhandledExceptionFilter83
2.4平坦内存空间中的层次结构:Heap和Stack85
Heap是对平坦空间的高效管理和利用85
PageHeap,调试Heap问题的工具87
简单例子的多种情况87
Heap上的内存泄露和内存碎片88
Stack overrun/corruption90
题外话和相关讨论:92
PageHeap的/unaligned参数92
Heap trace,系统帮你记录下每次Heap的操作93
为何才分配了300MB内存,就报告Out of memory96
2.5 找准排查问题的对应层次98
从C运行库看层次98
简单的_CRTDBG_MAP_ALLOC定义就可以让内存泄漏无可遁形99
BSTR Cache,建立在Heap之上的COM字符串内存管理100
题外话和相关讨论100
CRT Debug Heap一定对Debug有帮助吗?101
C++中new操作符的尴尬101
2.6理清多个线程对资源的竞争:同步和锁101
句柄泄漏,死锁和线程争用,三个典型问题101
句柄泄漏(Handle Leak)102
死锁(Deadlock)102
线程争用 (contention)104
Windbg中的对应排错104
!handle 检查句柄信息105
!htrace 检查操作句柄的历史纪录106
!cs 列出CriticalSection的详细信息107
排查CriticalSection leak( Orphan CriticalSection)109
Invalid handle exception111
案例研究, ArrayList.Add的时候发生IndexOutOfRangeException112
问题描述112
这个异常不简单112
具体操作113
结论114
2.7 调试和设计116
热心朋友的提问116
案例分析,反被聪明误117
第三部分 .NET Framework的原理和SOS调试 --剖析CLR程序和CLR本身119
3.1 MetaData(元数据),JIT(编译引擎),GC(内存管理),Exception(异常处理)的关键点119
MetaData(元数据)和引擎初始化119
JIT 动态编译120
GC 内存管理121
Exception Handling 异常处理122
3.2 用Windbg探索CLR的实现122
开源的CLR实现:Rotor122
对一个Hello world的WinForm程序庖丁解牛123
mscoree!_CorExeMain CLR引擎的入口124
EEStartupHelper 重要的引擎初始化函数124
mscorwks!SystemDomain::ExecuteMainMethod 执行托管代码的入口126
CallDescr /MakeJitWorker Jit引擎发动的地方127
NtUserWaitMessage 托管程序完成加载130
gc_heap::allocate_more_space/ GCHeap::GarbageCollect 通过GC管理内存的分配和释放132
AppDomain,ThreadPool,Exception,StackWalk,Security都是有趣的话题135
3.3 通过SOS快捷方便地调试托管程序136
CLR让托管程序的调试变得非常简单136
SOS的命令介绍137
3.4 用简单的程序演示SOS的常见操作141
.load sos 加载sos到windbg141
!dumpheap 统计托管内存使用信息142
!do 显示托管对象的详细信息143
!gcroot 查找托管对象的引用关系143
3.5 案例分析, ASP.NET High CPU和更多的CLR命令演示145
!threads 察看托管线程146
!tp 察看线程池和CPU占用率147
!SyncBlk 察看托管线程的lock150
!ip2md 映射内存地址到托管函数名150
!savemodule 保存模块到本地以便用reflector分析151
著名的blog:If broken it is, fix it you should152
3.6 题外话和相关讨论152
ReleaseCOMObject 释放COM对象时候的两难困境152
PInvoke应该Pin住内存防止崩溃153
但是Pin住内存又会导致内存碎片154
臭名昭著的mixed DLL loading deadlock154
有趣且有用的练习和更多的资料154
第四部分 ,崩溃,性能和资源泄漏 -- 分享一些经验156
4.1 排错开始前的准备工作156
用正确的态度对待问题156
用简单的提问缩小排错的范围156
通过MPS REPORT获取系统的详细信息157
通过简单得Dump分析获取基本信息158
4.2 崩溃(Crash)159
崩溃的万千种不同死相159
准确获取Dump163
Adplus 最容易上手的dump脚本164
华生医生(dr Watson)166
通过Image File Execution Options让调试器随目标程序一起启动166
COM+和ASP.NET的dump获取需要特殊配置167
crash dump中需要重点关注的信息167
案例分析,VC程序的崩溃168
问题描述168
MessageBox 嵌套调用169
从源代码中发现的疑点172
从This指针找崩溃的根源174
结论177
小结和更多的资源178
题外话和相关讨论178
StackCorruption179
4.3 性能(Performance)181
“你真牛,不如你再努力给我缩短10秒吧” 应该有多快是仔细估算出来的,不是调出来的181
性能调优的步骤 CPU利用率是关键182
无所不知的性能监视器183
使用性能监视器的基本步骤183
重要的计数器185
案例分析, 博客园的性能问题188
案例分析,堵塞在SqlCommand.ExecuteReader上就一定在等sql吗196
案例分析, 堵塞在Assembly.Load上的deadlock203
案例分析,196个线程织成的一张网215
用Profiler精确定位性能瓶颈231
案例分析,DataTable中foreach和for loop性能差了50%232
题外话和相关讨论237
Task manager跟performance monitor的差别237
性能监视器的牛逼用法238
C++跟C#到底谁快239
没有profiler怎么办239
4.4 资源泄露(Resource Leak)242
资源泄露分轻重缓急243
内存泄露排错的基本步骤244
泄漏了什么,谁分配的,为什么无法释放?244
定位泄漏内存的类型和增长趋势244
区分managed heap leak和native leak245
案例分析,IE7的内存泄漏leak245
问题描述246
重现问题和基本分析246
用传统的Pageheap+UMDH找到问题根源249
方便强大的IIS Diagnostics工具257
结论265
分析IIS Diag265
托管内存泄露267
案例分析,object chain让排错简单明了267
案例分析,一个bt的案例274
碎片的其它原因277
句柄泄漏(Handle Leak)279
题外话和相关讨论280
GDI Leak280
Desktop heap issue280
更多的资源282

智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值