Spiga

《Windows用户态程序高效排错》

2006-08-16 21:13 by lixiong, 20647 visits, 网摘, 编辑

文章下载地址:
http://www.heijoy.com/debugdoc/UsermodeTsPaper_not_bookversion.pdf
http://files.cnblogs.com/lixiong/UsermodeTsPaper_not_Bookversion.pdf


镜像地址:
http://blogs.msdn.com/lixiong/


文章目录

Windows用户态程序高效排错 (UsermodeTSPaper.pdf)文章的目录是:

 

===

第一部分,思考问题

   1.0 热身运动

   1.1 灰常奇怪的问题

   1.2 稀疏平常的Session Lost

   1.3 绝望的性能

   1.4 本可以做得更好

第二部分,知识和工具

   2.1 汇编

   2.2 异常和通知

   2.3 内存

   2.4 区分层次

   2.5 调试器和Windbg

   2.6 同步和锁

   2.7 调试和设计

暂告一个段落

===


前言和简介

本文介绍什么?

 

这是一篇介绍Windows系统上User Mode程序的排错 (troubleshooting) 方法和技巧的文章。

 

无论是开发,测试还是支持,都会遇上程序运行结果跟预期效果不一致的情况。找到问题的根源和解决的过程,就是排错。同时,如果问题发生的情况很特殊,比如特别难于重现,或者没有源代码可以参考,在这样的情况下解决问题,非常有挑战性!

 

后面的章节会通过例子来跟大家分享排错过程中的经验和技巧。

下面这些问题截取于本文后面要讨论的一些例子:

 

l        ASP.NET的程序在测试环境中一切正常,部署到生产环境中后,在压力比较大的时候,发生Session丢失现象。 (ASP.NET Session lost)

l        VC开发的程序运行一段时间后,偶尔发生内存访问错误,然后崩溃。

l        程序消耗的handle数量持续增长,内存使用也持续增长,最后性能下降非常厉害。

l        VC程序中,使用ShellExecute打开一个本地的TXT文件。TXT格式默认打开方式关联到UltraEdit。发现在UltraEdit中除了打开这个TXT外,另外还打开了一个GIF文件。

 

问题可以表现得非常简单,或者非常复杂。可能涉及不同的开发工具和技术。如何分析解决,正是后面要讨论的。

 

 

本文的组织结构:

 

后面分三部分来解释

 

l        第一部分介绍最重要的,通用的思考方法。正确的思维方法能找出问题的核心,制定排错步骤和决定采用何种技术和工具进行研究。

l        第二部分介绍对排错非常有帮助的知识点和工具。包括调试器 (debugger),异常 (exception),内存工具,同步等等。选择恰当的工具,在恰当的时间,可以获取关于问题的关键信息。结合对应的知识就可以分析出问题的根源。

l        第三部分结合前两部分的内容,针对常见的几大类问题进行了总结。包括资源泄漏 (resource leak), 性能问题 (performance), 崩溃 (crash), CLR调试技巧和COM+调试技巧。

 

前两部分已经完成,正在整理。第三部分还没开始写。先把写好的给出来,听听大家的意见。

 

本文的使用方法和说明:

 

本文着重介绍思路,经验和工具。对于具体的知识点和工具,给出重点和方法,但是不会做详细的介绍,原因是MSDN的解释更加丰富和权威。具体信息可以参考文章中给出的链接。

 

在第一章阅读过程中,可能会发现某些术语,或者知识点并不熟悉。但是,这些并不会阻碍理解整体的思路。鼓励自主学习。通过Internet,都可以找到这些知识点的具体说明。同时,很多知识点会在第二章来说明。

 

内容组织上尽量先给现实的情况和问题,然后提供线索,然后分析,最后是结论和思考。目的是鼓励边阅读边思考。在拿到问题后,建议先自主分析如何去获取线索;拿到线索后,建议自主分析如何利用线索。

 

后面的案例都是这两年来亲手处理过的案例,但是处理的过程是在整个团队(微软大中华区开发语言和工具支持部)的帮助下完成的。没有整个团队的帮助,这些案例和这篇文章都无法完成。

 

