﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-农妇，山泉，有点儿田-随笔分类-Debug</title><link>http://www.cppblog.com/deadpunk/category/4493.html</link><description>我没有技术</description><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 19:23:07 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 19:23:07 GMT</pubDate><ttl>60</ttl><item><title>(转载)WinDBG(CDB)实践1-新手指南 </title><link>http://www.cppblog.com/deadpunk/archive/2007/06/12/26188.html</link><dc:creator>活着就是折腾，所以当然要骠悍的折腾</dc:creator><author>活着就是折腾，所以当然要骠悍的折腾</author><pubDate>Tue, 12 Jun 2007 09:29:00 GMT</pubDate><guid>http://www.cppblog.com/deadpunk/archive/2007/06/12/26188.html</guid><wfw:comment>http://www.cppblog.com/deadpunk/comments/26188.html</wfw:comment><comments>http://www.cppblog.com/deadpunk/archive/2007/06/12/26188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/deadpunk/comments/commentRss/26188.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/deadpunk/services/trackbacks/26188.html</trackback:ping><description><![CDATA[原文地址：<a href="http://www.cppblog.com/sandy/archive/2007/03/13/19723.html">http://www.cppblog.com/sandy/archive/2007/03/13/19723.html</a><br><font color=#ff0000>Step1</font> <br>下载最新的Debugging Tools for windows <a href="http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx"><font color=#1d58d1>http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx</font></a><br>最新版本是6.6.7.5 <a href="http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.6.07.5.exe"><font color=#1d58d1>http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.6.07.5.exe</font></a><br>(BTW,如果使用老版本可能出现"The call to LoadLibrary(ext) failed, Win32 error 127. The specified procedure could not be found."这样的错误信息)<br><br><font color=#ff0000>Step2<br></font>设置好symbol server的环境变量<br>Set _NT_SYMBOL_PATH=srv*c:\symbols*http://msdl.microsoft.com/download/symbols<br>创建好c:\symbols目录<br>(BTW,如果要设置http代理set _NT_SYMBOL_PROXY=proxy_server:port)<br><br><font color=#ff0000>Step3<br></font>把WinDBG(CDB)安装路径加到path中(默认是C:\Program Files\Debugging Tools for Windows)<br>设置CDB为默认的JIT debugger<br><font style="BACKGROUND-COLOR: #000000" color=#ffffff>C:\&gt;cdb -iae<br></font><br><font color=#ff0000>Step4</font><br>使用vc6创建一个控制台程序Crash，主程序为crash.cpp<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">//</span><span style="COLOR: #000000">&nbsp;Crash.cpp&nbsp;:&nbsp;Defines&nbsp;the&nbsp;entry&nbsp;point&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;the&nbsp;console&nbsp;application.<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #000000">//</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">stdafx.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;World!%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,i);<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<p>可以看到该程序就第九行有一个错误,%s应该写成%d<br><br><font color=#ff0000>Step 5<br></font>编译生成release版本(这里我主要针对Release程序)<br>注意设置<br><img height=446 alt=crash1.jpg src="http://www.cppblog.com/images/cppblog_com/sandy/crash1.jpg" width=677 border=0><br><br><br><img height=446 alt=crash2.jpg src="http://www.cppblog.com/images/cppblog_com/sandy/crash2.jpg" width=677 border=0><br><br>最后会生成Crash.exe和Crash.pdb和其他一些中间文件<br><br><font color=#ff0000>Step 6<br></font>运行Release版本的crash.exe会出现crash,这时CDB会自动attach到该进程，开始调试<br>出现如下画面<br><br><font style="BACKGROUND-COLOR: #000000" color=#ffffff>Hello World!(null)</font></p>
<p><font style="BACKGROUND-COLOR: #000000" color=#ffffff>Microsoft (R) Windows Debugger&nbsp; Version 6.6.0007.5<br>Copyright (c) Microsoft Corporation. All rights reserved.<br></font><font style="BACKGROUND-COLOR: #000000" color=#ffffff>*** wait with pending attach&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols<br></font><font style="BACKGROUND-COLOR: #000000" color=#ffffff>Executable search path is:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>ModLoad: 00400000 0040c000&nbsp;&nbsp; D:\Test\Crash\Release\Crash.exe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>ModLoad: 77f80000 77ffc000&nbsp;&nbsp; C:\WINNT\system32\ntdll.dll&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br>ModLoad: 7c570000 7c624000&nbsp;&nbsp; C:\WINNT\system32\KERNEL32.dll&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <br>(e04.f18): Access violation - code c0000005 (!!! second chance !!!)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>eax=00000001 ebx=7ffdf073 ecx=00000001 edx=7fffffff esi=7ffffffe edi=00000800<br>eip=004016dd esp=0012fcf8 ebp=0012ff50 iopl=0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nv up ei pl nz na pe nc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>cs=001b&nbsp; ss=0023&nbsp; ds=0023&nbsp; es=0023&nbsp; fs=0038&nbsp; gs=0000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; efl=00000206&nbsp;&nbsp;&nbsp; <br>*** WARNING: Unable to verify checksum for D:\Test\Crash\Release\Crash.exe&nbsp;&nbsp;&nbsp;&nbsp; <br>Crash!_output+0x49a:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>004016dd 803800&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp; byte ptr [eax],0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds:0023:00000001=??&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>0:000&gt;<br></font><br>输入.lines load source code information<br>输入k命令查看堆栈<br><br>0:000&gt; .lines<br>Line number information will be loaded<br>0:000&gt; k<br>ChildEBP RetAddr<br>0012ff50 0040103f Crash!_output+0x49a<br>0012ff70 0040100e Crash!printf+0x1f<br><strong>0012ff80 00401105 Crash!main+0xe [D:\Test\Crash\Crash.cpp @ 9]<br></strong>0012ffc0 7c5989a5 Crash!mainCRTStartup+0xb4<br>0012fff0 00000000 KERNEL32!BaseProcessStart+0x3d<br><br>可以发现程序在Crash.cpp第9行crash<br><br>输入q命令退出cdb,结束调试。<br></p>
<img src ="http://www.cppblog.com/deadpunk/aggbug/26188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/deadpunk/" target="_blank">活着就是折腾，所以当然要骠悍的折腾</a> 2007-06-12 17:29 <a href="http://www.cppblog.com/deadpunk/archive/2007/06/12/26188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>