windbg

来源:互联网 发布:js根据name获取元素 编辑:程序博客网 时间:2024/04/30 08:54

记得几年前我们公司对一款核心产品进行升级,测试人员发现了一个会导致整个程序崩溃的BUG。这个BUG在程序的运行过程中随机出现,很难重现。更为棘手的是,当开发人员用VC以调试模式运行该程序,BUG就再也不重现了。根据以往的经验,这种情况多和多线程处理导致缓冲区非法操作有关,调试器引起的“海森堡效应”则会导致程序在这种情况下可能无法重现BUG。开发人员之前常用的LOG定位法在多线程程序中也显得力不从心,线程的交错运行使得LOG根本无法在程序崩溃的时候定位到正确的位置。当时已经是产品发布的前夜,重新检查可疑的相关代码已经不可能了,工作量太大,时间不够用。于是我们只好试图改变调试手段来解决问题。当我们尝试了一种可行的调试方法后,BUG迎刃而解,从定位到代码修复完成总共花了不到十分钟。方法很简单:当程序崩溃的时候,对程序进程附加上调试器,根据调用堆栈分析可能引发缓冲区问题的位置,然后通过在源码中对应的位置加上“__asm int3”语句使程序可以在运行时激发调试器,继而对将要引发异常的内存区域设置读写断点,在激发断点后终于顺藤摸瓜找到了罪魁祸首。而在此之前我们已经在门外摸黑乱撞了两个小时!

    正确可行的调试技巧在软件开发中是如此重要,奇怪的是这个事实在多数开发者那里并未引起足够的重视,也许是“Debug”更多时候是和“Reverse Engineering”这个神秘的名词画上等号而显得有些高深莫测,使得一般的开发人员和初学者望而生畏踟蹰不前。前几天收到了机械工业出版社出版的一本《Windows高级调试》,原以为是给分析人员使用的工具用书,仔细翻阅了几章,却发现并非如此。这本书更多的是面向一般的开发人员和测试人员。书中通过融入一个个实际例子当中的调试过程和技巧,由浅入深的讲解操作系统的内部运行机制和调试的基本原理。深入阅读,你会发现Debug不再是hacker 手中的“奇技淫巧”,而是软件开发过程中的有力工具。对于有经验的分析人员,这本书同样值得一读。相信书内清晰的描述和深入的分析能够印证你对操作系统底层构架的理解,在调试技术上给予启发。

原创粉丝点击