我在处理这些问题的时候感觉很有趣,所以希望跟大家分享这种乐趣。在完成这篇文章的时候并不是严肃的,所以大家也别用严肃的眼光来看。希望大家当成一种趣味来阅读。

 

您的反馈和最新动态:

 

我保证努力提供正确的内容,但不保证这个事实。所以文章中肯定会有错误,肯定会有更好的解决方法等你去发现。所以您的反馈非常重要。




文章中介绍到的部分案例

下面是文章中一些案例问题的节选:

===

 

有一天,一个电话打进来,客户非常气愤地抱怨, 调用ShellExecute这个API,传入本地的一个文本文件的路径,在相同的机器上,有的时候会同时打开除了这个TXT以外的另一个不相干的文件!客户非常明确地告诉我,所有的参数肯定没有传错,而且ShellExecute的返回值也正确。

 

===

 

一段加密解密程序,首先由用户输入16个字节的原文,然后程序用固定的密钥加密生成密文,接着再对密文解密得到原来的原文,并且打印。问题的现象是,无论用户输入怎么样的原文,经过加密解密后,打印出来的原文的二进制都是一连串的0xcdcdcdcd

 

===

 

Windows SharePoint Portal 是运行在.NET Framework上的一个web应用程序。管理员可以设定使用英文界面或者中文界面。某一天一个客户抱怨SharePoint无法显示出中文界面。所有的页面都用英文显示。

 

===

 

客户开发一个性能很敏感的程序,想知道VC编译器对下面这段代码的优化做得怎么样:

 

         int hgt=4;

         int wid=7;

         for (i=0; i<hgt; i++)

             for (j=0; j<wid; j++)

                  A[i*wid+j] = exp(-(i*i+j*j));

 

===

 

客户声称用VC开发的程序偶尔会崩溃。为了获取详细信息,客户激活了Dr. Watson,以便程序崩溃的时候可以自动获取dump文件进行分析。但是问题再次发生后,Dr. Watson并没有记录下来dump文件。

 

===

 

买了中文版的魔兽争霸,但家里的Windows却是英文版。中文的魔兽争霸必须要运行到中文的操作系统上,否则就报告操作系统语言不匹配,然后退出。怎么办呢?重装系统?去网上找破解?其实windbg就可以解决问题。

Add your comment

