【文章摘要】
内存溢出有时像“魔鬼”一样缠绕着我们的程序,用一般的方法不易驱除。主要难点是搜查“魔鬼”的藏身之处。这时,我们可以请来WinDbg(Debugging Tools for Windows)这个“钟馗”来“找一找,抓一抓”。利用WinDbg工具包(包括与之配套的sos.dll成员等)丰富的命令可以用多种方式查看非常之细的内存块内容。以助我们找到问题的“元凶”。
【关键词】
内存溢出 WinDbg 跟踪调试
一、前言
对程序进行“内存溢出”的故障诊断时,可采取两种方法:(一)在程序运行期间,以hang 的方式附加到进程序上,在线分析。但这个方式将致使进程暂停,所以作为生产环境,时间不可能太长。可替代的方式是Dump几个内存映象文件,然后作对比分析。(二)“内存溢出”一般最终会导致程序的DOWN掉。但其它许多原因也会有这个结果。所以,为了确认DOWN掉的原因,这第二种方法就是将WinDbg以crash的方式附加到运行的进程上,这不会使进程暂停,直到它被KILL掉。然后分析其产生的Dump文件。近段时间,对某局点EasyB接口机“内存溢出”的故障跟踪分析就是按这两种方式进行的,对其抓取的Dump文件初步分析,基本确定了“元凶”的大致范围,下一步将结合代码进行故障的排除。由于在公司内部无法复现其DOWN掉的情形,因此在现场将WinDbg附加到了其进程上,如果其DOWN掉,我们就会对其原因更加确切。