好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用Windbg和Visual Studio高效调试

使用Windbg和Visual Studio高效调试

扬长避短使用 Windbg 和 Visual Studio 高效调试调试你的代码

经常被问及这样的问题:

你为什么非要使用 Windbg 调试你的程序?

记得有一次面试的时候笔者也被问到这样的问题,我的回答是:不是我非要使用 Windbg,  只是在不同的情况下使用不同的工具会更加方便而高效。

那么这两者到底有什么区别?在什么情况下用什么工具会更方便呢?

所谓尺有所短,寸有所长,那么笔者就总结一下在什么情况下用什么工具会更方便,可能不是 100% 的全面,但是应该可以说明一定的问题,希望给初学者以指引。

Case 1:

分析 .dmp 文件的时候,可以使用 Windbg 和 Visual Studio ,但是 windbg 更高效, .dmp 文件是发生问题时的进程转储文件, windbg 集成了一系列的基本命令和扩展命令,一句话,只要是 .dmp 文件里面有的,你都可以很快的得到。

Case 2 :

问题没有办法重现,就是说测试人员并不知道问题是怎么跑出来的,或者代码跑了几个月,跑出来一个问题,没有办法调试,只能抓一个 .dmp 文件,然后就回到了 Case 1.

Case 3:

内核调试,包括驱动,系统代码,他们本身是运行在内核级的,而我们的程序运行在用户态,如果希望调试这部分代码, Visual Studio 似乎有些力不从心,这个时候就是 windbg 发挥的时候了。

Case 4 :

调试多线程死锁问题,用 windbg 很容易分析出来那个线程占用了那个锁。

Case 5 :

分布式, RPC 调用,利用 Visual Studio 看那个组件调用哪个组件很不方便,而是用 windbg 却是一目了然。

Case 6 :

内存破坏问题, Visual Studio 如果想查看内粗破坏问题简直比登天还难,除非破坏完了马上 crash ,但是大部分的情况是内存破坏了,但是并不来表现出来,包括对破坏,栈破坏, windbg 几个命令就可以轻松搞定。

Case 7 :

内存泄漏问题,结合 umdh, leakdiag 这两个工具,再加上 windbg 的内存分析,可以说没有查不出来的内存泄漏。

注意: Windbg 调试 .Net 代码需要 SOS 扩展 ..

总结

首先需要说明的是本文的目的并不是说 Visual Studio 和 Windbg 这两个工具哪个好哪个差,只是说在不同的场合不同的工具可能更加高效,请大家不要误解。另外 Visual Studio 绝对是 Windows 开发的利器 ,  在大多数 Windows 代码开发,调试方面具有不可替代的作用,如果说 Visual Studio 是利器,那么 Windbg 绝对是个神器,在一些极端的场合绝对可以独当一面。本文并没有罗列所有的 cases, 如果大家有什么好的建议可以提出来,如果有必要的话,我会继续补充更多的 cases.  待续 ..    

 

分类:  C++ ,  原创文章

标签:  windbg

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于使用Windbg和Visual Studio高效调试的详细内容...

  阅读:60次