windbg
线程堆栈是如何增长的      摘要: 技术深了可以再深,从C++编译器到CRT运行库, 再到操作系统, 从用户态到内核和驱动, 最后到硬件, 原理背后还有原理, 真正能掌握所有细节的又有几人呢?  阅读全文
posted @ 2014-10-12 22:03 Richard Wei 阅读(5400) | 评论 (3)  编辑
记一个界面刷新相关的Bug      摘要: 计算机的好处是它永远不会欺骗你, 它只会按部就班的执行, 所以很多看似奇怪(甚至看似不可思议的问题), 只要你理解了程序背后的机制原理,都是可以找出根本原因的。  阅读全文
posted @ 2014-05-30 23:18 Richard Wei 阅读(2633) | 评论 (2)  编辑
如何开发自己的调试器      摘要: 对系统原理和程序运行过程的理解,会熟练使用调试器是一个层次,能单独开发调试器又是另外一个层次。
下面是一个不错的系列,告诉你如何自己开发一款微型调试器  阅读全文
posted @ 2013-03-12 10:28 Richard Wei 阅读(1893) | 评论 (0)  编辑
基于WinDbg的内存泄漏分析      摘要: 通过WinDbg结合AppVerifier, 我们可以详细的跟踪堆中new出来的每一块内存。 很多时候在没有源代码的Release版本中,在程序运行一段时间后,如果我们发现有大内存或是大量同样大小的小内存一直没有释放, 我们就可以用上面的方法进行分析和快速的定位问题。  阅读全文
posted @ 2013-02-27 14:35 Richard Wei 阅读(18464) | 评论 (10)  编辑
理解程序内存      摘要: 通过上面的介绍,相信大家对程序内存有了比较全局的理解,以后大家分析问题,遇到一个地址,首先要判断这个地址分布在哪里:
如果是Image上,那么是在哪个模块中,这个地址是属于该模块的代码段(.text)还是数据段(.data),如果是代码段,又是属于哪个函数?
如果是Heap上,那么究竟是在哪个堆里面,是我们new出来的吗,是在什么时候new的(new时堆栈状况)?
如果是在Stack上,那么究竟是属于哪个线程的堆栈,当时线程的堆栈是怎么样?

总之,程序在内存中运行,只有你真正理解了内存,你才能真正懂计算机。  阅读全文
posted @ 2012-09-19 23:24 Richard Wei 阅读(6754) | 评论 (6)  编辑
如何学习WindDbg      摘要: 做为一名Windows平台上的C/C++开发人员,我们有N个理由学习WinDbg的使用:
有些Bug只有在客户和QA的机器上才能重现,我们不可能在他们的机器上装一个VC吧
WinDbg可以让我们方便的保存和分析Dump文件
WinDbg的调试功能比VC强大的多,比如它有强大的API断点和条件断点
调试内核和驱动,我们只能用WinDbg
用WinDbg可以让你更深入的理解系统,理解计算机,用VC你看到的是自己的代码,用WinDbg你看到的是整个进程
......
最重要的,微软用WinDbg开发和调试Windows操作系统,它是Windows平台上最重要的调试工具.  阅读全文
posted @ 2012-08-15 14:12 Richard Wei 阅读(4399) | 评论 (6)  编辑
跨模块传参数的教训      摘要: 今天遇到一个比较奇怪的crash问题,这里记录下。这个crash是由QA设置了一些不合理的参数引起的,还好QA当时保存了Dump文件,让我们可以慢慢分析,从而找出代码中隐藏的问题。  阅读全文
posted @ 2012-07-13 21:27 Richard Wei 阅读(3754) | 评论 (4)  编辑
用Windbg解决一个Bug      摘要: 可以看到无论对于开发还是测试人员,windbg很多时候可以帮我们快速的定位问题, 如果借助符号文件,Windbg完全可以实现比VC IDE更强大的调试供功能, 并且有时候我们不需要源代码,不需要重新编译,直接就可以通过windbg调试和解决问题。  阅读全文
posted @ 2012-06-26 20:33 Richard Wei 阅读(3582) | 评论 (3)  编辑
Windbg实用手册      摘要: Windbg的命令分为标准命令,原命令和扩展命令,输入问号(?)可以显示所有的标准命令的帮助信息; 元命令以一个点(.)开始,输入.help可以显示所有的原命令的帮助信息;扩展命令以叹号(!)开始  阅读全文
posted @ 2012-06-07 19:07 Richard Wei 阅读(22822) | 评论 (1)  编辑