29 条回复

  1. #1楼 guest[未注册用户]2006-08-13 21:44
    建议在最后能列出一张常用的工具清单,方便查看。

    提醒下作者文章里有好多错别字,最终版应该做一个校对。

    :)
      回复  引用    
  2. #2楼[楼主] lixiong      2006-08-13 22:53
    谢谢你的反馈
    我会找时间仔细检查
      回复  引用  查看    
  3. #3楼 dudu      2006-08-17 08:47
    感谢lixiong分享自己宝贵的经验!
    感谢lixiong在解决博客园网站性能问题中提供的帮助!
      回复  引用  查看    
  4. #4楼 验证码[未注册用户]2006-08-17 08:51
    下载zip文件后,解开,得到文件UsermodeTSPaper,居然没有后缀名?加上.pdf后缀,打开出错。
      回复  引用    
  5. #5楼 验证码[未注册用户]2006-08-17 08:55
    http://blogs.msdn.com/lixiong/attachment/687357.ashx下载,可以打开。
      回复  引用    
  6. #6楼 dudu      2006-08-17 08:57
    @验证码
    我这里下载可以打开。
      回复  引用  查看    
  7. #7楼 U2U      2006-08-17 09:23
    很好的文章,谢谢分享您的经验,使小弟获益良多。
      回复  引用  查看    
  8. #8楼 Pvistely      2006-08-17 10:35
    @验证码
    解开后是一个自解压的执行文件,为了安全加上.EXE后再按右键点解压,嘿嘿嘿,
      回复  引用  查看    
  9. #9楼 游客[未注册用户]2006-08-17 11:32
    文档是加了密的???
      回复  引用    
  10. #10楼[楼主] lixiong      2006-08-17 12:10
    不会吧,明明就是zip,打开解压不就可以了
      回复  引用  查看    
  11. #11楼 microshot      2006-08-17 12:45
    打开没后缀。。。
      回复  引用  查看    
  12. #12楼 验证码[未注册用户]2006-08-17 13:29
    首先,谢谢作者的分享。
    其次,本以为作者和dudu都是很严谨的人,但是发现有时说话不负责任。
    我说了,从“http://www.cnblogs.com/Files/lixiong/UsermodeTsPaper.zip”下载,“下载zip文件后,解开,得到文件UsermodeTSPaper,居然没有后缀名?加上.pdf后缀,打开出错。”,“到http://blogs.msdn.com/lixiong/attachment/687357.ashx下载,可以打开。”,请尊重这个事实,就象你的书说的一样。
    最后,以上我写的内容,任何人都可以忽略。
      回复  引用    
  13. #13楼 t o m[未注册用户]2006-08-17 13:57
    经典
      回复  引用    
  14. #14楼 t o m[未注册用户]2006-08-17 13:59
    @验证码
    偶在cnblogs上下载的一切正常
      回复  引用    
  15. #15楼 [csdn.net]Oriesmap[未注册用户]2006-08-17 14:03
    @验证码
    这个问题很好解决的。你在UE中打开那个没有后缀名的文件,发现前几个单词中有PK,就知道这是ZIP文件的格式,根本就不是PDF文件的格式。加上.zip,打开,就知道里面有一个真正的pdf文件了。
    问题也或许是打包的人去掉这个后缀了。又压缩了。
      回复  引用    
  16. #16楼 浪子      2006-08-17 14:34
    @lixiong
    可怜的葡萄..

    你的压缩档确实有问题,你的zip里面带一个zip,但是里面的zip没有后缀名,需要自己加.zip再解压....
      回复  引用  查看    
  17. #17楼[楼主] lixiong      2006-08-17 16:40
    zip里面带一个zip?
    我这里不能重现问题
    我换一个下载地址吧:

    http://www.heijoy.com/debugdoc/UsermodeTsPaper.pdf">http://www.heijoy.com/debugdoc/UsermodeTsPaper.pdf
      回复  引用  查看    
  18. #18楼 浪子      2006-08-17 17:05
    @lixiong
    就是好像你压缩了两边:
    第一遍压好之后,你把zip的后缀删了,然后再压缩了一次.

    所以我说zip里面带了个zip,但是里面的zip没有后缀(UsermodeTsPaper),需要自己添加,变成(UsermodeTsPaper.zip)

    我也不知道,我这里为什么这样子?

    难道跟环境有关?

    win2003 sp1 默认应该有winzip,没有额外装过

    装了winrar 3.X
      回复  引用  查看    
  19. #19楼 stenver[未注册用户]2006-08-18 09:49
    好书
      回复  引用    
  20. #20楼 xiangqianyong[未注册用户]2006-08-24 08:47
    下载的pdf看不了,打开的时候,Acrobat说:打开文档错误,该查看程序不能对该文档解密
      回复  引用    
  21. #21楼 zsal[未注册用户]2006-08-29 11:53
    同楼上的,是不是发行的PDF版本太高了,像我们这些用READER5.0的无法打开,能否照顾一下,发行个低版本或CHM版。谢谢。
      回复  引用    
  22. #22楼 akingbr[未注册用户]2006-12-09 00:35
    非常好啊!
      回复  引用    
  23. #23楼 matakk[未注册用户]2007-11-12 14:28
    感觉纸版多了很多内容,具体什么时候出?
    一定买!
      回复  引用    
  24. #24楼[楼主] lixiong      2007-11-12 17:23
    这个月末
      回复  引用  查看    
  25. #25楼 matakk[未注册用户]2007-11-13 10:36
    Windbg 有没有处理 字符串的函数 比如去掉末尾的 '\',
    现在我只看到 spat,scmp这几个啊。
      回复  引用    
  26. #26楼[楼主] lixiong      2007-11-13 13:37
    你自己可以写windbg extention来扩展windbg的命令和功能的
      回复  引用  查看    
  27. #27楼 elberlee[未注册用户]2008-02-16 17:05
    @lixiong
    非常感谢~:)
      回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 475520




相关文章:

相关链接: