前言和简介


本文介绍什么?


 


这是一篇介绍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,都可以找到这些知识点的具体说明。同时,很多知识点会在第二章来说明。


 


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


 


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


 


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


 


您的反馈和最新动态:


 

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

Comments (1)

  1. English Introduction about the paper and the blog.

    欢迎访问。本blog是 《Windows用户态程序高效排错》文章的发布,反馈站点。关于文章的介绍和相关信息,请参考下面对应链接:…

Skip to main content