任何举动之前,先思考,思考,再思考
任何举动之前,先思考,思考,再思考——《Windows用户态程序高效排错》之读书笔记
之所以会读《Windows用户态程序高效排错》这本书,是因为某个卖存储的技术大拿不停地给我丢case,一些虽然看起来很容易,但是设计细节部分的case让人崩溃。在这段时间陆续重新开始使用netmon、windbg等工具来帮助排错。无奈,到处托人帮忙,正好有位同乡MVP手头有这本书,死脸皮要过来看了。很好很强大!虽然对汇编,c,c++等语言是一窍不通,硬着头皮看,也学到了一些非常有用的排错方法。
任何举动之前,先思考,思考,再思考。
01.相信事实,不要相信经验
很多时候,看到某工程师基于自己的经验,对case做一些无聊的猜测,并最终导致问题没解决或者恶化的案例真的很多。以前我是这样,现在稍微好一点了,但是依然还是会站在自己的经验上来处理问题。以后要减少这方面的问题。(同时这里感谢江苏的sun大哥,总是挑我的错呢,虽然被挑到的时候我总是会脸红一下,你看我不到看我不到!)
任何case,只要客户端报错了,那么它就是事实存在的。如果你因为经验陷入在定向思维上,很难去找到问题根本并解决。
02.详细观察问题发生的过程,对任何线索保持敏感
数字,比如2的n次方可以解释很多问题。
某个选项,比如SSL?dns解析?
03.用对比的方法来寻求问题的根源
让问题复现,并与正常状态进行对比。
04.用cpu的节奏和方法来理解整个过程
慢慢想象整个过程的来龙去脉,然后慢慢演示,前推后推10步,一般也就能找到问题的症结。
05.文档不是万能的,没有文档是万万不能的
很多时候,文档可以帮你了解过程,但是很多文档都是有瑕疵甚至有绝对错误的时候。千万不要因为没有复现文档的状态而灰心,因为这意味着你又找到了一个新的case!多么有挑战啊!
06.坚实的基础知识可以让你事半功倍!
不要总是想着速成,如果都是速成,还要GTSC干嘛?还要IT support部门干嘛?你硬着头皮看点非常基础,非常没有成就感的书,看2本后,你就会发现,这个世界的case很多都是因为最基本的问题没有弄清楚而导致的。
07.不要局限在头疼医头,要全面的了解是否这个case可以更完美的解决
一般因为客户的要求,我仅仅协助他解决了当前的问题。可是如果当前的修改极有可能引发了未来可能预见到的大问题,你是否还会选择这个解决方案呢?当然了,如果你是IT公司,希望赚取更多的服务费,那就是另外一个说法了。
日常排错的checklist
1)补丁打全了么?
2)MS support查了么?有对应的补丁可以打么?
3)问题在同一台机器上是偶尔发生,还是总是可以重现
4)问题在不同的机器能重现么?
5)能用类似的软件测试该问题么?
6)错误截屏了么?
7)重现问题的步骤是什么?有特殊的地方么?
8)有办法可以缓解或者暂时解决么?
9)有防火墙,防病毒软件么?
10)排错是在生产环境还是在测试环境中进行?
11)用到数据库了吗?什么类型的?
12)问题和负载有关系么?
13)网络环境如何?nat?
14)有用群集么?NLB?
15)在domain中么?
16)非domain环境是否在server和client端闯将相同名和密码的账户进行测试?
17)最近有安装新补丁,或者新软件么?
18)除了问题本身,系统有什么异常?内存,cpu,网络?
19)系统日志有什么显示什么问题么?
20)尝试更换一个程序账户测试?比如另外一个管理员账户?
以上是排错思维的一些笔记。
--------插花----------
这本书我没有能力全看懂,太多的程序设计的问题了。但是这本书可以让了解如何使用windbg来帮你解决问题。书很便宜,仅35RMB,考虑到这本书是2007年出的,现在至少是8折。
----此书还在硬啃中------
转自:http://xunyangit.spaces.live.com/blog/cns!F934535AFC3723BA!839.entry
转载于:https://www.cnblogs.com/bvbook/archive/2009/09/21/1571331.html
任何举动之前,先思考,思考,再思考相关推荐
- EventBus/EventQueue 再思考
EventBus/EventQueue 再思考 Intro 之前写过两篇文章,造轮子系列的 EventBus/ EventQueue,回想起来觉得当前的想法有点问题,当时对 EvenStore 可能有 ...
- 2d 蓝图_“蓝图”卷积--对深度可分离卷积的再思考
论文:Rethinking Depthwise Separable Convolutions: How Intra-Kernel Correlations Lead to Improved Mobil ...
- 论文解读二十七:文本行识别模型的再思考
摘要:本文研究了两个解码器(CTC[1]和 Transformer[2])和三个编码器模块(双向LSTM[3].Self-Attention[4]和GRCL[5]),通过大量实验在广泛使用的场景和手写 ...
- SPOOLing技术的再思考
SPOOLing技术的再思考 @(OS) 首先看什么是SPOOLing. Simultaneous Peripheral Operation On-Line 通过这个名称基本上就可以知道很多事情.外部 ...
- 光通信的再思考:5G流量爆发下的数据密度革命
来源:未来智库 1.投资要件 区别于市场的观点: (1)市场对 5G 时代流量爆发的认知不足.市场认为当前大带宽高流量新应用的爆发趋势尚不明显,当前流量增长需求不清.我们认为,5G 时代的流量的爆发将 ...
- 关于第一型曲面积分的再思考
关于第一型曲面积分的再思考 @(微积分) 有些问题,看着复杂,却很好解.同样,有些问题看着很简单,但是却很难下手.举一个关于第一型曲面积分计算的例子. 第一型曲面积分基础解法要干三件事: 投影 代入 ...
- 重读GPDB 和 TiDB 论文引发的 HTAP 数据库再思考
为什么要再思考? 大家好,我是阿福,之前我在社区 Paper Reading 活动中分享了 Greenplum 团队在 2021年 SIGMOD 上发表的论文:<Greenplum: A Hyb ...
- 停下,驻足思考,再前行
最近公司发生了很多事,自己心里也经过了很多起伏,不得不停下来去想一些事情.这一年以来,自己也很努力,尽管在管理和机器学习技术上也有很多的成长,但是却实实在在的缺了些什么,那就是只专注于持续的埋头做 ...
- 【秒杀下单再思考 】
秒杀下单再思考 - 由reids数据倾斜问题如何解决引发的思考 问题背景:用db扣减库存+redis.lock解决超卖问题,并发量并不能提很高,考虑redis中扣减库存,秒杀方案:redis.get( ...
最新文章
- 当前日期得到本周的开始和结束日期
- 什么是SQL数据库?
- python3-泊松分布
- Kotlin的解析(中)
- Python range()的解释和可视化
- 关于人行acs对账不及时_以在线教育公司为例,如何做一款财务对账产品?
- 光纤熔接过程详细说明
- 《Easy RL:强化学习教程》出版了!文末送书
- redis报错解决,MISCONF Redis is configured to save RDB snapshots
- OceanBase 十年:一群追梦人的成长史
- ubuntu编译运行xv6
- 面向对象【林老师版】:绑定方法与非绑定方法(十七)
- java网页保存成pdf_JavaScript+Java实现HTML页面转为PDF文件保存的方法
- 方法重写的两同两小一大原则
- 有一个好的身体太重要了
- 让你在 API 设计中少踩坑的实战分享
- java实现表情符号过滤
- 网络库libevent、libev、libuv、libhv对比
- 精读《web reflow》
- 四位“计算机之父”之争
热门文章
- Python笔记-使用SSIM找两张图不同及使用Opencv显示
- Linux学习笔记-grep的基本认识
- Qt文档阅读笔记-最简单的动态3D圆环实例
- php post aspx,PHP模拟POST aspx页面不成功
- python 遍历一个空列表
- ios html字符转义字符串,iOS HTML特殊字符转译
- java excel 超链接_Java 编辑、删除Excel中的超链接
- php 隐藏地址栏,工具栏,php – 我怎么能隐藏#!在浏览器地址栏上?
- 学python必会英语单词_Python必备常用英语词汇(一)
- 高频面试题3 类初始化过程与实例初始化