任何举动之前,先思考,思考,再思考——《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

任何举动之前,先思考,思考,再思考相关推荐

  1. EventBus/EventQueue 再思考

    EventBus/EventQueue 再思考 Intro 之前写过两篇文章,造轮子系列的 EventBus/ EventQueue,回想起来觉得当前的想法有点问题,当时对 EvenStore 可能有 ...

  2. 2d 蓝图_“蓝图”卷积--对深度可分离卷积的再思考

    论文:Rethinking Depthwise Separable Convolutions: How Intra-Kernel Correlations Lead to Improved Mobil ...

  3. 论文解读二十七:文本行识别模型的再思考

    摘要:本文研究了两个解码器(CTC[1]和 Transformer[2])和三个编码器模块(双向LSTM[3].Self-Attention[4]和GRCL[5]),通过大量实验在广泛使用的场景和手写 ...

  4. SPOOLing技术的再思考

    SPOOLing技术的再思考 @(OS) 首先看什么是SPOOLing. Simultaneous Peripheral Operation On-Line 通过这个名称基本上就可以知道很多事情.外部 ...

  5. 光通信的再思考:5G流量爆发下的数据密度革命

    来源:未来智库 1.投资要件 区别于市场的观点: (1)市场对 5G 时代流量爆发的认知不足.市场认为当前大带宽高流量新应用的爆发趋势尚不明显,当前流量增长需求不清.我们认为,5G 时代的流量的爆发将 ...

  6. 关于第一型曲面积分的再思考

    关于第一型曲面积分的再思考 @(微积分) 有些问题,看着复杂,却很好解.同样,有些问题看着很简单,但是却很难下手.举一个关于第一型曲面积分计算的例子. 第一型曲面积分基础解法要干三件事: 投影 代入 ...

  7. 重读GPDB 和 TiDB 论文引发的 HTAP 数据库再思考

    为什么要再思考? 大家好,我是阿福,之前我在社区 Paper Reading 活动中分享了 Greenplum 团队在 2021年 SIGMOD 上发表的论文:<Greenplum: A Hyb ...

  8. 停下,驻足思考,再前行

      最近公司发生了很多事,自己心里也经过了很多起伏,不得不停下来去想一些事情.这一年以来,自己也很努力,尽管在管理和机器学习技术上也有很多的成长,但是却实实在在的缺了些什么,那就是只专注于持续的埋头做 ...

  9. 【秒杀下单再思考 】

    秒杀下单再思考 - 由reids数据倾斜问题如何解决引发的思考 问题背景:用db扣减库存+redis.lock解决超卖问题,并发量并不能提很高,考虑redis中扣减库存,秒杀方案:redis.get( ...

最新文章

  1. 当前日期得到本周的开始和结束日期
  2. 什么是SQL数据库?
  3. python3-泊松分布
  4. Kotlin的解析(中)
  5. Python range()的解释和可视化
  6. 关于人行acs对账不及时_以在线教育公司为例,如何做一款财务对账产品?
  7. 光纤熔接过程详细说明
  8. 《Easy RL:强化学习教程》出版了!文末送书
  9. redis报错解决,MISCONF Redis is configured to save RDB snapshots
  10. OceanBase 十年:一群追梦人的成长史
  11. ubuntu编译运行xv6
  12. 面向对象【林老师版】:绑定方法与非绑定方法(十七)
  13. java网页保存成pdf_JavaScript+Java实现HTML页面转为PDF文件保存的方法
  14. 方法重写的两同两小一大原则
  15. 有一个好的身体太重要了
  16. 让你在 API 设计中少踩坑的实战分享
  17. java实现表情符号过滤
  18. 网络库libevent、libev、libuv、libhv对比
  19. 精读《web reflow》
  20. 四位“计算机之父”之争

热门文章

  1. Python笔记-使用SSIM找两张图不同及使用Opencv显示
  2. Linux学习笔记-grep的基本认识
  3. Qt文档阅读笔记-最简单的动态3D圆环实例
  4. php post aspx,PHP模拟POST aspx页面不成功
  5. python 遍历一个空列表
  6. ios html字符转义字符串,iOS HTML特殊字符转译
  7. java excel 超链接_Java 编辑、删除Excel中的超链接
  8. php 隐藏地址栏,工具栏,php – 我怎么能隐藏#!在浏览器地址栏上?
  9. 学python必会英语单词_Python必备常用英语词汇(一)
  10. 高频面试题3 类初始化过程与实例初始化