﻿<?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>IT博客网-NetRoc's Blog-文章分类-WinDbg文档翻译</title><link>http://www.cnitblog.com/cc682/category/7188.html</link><description>N-Tech</description><language>zh-cn</language><lastBuildDate>Sun, 04 May 2008 09:20:27 GMT</lastBuildDate><pubDate>Sun, 04 May 2008 09:20:27 GMT</pubDate><ttl>60</ttl><item><title>WinDbg 文档翻译----3</title><link>http://www.cnitblog.com/cc682/articles/43274.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Sun, 04 May 2008 07:23:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43274.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43274.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43274.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43274.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43274.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>cc682/NetRoc</span></p>
<p><span><a href="http://netroc682.spaces.live.com/">http://netroc682.spaces.live.com/</a></span></p>
<p><strong><span>调试器</span></strong></p>
<p><span>本节包含以下内容：</span></p>
<p><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_7f2dc201-58f4-4b37-898a-35415dd16293.xml.htm"><span><span>工具包中的调试器</span></span></a></span></p>
<p><u><span>安装和设置</span></u><span> </span></p>
<p><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r05_use_start_2a697bbe-caeb-49e4-ad14-ce07699d630b.xml.htm"><span><span>调试器操作</span></span></a></span></p>
<p><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r09_symbols_750b8c7c-1e41-4116-b7d3-ecd4c7fe42ce.xml.htm"><span><span>调试符号</span></span></a></span></p>
<p><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r10_dump_files_fba942f0-e0f2-4644-9426-95ad5bca7c9a.xml.htm"><span><span>崩溃转储文件</span></span></a></span></p>
<p><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r11_security_68eda837-cdc2-48f8-b4c7-bba52627990b.xml.htm"><span><span>安全事项</span></span></a></span></p>
<p><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r12_cmdline_43acc7c9-1f79-4710-a2be-dbfd828286ee.xml.htm"><span><span>调试器参考</span></span></a></span></p>
<p><a name=r01_intro_7f2dc201-58f4-4b37-898a-35415d></a><strong><span>工具包中的调试器</span></strong></p>
<p><span>本文档描述<span>4</span>款<span>Microsoft</span>调试器的工作方式：</span></p>
<p><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml.htm"><span>CDB </span><span><span>和 NTSD</span></span></a></span></p>
<p><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_ad867058-949b-4093-abf6-c4363257a83d.xml.htm"><span>KD</span></a></span></p>
<p><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_eae4d594-1986-49f9-b8b1-87f7eeb0d513.xml.htm"><span>WinDbg</span></a></span></p>
<p><span>查看工具包中的完整列表以及他们的文档，参见</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/toc_debuggers_a3feedd0-1691-4c43-bdaa-992355a82b05.xml.htm"><span><span>工具列表和文档</span></span></a></span><span>。</span></p>
<p><span>CDN</span><span>、<span>NTSD</span>和<span>WinDbg</span>可以在<span>Microsoft Windows 95</span>、<span>Windows 98</span>、何<span>Windows Millennium Edition</span>上进行用户模式调试。但是，安装需要一些额外的步骤，并且功能上会有限制；查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r04_setup_3_e338a677-3b6c-4b59-8370-3887b8a15d7f.xml.htm"><span>Windows&nbsp;95, 98, </span><span><span>和 Millennium</span></span></a></span><span>获得更多信息。要在这些操作系统上进行内核模式调试，需要使用<span>WDeb</span>系列调试器<span>(</span>例如，<em><span>wdeb386.exe</span></em><span>)</span>，或者<span>Microsoft Windows System Debugger(<em>debugger.exe</em>)</span>。查看<span>Windows Millennuim DDK</span>获得关于这些工具的更多信息。 </span></p>
<p><span>Microsoft Visual Studio</span><span>调试器也可以在所有<span>Windows</span>系统上进行用户模式调试。可以查看<span>Visual Studio</span>的文档获得关于这些调试器的详细资料。</span></p>
<p><a name=r01_intro_d33cdade-c8d0-4a93-a626-d19ffa></a><strong><span>CDB </span></strong><strong><span>和<span> NTSD</span></span></strong></p>
<p><span>CDB</span><span>和<span>NTSD</span>是可以用来调试用户模式程序的命令行工具。除了启动的方式之外，这两个工具基本上是一样的。</span></p>
<p><span>本文档将使用&#8220;<span>CDB</span>&#8221;来同时提及<span>CDB</span>和<span>NTSD</span>。<em>除非专门注明，否则所有提到<span>CDB</span>的地方，同样适用于<span>NTSD</span>。</em>只有极少数技术是只能在<span>CDB</span>上工作或者只在<span>NTSD</span>上工作的。这些不同点都会在适当的地方指明。</span></p>
<p><a name=f5cad0b2-b5ab-4d3d-a4ce-9d29bc7957df></a><strong><span>CDB</span></strong></p>
<p><span>Microsoft</span><span>控制台调试器<span>(Microsoft Console Debugger (CDB))</span>是基于控制台字符界面的程序，它可以对<span>Windows</span>用户模式的内存和结构进行低层次分析。</span></p>
<p><span>CDB</span><span>在用于调试正在运行的或者刚刚崩溃的程序时<span>(&#8220;live analysis&#8221;)</span>非常强大，但是很容易配置。它可以用于研究正在运行的程序行为。在应用程序出错的情况下，<span>CDB</span>可以用于获得调用堆栈，或者查看有问题的参数。由于是基于字符界面，它能够很好的支持网络访问<span>(</span>使用远程访问服务器<span>)</span>。</span></p>
<p><span>使用<span>CDB</span>，可以显示和执行程序代码，设置<u><span>断点</span></u>，查看或者改变内存的值。<span>CDB</span>可以通过&#8220;反汇编&#8221;分析二进制代码并显示汇编代码，也可以直接分析源代码。</span></p>
<p><span>由于<span>CDB</span>能通过地址或者全局符号访问内存地址，你可以通过名字而不是地址来访问内存，这使得定位和调试特定的代码变的容易。也可以显示反汇编的机器码。<span>CDB</span>支持调试多个线程和进程。它是可扩展的，并能够读写分页和非分页内存。</span></p>
<p><span>如果目标应用程序本身也是控制台程序，目标和<span>CDB</span>将共用一个控制台。如果想和目标程序分开使用控制台，可以使用<strong><span>-2</span></strong><span> </span></span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r12_cmdline_3ec269e8-a2d8-43e4-8758-2201481cd323.xml.htm"><span>command-line option</span></a></span><span>选项。</span></p>
<p><a name=f7997e21-d84a-4224-af71-bc393265af91></a><strong><span>NTSD</span></strong></p>
<p><span>Microsoft NT Symbolic Debugger (NTSD)</span><span>是<span>CDB</span>调试器的变种。启动的时候，<span>NTSD</span>会创建一个新的文本窗口，而<span>CDB</span>继承原有的命令行窗口，除此之外，他们没有任何区别。</span></p>
<p><span>和<span>CDB</span>一样，<span>NTSD</span>完全支持控制台程序和<span>Windows</span>程序。（命名为&#8220;控制台调试器&#8221;，是为了指明<span>CDB</span>是一个控制台程序，而非指目标程序必须是控制台程序。）</span></p>
<p><span>使用 <strong><span>start</span></strong><span> </span>命令也可分离出来新的控制台窗口，所以下面两种格式的命令会有相同效果：</span></p>
<p><strong><span>start&nbsp;cdb&nbsp;</span></strong><em><span>parameters</span></em><span>&nbsp;<br><strong>ntsd&nbsp;</strong><em>parameters</em>&nbsp;<br><br><br></span></p>
<p><strong><em><span>System32</span></em></strong><strong><span> </span></strong><strong><span>目录下的<span>NTSD</span></span></strong></p>
<p><span>鉴于<span>CDB</span>只是<span>Windows</span>调试工具包的一部分，而<span>NTSD</span>同时包含在工具包和<span>Windows</span>系统中。所以在<span>Windows</span>的<em><span>system32</span></em>目录下可以找到<span>NTSD</span>。</span></p>
<p><span>如果准备使用在<em><span>system32</span></em>目录下的<span>NTSD</span>，有两个重要的地方需要注意：</span></p>
<ul type=disc>
    <li><span>该版本<span>NTSD</span>不支持<u><span>通过调试器的远程调试</span></u></span></li>
    <li><span>该版本的<span>NTSD</span>可能和当前文档中描述的版本不同。 </span></li>
</ul>
<p><span>为了避免这些问题，建议只使用<span>Windows</span>调试工具包中的<span>NTSD</span>和<span>CDB</span>。</span></p>
<p><strong><span>用内核调试器控制<span>CDB</span>或者<span>NTSD</span></span></strong></p>
<p><span>CDB</span><span>和<span>NTSD</span>的输入输出能够被重定向，所以可以通过内核调试器进行控制<span>(KD</span>或者<span>WinDbg)</span>。</span></p>
<p><span>这项技术如果用在<span>CDB</span>上，<span>CDB</span>的窗口将会出现，但是不能进行输入输出。如果使用在<span>NTSD</span>上，则不会有控制台窗口出现。</span></p>
<p><span>从内核调试器控制<span>NTSD</span>是非常有用的，因为它是一个非常轻量级的调试器，在运行目标程序的机器上，它几乎不会增加任何额外开销。这种结合可用于调试系统进程、关机、或者系统刚刚启动之后的情况。查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r05_use_start_9fcf66d7-d72a-4b94-a1e6-e65a95e688f7.xml.htm"><span><span>使用内核调试器控制用户态调试器</span></span></a></span><span> </span><span>获得更详细的信息。</span></p>
<p><a name=r01_intro_ad867058-949b-4093-abf6-c43632></a><strong><span>KD</span></strong></p>
<p><span>Microsoft Kernel Debugger (KD) </span><span>是一款基于字符界面的控制台程序，可以在所有<span>NT</span>内核操作系统上对在</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/dbg_glossary_25516462-f653-424b-9a0c-f6d3ca1bb457.xml.htm#c2dfd7a9-249b-4018-9789-2b3d6268346b"><span><span>内核模式</span></span></a></span><span>下的活动进行深度分析。</span></p>
<p><span>KD</span><span>可用于调试内核模式程序和驱动程序，或者监控系统本身的行为。<span>KD</span>支持多处理器的调试。</span></p>
<p><span>一般来说，<span>KD</span>并不运行在被调试的机器上。内核模式调试一般需要两台机器（</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/dbg_glossary_bfdf5d47-fd1c-482c-be33-c4a04d766043.xml.htm#77205ddc-d81d-483c-ab52-47eb6d613eac"><span><span>主控机</span></span></a></span><span> </span><span>和 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/dbg_glossary_4146d166-2a62-4d54-90b7-5cdadb272bf0.xml.htm#592a23b6-7f7d-434c-b4f6-5e1470b41393"><span><span>目标机</span></span></a></span><span>）。</span></p>
<p><span>大多数<span>KD</span>的命令不能像在</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml.htm"><span>CDB</span></a></span><span>, </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml.htm#f7997e21-d84a-4224-af71-bc393265af91"><span>NTSD</span></a></span><span>, </span><span>和 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_eae4d594-1986-49f9-b8b1-87f7eeb0d513.xml.htm"><span>WinDbg</span></a></span><span>中一样针对特定进程或者线程。</span></p>
<p><strong><span>调试不同平台的目标机</span></strong></p>
<p><span>KD</span><span>可以支持调试基于<span>x86</span>、<span>Itanium</span>或者<span>x64</span>平台的目标机。</span></p>
<p><span>调试器可以自动检测目标运行的机器平台，所以不需要在<span>KD</span>的命令行中指定了。旧的名字<span>(</span>使用<span>I386KD</span>或者<span>IA64KD</span>的名字<span>)</span>不再使用。</span></p>
<p><a name=r01_intro_eae4d594-1986-49f9-b8b1-87f7ee></a><strong><span>WinDbg</span></strong></p>
<p><span>Microsoft Windows Debugger (WinDbg) </span><span>是一款强大的基于窗口的调试工具。它可以进行</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/dbg_glossary_fa191f80-14a9-47a0-bf4a-13d29c85162b.xml.htm#1a7518e7-05c9-4be8-baf0-63b4024f4e30"><span><span>用户模式</span></span></a></span><span> </span><span>和 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/dbg_glossary_25516462-f653-424b-9a0c-f6d3ca1bb457.xml.htm#714fb29e-5a07-45f9-99e8-e3f319e69c2f"><span><span>内核模式</span></span></a></span><span> </span><span>调试。</span></p>
<p><span>WinDbg</span><span>支持完全的针对<span>Windows</span>内核、内核模式驱动、系统服务、以及用户模式应用程序和驱动的源码级调试。</span></p>
<p><span>WinDbg</span><span>在进行源码级调试时，使用<span>Microsoft Visual Studio</span>调试符号格式。它可以访问具有<span>PDB</span>文件的模块的所有</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/dbg_glossary_5048ec26-b9ce-44eb-afe2-ebb3e1c9e47d.xml.htm#986a5629-886b-417b-a52e-7352511b0e35"><span><span>符号</span></span></a></span><span>和变量，以及任何通过<span>COFF</span>格式符号文件<span>(</span>例如<span>Windows <em>.dbg</em></span>文件<span>)</span>暴露出来的公开的函数名。</span></p>
<p><span>WinDbg</span><span>可以查看源代码、设置断点、查看变量<span>(</span>包含<span>C++</span>对象<span>)</span>、查看调用堆栈及内存。用户可以通过它的调试器命令窗口适用大量的命令。</span></p>
<p><span>要支持内核调试，<span>WinDbg</span>需要两台机器<span>(</span></span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/dbg_glossary_bfdf5d47-fd1c-482c-be33-c4a04d766043.xml.htm#77205ddc-d81d-483c-ab52-47eb6d613eac"><span><span>主控机</span></span></a></span><span> </span><span>和 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/dbg_glossary_4146d166-2a62-4d54-90b7-5cdadb272bf0.xml.htm#592a23b6-7f7d-434c-b4f6-5e1470b41393"><span><span>目标机</span></span></a></span><span>)</span><span>。内核调试只被基于<span>NT</span>内核的<span>Windows</span>系统支持。</span></p>
<p><span>WinDbg</span><span>同样支持各种用户模式和内核模式目标的远程调试选项。</span></p>
<p><span>WinDbg</span><span>可以看作图形界面的</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml.htm"><span>CDB</span></a></span><span>&nbsp;/&nbsp;</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml.htm#f7997e21-d84a-4224-af71-bc393265af91"><span>NTSD</span></a></span><span> </span><span>或者 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_ad867058-949b-4093-abf6-c4363257a83d.xml.htm"><span>KD</span></a></span><span>。</span></p>
<img src ="http://www.cnitblog.com/cc682/aggbug/43274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc/cc682</a> 2008-05-04 15:23 <a href="http://www.cnitblog.com/cc682/articles/43274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----2</title><link>http://www.cnitblog.com/cc682/articles/43273.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Sun, 04 May 2008 07:22:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43273.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43273.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43273.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43273.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43273.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>cc682/NetRoc</span></p>
<p><a name=TOC_Debuggers_a3feedd0-1691-4c43-bdaa-99></a><strong><span>工具和文档列表</span></strong></p>
<p><span>Microsoft Windows</span><span>调试工具包包含了许多调试器和其它工具。它们中的部分在本文档中进行了说明，在其它地方有对另外部分的说明。下面的列表简要说明了每个工具以及在什么地方能够找到和它相关的说明。</span></p>
<p><strong><span>调试器</span></strong></p>
<p><span>Windows</span><span>调试工具包包含以下一些调试器。对它们的说明贯穿整个文档，它们将被使用各自的名称来引用，或者被统称为&#8220;调试器&#8221;：</span></p>
<p><span>WinDbg&nbsp;&nbsp;(<em>windbg.exe</em>) </span></p>
<p><span>拥有图形界面的用户模式<span>/</span>内核模式调试器。 </span></p>
<p><span>KD&nbsp;&nbsp;(<em>kd.exe</em>) </span></p>
<p><span>内核模式的命令行调试器。 </span></p>
<p><span>CDB&nbsp;&nbsp;(<em>cdb.exe</em>) </span></p>
<p><span>用户模式的命令行调试器。</span></p>
<p><span>NTSD&nbsp;&nbsp;(<em>ntsd.exe</em>) </span></p>
<p><span>用户模式的命令行调试器。<span>CDB</span>和<span>NTSD</span>实质上是一样的。在这组文档中，所有提及&#8220;<span>CDB</span>&#8221;的地方，同时适用于<span>CDB</span>和<span>NTSD </span>。这两个调试器的所有不同点都会单独注明。<span> (</span>查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml.htm"><span>CDB</span></a></span><span> </span><span>和 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml.htm#f7997e21-d84a-4224-af71-bc393265af91"><span>NTSD</span></a></span><span> </span><span>获取更多信息。<span>) </span></span></p>
<p><strong><span>其他工具和公用组件</span></strong></p>
<p><span>Windows</span><span>调试工具包还包含以下的工具和公用组件：</span></p>
<p><span>Logger&nbsp;&nbsp;(<em>logger.exe</em> </span><em><span>和 <span>logexts.dll</span></span></em><span>) </span></p>
<p><span>用于记录程序的函数调用和其他操作，有一个工具和一个扩展<span>dll</span>。在本文档中包含<span>Logger</span>的说明；查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/logger+logviewer_04a62565-7398-4aa3-b6bb-46caea421b75.xml.htm"><span>Logger and LogViewer</span></a></span><span>。</span></p>
<p><span>LogViewer&nbsp;&nbsp;(<em>logviewer.exe</em>) </span></p>
<p><span>用于查看<span>Logger</span>记录下来的日志的工具。本文档中包含对<span>LogViewer</span>的说明。查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/logger+logviewer_04a62565-7398-4aa3-b6bb-46caea421b75.xml.htm"><span>Logger and LogViewer</span></a></span><span>。</span></p>
<p><span>ADPlus&nbsp;&nbsp;(Autodump+, <em>adplus.vbs</em>) </span></p>
<p><span>基于命令行的<span>Microsoft Visual Basic</span>脚本。可以为一个或多个进程自动创建内存转储（<span>memory dump</span>）文件和包含<span>Debug</span>输出的<span>log</span>文件。<span>ADPlus</span>在本文档中有描述；参见 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/adplus_72325de3-b07d-49a6-82b2-0ba6bb376416.xml.htm"><span>ADPlus</span></a></span><span>. </span></p>
<p><span>DbgRpc&nbsp;&nbsp;(<em>dbgrpc.exe</em>) </span></p>
<p><span>用于查看远程过程调用<span>(PRC)</span>的状态信息的工具。本文档中有对<span>DbgRpc</span>的说明。查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/t11_rpc_acpi_df2011c1-80e2-4ff6-83f6-340a17586c7f.xml.htm"><span>RPC Debugging</span></a></span><span> </span><span>和 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/t11_rpc_acpi_ffe18735-edab-4192-8bb2-17cbfc9a0ad7.xml.htm"><span>Using the DbgRpc Tool</span></a></span><span>. </span></p>
<p><span>KDbgCtrl&nbsp;&nbsp;(Kernel Debugging Control, <em>kdbgctrl.exe</em>) </span></p>
<p><span>用于控制和配置内核调试连接的工具。本文档中有对<span>KDbgCtrl</span>的说明；查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/bootini_eecafec5-45df-4944-8b73-c27a452f33db.xml.htm"><span>Using KDbgCtrl</span></a></span><span>. </span></p>
<p><span>SrcSrv&nbsp;&nbsp;(<em>srcsrv.dll</em>) </span></p>
<p><span>可以在调试中用于交付源文件的源代码服务器。本文档中有对<span>SrcSrv</span>的说明；查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r09_symbols_9f858c04-aa3a-4c3b-a747-45d9d46c3a62.xml.htm"><span>Using a Source Server</span></a></span><span>. </span></p>
<p><span>SymSrv&nbsp;&nbsp;(<em>symsrv.dll</em>) </span></p>
<p><span>调试器可以用来连接到符号存储<span>(symbol store)</span>的调试符号服务器<span>(symbol server)</span>。本文档中有对<span>SymSrv</span>的描述；查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r09_symbols_657d92f2-20a6-4ddb-8669-cd4e431bb668.xml.htm"><span>Using SymSrv</span></a></span><span>. </span></p>
<p><span>SymStore&nbsp;&nbsp;(<em>symstore.exe</em>) </span></p>
<p><span>用于创建符号存储<span>(symbol store)</span>的工具。<span>SymSrv</span>在本文档中包含说明；查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r09_symbols_d033164e-0b4c-4e3b-b534-b39437bc4d3b.xml.htm"><span>Using SymStore</span></a></span><span>. </span></p>
<p><span>AgeStore&nbsp;&nbsp;(<em>agestore.exe</em>) </span></p>
<p><span>被符号服务器或源码服务器用于清理符号信息缓存<span>(downstream store)</span>的工具。<span>AgeStore</span>在本文档中没有说明。可以使用<strong><span>agestore&nbsp;/?</span></strong><span> </span>命令查看该工具的帮助信息。</span></p>
<p><span>SymProxy </span></p>
<p><span>用于在网络中创建单独的<span>HTTP</span>符号服务器，以供你的所有调试器指向的工具。使用它有一个好处是可以使用单个符号路径<span>(symbol path)</span>指向多个符号服务器<span>(symbol server)(</span>包括外部的和内部的<span>)</span>，并且可以处理所有的认证、通过符号缓存加快访问速度。<span>SymProxy</span>在本文档中没有说明；详细的可以参考这个工具目录下的<em><span>symhttp.doc</span></em><span> </span>文件。</span></p>
<p><span>SymChk&nbsp;&nbsp;(Microsoft Symbol Checker, <em>symchk.exe</em>) </span></p>
<p><span>用于校验符号文件或从符号存储下载符号的工具。本文档中包含对<span>SymChk</span>的说明；查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/symchk_18847902-e7cf-485d-95aa-e8bdc590521a.xml.htm"><span>SymChk</span></a></span><span>. </span></p>
<p><span>DumpChk&nbsp;&nbsp;(Dump File Checking Utility, <em>dumpchk.exe</em>) </span></p>
<p><span>用于校验内存转储文件的工具。<span>DumpChk</span>在本文档中没有说明。使用<strong><span>dumpchk&nbsp;/?</span></strong><span> </span>命令查看该工具的帮助信息。</span></p>
<p><span>DbgSrv&nbsp;&nbsp;(<em>dbgsrv.exe</em>) </span></p>
<p><span>用于远程调试的进程服务器。本文档包含对<span>DbgSrv</span>的说明；查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r08_use_remote_0828c18f-b042-4288-9b58-a56e3076eb2e.xml.htm"><span>Process Servers (User Mode)</span></a></span><span>. </span></p>
<p><span>KdSrv&nbsp;&nbsp;(<em>kdsrv.exe</em>) </span></p>
<p><span>用于远程调试的内核调试连接服务器<span>(KD connection server)</span>。本文档包含对<span> KDSrv</span>的说明；查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r08_use_remote_da274d6a-0dd9-43db-98cf-5c84038694db.xml.htm"><span>KD Connection Servers (Kernel Mode)</span></a></span><span>. </span></p>
<p><span>DbEngPrx&nbsp;&nbsp;(<em>dbengprx.exe</em>) </span></p>
<p><span>用于远程调试的转发器<span>(</span>小型代理服务器<span>)</span>。本文档包含<span> DbgSrv </span>的说明；查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r08_use_remote_29b6f5a4-6e46-4699-afad-79f7953bf6a3.xml.htm"><span>Repeaters</span></a></span><span>. </span></p>
<p><span>远程工具<span>&nbsp;&nbsp;(<em>remote.exe</em>) </span></span></p>
<p><span>远程调试工具，用于远程操作任何命令行程序，包括<span>KD</span>、<span>CDB</span>和<span>NTSD</span>。本文档包含对远程工具的说明。查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/remote_bf30d515-f221-4419-bea3-294e559f66ed.xml.htm"><span>Remote Tool</span></a></span><span> </span><span>和 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r08_use_remote_73c4c537-42b6-451d-b928-2ec0a1357640.xml.htm"><span>Remote Debugging Through <em>Remote.exe</em></span></a></span><span>. </span></p>
<p><span>GFlags&nbsp;&nbsp;(</span><span>全局标志编辑器<span>, <em>gflags.exe</em>) </span></span></p>
<p><span>用于控制注册表键和其他设置的工具。<span>GFlags</span>在本文档中有说明。查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/gflags_ea035958-0ade-4e07-856e-cfd1ed0b4df0.xml.htm"><span>GFlags</span></a></span><span>. </span></p>
<p><span>进程终止工具<span>&nbsp;&nbsp;(<em>kill.exe</em>) </span></span></p>
<p><span>用于终止一个进程的工具。进程终止工具在本文档中有说明。查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/kill_38a95b7c-6e98-45d1-8e36-f162000791e2.xml.htm"><span>Kill Tool</span></a></span><span>. </span></p>
<p><span>断点工具<span>&nbsp;&nbsp;(<em>breakin.exe</em>) </span></span></p>
<p><span>用于在某个进程中制造一次用户模式中断的工具。本文档未包含<em><span>Breakin.exe</span></em><span> </span>说明。使用 <strong><span>breakin&nbsp;/?</span></strong><span> </span>命令查看它的帮助信息。</span></p>
<p><span>列表工具<span>&nbsp;&nbsp;(</span>文件列表实用程序<span>, <em>list.exe</em>) </span></span></p>
<p><em><span>List.exe</span></em><span> </span><span>在本文档中没有说明，使用<strong><span>list&nbsp;/?</span></strong><span> </span>命令查看它的帮助信息。</span></p>
<p><span>TList&nbsp;&nbsp;(</span><span>任务列表查看器<span>, <em>tlist.exe</em>) </span></span></p>
<p><span>用于列举所有正在运行的进程的工具。本文档中包含<span>TList</span>的说明；查看 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/tlist_d98fd688-471d-4855-aa5c-997719bd11c3.xml.htm"><span>TList</span></a></span><span>。</span></p>
<p><span>RTList&nbsp;&nbsp;(</span><span>远程任务列表查看器<span>, <em>rtlist.exe</em>) </span></span></p>
<p><span>通过<span>DbgSrv</span>进程服务器查看正在运行的进程的工具。<span>RTList</span>在本文档中没有说明。使用<strong><span>rtlist&nbsp;/?</span></strong><span> </span>命令查看该工具的帮助信息。</span></p>
<p><span>UMDH&nbsp;&nbsp;(</span><span>用户模式堆转储实用程序<span>, <em>umdh.exe</em>) </span></span></p>
<p><span>分析堆分配的工具。<span>UMDH</span>在本文档中有说明；参见 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/umdh_dad64a92-11c2-4bda-842a-ebfddd61ca41.xml.htm"><span>UMDH</span></a></span><span>。</span></p>
<p><span>如果你选择自定义安装<span>Windows</span>调试工具包，并且选择了安装<span>SDK</span>和它的子项目，所有用于购建调试器扩展的的库、头文件和示例程序都会被安装。</span></p>
<p><strong><span>文档</span></strong></p>
<p><span>"Debugging Tools for Windows"&nbsp;&nbsp;(<em>debugger.chm</em>) </span></p>
<p><span>这是你当前正在阅读的文档。这是<span>Windows</span>调试工具包的核心文档。 </span></p>
<p><span>"Debug Help Library"&nbsp;&nbsp;(<em>dbghelp.chm</em>) </span></p>
<p><span>这个文档描述了<span>DbgHelp API</span>和<span>ImageHlp API</span>，也说明了如何建立自己的符号服务器。<em>当你选择了自定义安装<span>Windows</span>调试工具包并选择了<span>SDK</span>和它的子项目时才会被安装。</em> </span></p>
<p><strong><span>Windows</span></strong><strong><span>调试工具包之外的调试工具</span></strong></p>
<p><span>下面一些相关工具不是<span>Windows</span>调试工具包的一部分：</span></p>
<p><span>Dr.&nbsp;Watson&nbsp;&nbsp;(<em>drwtsn32.exe</em>) </span></p>
<p><span>用于自动生成<span>Dump</span>文件并发送错误报告到微软在线崩溃分析（<span>Microsoft Online Crash Analysis (OCA)</span>）的工具。<span>Dr.&nbsp;Watson </span>在本文档中有部分说明；参见 </span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/drwatson_92d60a12-6577-4cd5-a02f-a1ea8204719a.xml.htm"><span>Dr. Watson</span></a></span><span>. Dr. Watson</span><span>的其他特性，可以参考和<em><span>drwtsn32.exe</span></em><span> </span>关联的帮助文件。 </span></p>
<p><span>Build utility&nbsp;&nbsp;(<em>build.exe</em>) </span></p>
<p><span>用于构建调试器扩展和其他程序的编译器和链接器。构建工具和它的文档可以在<span>Windows Driver Kit</span>，或者早前版本的<span>Windows DDK</span>中找到。 </span></p>
<p><span>BinPlace&nbsp;&nbsp;(<em>binplace.exe</em>) </span></p>
<p><span>用于控制产品构建中生成的符号文件的工具。<span>BinPlace</span>和它的文档可以在<span>Windows Driver Kit</span>，或者早前版本的<span>Windows DDK</span>中找到。</span></p>
<p><span>Application Verifier&nbsp;&nbsp;(<em>AppVerif.exe</em> </span><span>和 <strong><span>!avrf</span></strong><span>) </span></span></p>
<p><span>用于测试用户模式应用程序的工具。该工具由两部分组成：<em><span>AppVerif.exe</span></em><span> </span>实用程序和 <strong><span>!avrf</span></strong><span> </span>扩展命令。所有和调试相关的应用程序校验器都在本文档中有说明；查看</span><span><a href="javascript:hhobj_1.Click()"><span>Application Verifier</span></a></span><span>。其他和应用程序校验器特性，可以参考和<em><span>AppVerif.exe</span></em><span> </span>关联的帮助文档。 </span></p>
<img src ="http://www.cnitblog.com/cc682/aggbug/43273.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc/cc682</a> 2008-05-04 15:22 <a href="http://www.cnitblog.com/cc682/articles/43273.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 帮助文档翻译----1</title><link>http://www.cnitblog.com/cc682/articles/43272.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Sun, 04 May 2008 07:19:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43272.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43272.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43272.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43272.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43272.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>cc682/NetRoc</span></p>
<p><strong><span>Windows</span></strong><strong><span>调试工具</span></strong></p>
<table cellSpacing=0 cellPadding=0 border=0>
    <tbody>
        <tr>
            <td vAlign=top>
            <p>&#160;</p>
            <p>&nbsp;</p>
            <p>&#160;</p>
            </td>
            <td vAlign=top rowSpan=2>
            <p><strong><span>作用</span></strong><span><br><br></span><span>本版本的<span>Windows</span>调试工具文档描述了<span>4</span>种<span>Microsoft</span>调试器：<span>WinDbg</span>，<span>KD</span>，<span>CDB</span>，<span>NTSD</span>和其他调试工具。<span><br><br><strong>WinDbg, KD, CDB, </strong></span><strong>和<span> NTSD </span>调试器</strong><span><br><br></span>这几款调试器完全支持在基于<span>x86</span>、<span>Itanium</span>、<span>x64</span>的处理器上运行，并且可以在所有基于<span>NT</span>内核的<span>Windows</span>操作系统上运行。它们可以调试操作系统以及在操作系统上运行的应用程序、服务和驱动程序。基于<span>NT</span>内核的操作系统包括<span>:</span></span></p>
            <ul type=disc>
                <li><span>Windows&nbsp;Vista </span></li>
                <li><span>Windows Server&nbsp;2003 </span></li>
                <li><span>Windows&nbsp;XP </span></li>
                <li><span>Windows&nbsp;2000 </span></li>
                <li><span>Windows&nbsp;NT&nbsp;4.0 </span></li>
            </ul>
            <p><span>CDB</span><span>和<span>NTSD</span>在实质上是相同的。在这组文档中，所有提及&#8220;<span>CDB</span>&#8221;的地方，同时适用于<span>CDB</span>和<span>NTSD</span>，这两个调试器的所有不同点都会单独注明。获取更多信息，查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml.htm"><span>CDB</span></a></span><span> </span><span>和</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r01_intro_d33cdade-c8d0-4a93-a626-d19ffa1df8b2.xml.htm#f7997e21-d84a-4224-af71-bc393265af91"><span>NTSD</span></a></span><span>。<span><br><br></span>另外，关于<span>Windows</span>调试工具中的<span>NTSD</span>，在<span>Windows</span>的<span>System32</span>目录下有<span>NTSD</span>的一个拷贝。本文档中描述的<span>Windows</span>调试工具包中的<span>NTSD</span>可能和<span>Windows</span>中安装的<span>NTSD</span>并不是同一个版本。<span><br><br><strong>32</strong></span><strong>位 和<span> 64</span>位 软件包</strong><span><br><br>Windows</span>调试工具包包含三个不同版本：用于调试<span>x86</span>和<span>x64</span>可执行文件的<span>32</span>位版本、用于调试基于<span>Itanium</span>可执行文件的<span>64</span>位版本、以及用于调试<span>x64</span>可执行文件的<span>64</span>位版本。由于调试一般会涉及到多种应用程序或者多种操作系统，所以选择合适的调试包并不像选择其它应用程序那么容易。获取更多信息，查看</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/r02_setup_1_bec62139-3e78-4a5a-9ff0-b525fe703d98.xml.htm"><span>Choosing a 32-bit or 64-bit Debugger Package</span></a></span><span>.<br><br><strong>Windows</strong></span><strong><span>调试工具包中的其它工具</span></strong><span><br><br></span><span>查看完整的工具列表及它们的文档，参阅</span><span><a href="mk:@MSITStore:D:\Program%20Files\Debugging%20Tools%20for%20Windows\debugger.chm::/hh/Debugger/toc_debuggers_a3feedd0-1691-4c43-bdaa-992355a82b05.xml.htm"><span>List of Tools and Documentation</span></a></span><span>.</span></p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p>&#160;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><a name=Legal_Debug_df882cd3-d4ec-4c4e-b33f-ef6d></a><strong><span>法律信息</span></strong></p>
<p><strong><span>以下省略<span>XX</span>字</span></strong></p>
<span>&#8230;&#8230;</span>
<img src ="http://www.cnitblog.com/cc682/aggbug/43272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc/cc682</a> 2008-05-04 15:19 <a href="http://www.cnitblog.com/cc682/articles/43272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新版WinDbg发布</title><link>http://www.cnitblog.com/cc682/articles/43275.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Sun, 04 May 2008 06:05:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43275.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43275.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43275.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43275.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43275.html</trackback:ping><description><![CDATA[<div>6.9.3.113版本WinDbg发布，hoho。后面就用新的帮助文档咯，前面的也没时间对。</div>
<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5341356082337814461&amp;page=RSS:+%e6%96%b0%e7%89%88WinDbg%e5%8f%91%e5%b8%83&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=73329&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=netroc682.spaces.live.com&amp;GT1=netroc682" width=0px> 
<img src ="http://www.cnitblog.com/cc682/aggbug/43275.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc/cc682</a> 2008-05-04 14:05 <a href="http://www.cnitblog.com/cc682/articles/43275.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----18</title><link>http://www.cnitblog.com/cc682/articles/43276.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Sun, 04 May 2008 05:39:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43276.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43276.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43276.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43276.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43276.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">cc682/NetRoc </span>
<p><a href="http://netroc682.spaces.live.com/"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">http://netroc682.spaces.live.com/</span></a>
<h1>调试器操作(常规) </h1>
<p>本节包含以下主题：
<p><a>控制目标</a>
<p><a>使用断点</a>
<p><a>读取和写入内存</a>
<p><a>读写寄存器和标志</a>
<p><a>查看调用堆栈</a>
<p><a>汇编模式调试</a>
<p><a>源码模式调试</a>
<p><a>调试BIOS代码</a>
<p><a>调试多个目标</a>
<p><a>结束调试会话</a>
<h1>控制目标 </h1>
<p>调试一个用户模式的目标程序或者内核模式的目标机时，目标可以被<em>运行</em>或<em>停止</em>。
<p>当调试器连接到内核模式的目标时，调试器会继续让目标运行，除非使用了<strong>-b</strong> <a>命令行选项</a>、目标系统停止相应(即<em>崩溃</em>)或目标系统因为先前的内核调试行为而处于中断状态。
<p>当调试器启动或连接到一个用户模式目标时，会立即中断目标的执行，除非使用<strong>-g</strong> 命令行选项。更多信息，查看<a>初始断点</a>。
<h4>运行中的目标 </h4>
<p>当目标正在运行时，大多数调试操作都不可用。
<p>如果要停止运行中的目标，可以输入<strong>中断</strong>(<strong>Break</strong>)命令。该命令使得调试器<em>中断到目标中</em>。即调试器停止目标，并获得所有控制权。应用程序可能不会立即中断下来。例如，如果所有线程当前正在执行系统代码，或者在等待操作，中断会延迟到控制返回应用程序代码时发生。
<p>如果运行中的目标发生异常、特定<a>事件</a>发生、遇到<a>断点</a>或程序正常关闭，目标会<em>中断到调试器</em>。 该动作停止目标并将所有控制权交给调试器。<a>调试器命令窗口</a>会显示一条消息来描述这个错误、事件或断点。
<h4>停止的目标 </h4>
<p>通过下面一些方法来开始或控制目标的执行：
<ul>
    <li>使用<strong>运行</strong>(<strong>Go</strong>)命令使得程序开始运行。
    <li>一次单步执行一条指令，使用<strong>单步进入</strong>(<strong>Step Into</strong>) 或<strong>单步步过</strong>( <strong>Step Over</strong> )命令。如果发生函数调用，<strong>Step Into</strong>会进入函数体重并继续开始单步执行每条指令。<strong>Step Over</strong>将函数调用当作单步。当调试器运行于<a>汇编模式</a>时，单步操作每次执行一条指令。当调试器运行于<a>源码模式</a>时，单步操作一次执行一行代码。
    <li>结束当前函数的执行并在返回时中断，使用<strong>执行到返回</strong>(<strong>Step Out</strong>)或 or <strong>跟踪和监视</strong>(<strong>Trace and Watch</strong>)命令。<strong>Step Out</strong>命令继续程序执行知道当前函数结束。<strong>Trace and Watch</strong> 继续执行知道当前函数结束，并显示函数调用的摘要信息。但是，必须在函数的第一条指令使用<strong>Trace and Watch</strong> 命令。在基于Itanium的处理器上<strong>跟踪到分支</strong>(<strong>Trace to Next Branch</strong>) 运行直到遇到分支指令。
    <li>如果有异常发生，可以使用<strong>处理异常并运行</strong>(<strong>Go with Exception Handled</strong>)和<strong>不处理异常并运行</strong>(<strong>Go with Exception Not Handled</strong>)命令来恢复执行和控制异常状态。(关于异常的更多信息，查看<a>控制异常和事件</a>。)
    <li><em>(仅WinDbg)</em> 如果在<a>反汇编窗口(Disassembly window)</a>或 <a>源码窗口(Source window)</a>选中一行，然后使用 <strong>运行到光标</strong>(<strong>Run to Cursor</strong>)命令，程序会一直运行直到遇到选中那一行。
    <li><em>(仅User Mode)</em> 关闭目标程序并重新开始运行它，可以使用<strong>重新开始</strong>(<strong>Restart</strong>)命令。该命令只能用于调试器创建的进程。进程重起之后，会立即中断到调试器。
    <li><em>(仅WinDbg)</em> 使用<strong>停止调试</strong>(<strong>Stop Debugging</strong>)命令关闭目标程序并清空调试器。该命令使得可以开始调试另一个目标。 </li>
</ul>
<h4>命令窗体 </h4>
<p>大多数用于开始或控制目标执行的命令都以文本命令、菜单命令、工具栏按钮和快捷键方式存在。基本的文本命令可以在CDB、KD或WinDbg中使用。(文本命令一般都支持附加的选项，例如改变程序计数器的位置或执行指定数量的指令。)可以在WinDbg中使用菜单命令、工具栏按钮和快捷键。
<p>以如下方式使用这些命令。
<div>
<table style="BORDER-COLLAPSE: collapse" border=0>
    <colgroup>
    <col style="WIDTH: 111px">
    <col style="WIDTH: 97px">
    <col style="WIDTH: 117px">
    <col style="WIDTH: 105px">
    <col style="WIDTH: 160px">
    <tbody vAlign=top>
        <tr style="BACKGROUND: #bfbfbf">
            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: black 0.5pt solid; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
            <p><strong>命令</strong> </p>
            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: black 0.5pt solid; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
            <p><strong>WinDbg按钮</strong> </p>
            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: black 0.5pt solid; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
            <p><strong>WinDbg命令</strong> </p>
            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: black 0.5pt solid; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
            <p><strong>WinDbg快捷键</strong> </p>
            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: black 0.5pt solid; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
            <p><strong>作用</strong> </p>
            <tr>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"><a href="http://byfiles.storage.live.com/y1pNdwJB91T_s9v0Qfsjcf_MiY79gorLUkKo2t-6upY14-a-pnP4VvJtmoX0JggVbGghKtvcjeeIbQ"><img height=22 alt=1 src="http://byfiles.storage.live.com/y1pNdwJB91T_s9v0Qfsjcf_MiY79gorLUkKo2t-6upY14-a-pnP4VvJtmoX0JggVbGghKtvcjeeIbQ" width=24></a>
                <p>&#160;</p>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                <p><a><strong>Debug | Run to Cursor</strong></a> </p>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                <p>F7<br><br>CTRL + F10 </p>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                <p><em>(仅WinDbg)</em> 运行到光标位置。 </p>
                <tr>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"><a href="http://byfiles.storage.live.com/y1pNdwJB91T_s_-ChmzHUQ9QRuvHGMmBdGT0XzwdyLaoJpAGotYqJnlTG43DgOiki2G1IFrej2djP4"><img height=22 alt=2 src="http://byfiles.storage.live.com/y1pNdwJB91T_s_-ChmzHUQ9QRuvHGMmBdGT0XzwdyLaoJpAGotYqJnlTG43DgOiki2G1IFrej2djP4" width=24></a>
                    <p>&#160;</p>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                    <p><a><strong>Debug | Stop Debugging</strong></a> </p>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                    <p>SHIFT + F5 </p>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                    <p>停止所有的调试并关闭目标。 </p>
                    <tr>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                        <p><em>(</em>仅<em>CDB/KD)</em> <a>CTRL+C</a> </p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"><a href="http://byfiles.storage.live.com/y1pNdwJB91T_s-5SJUx7qoK38AUV5ffIynatiIHXa5j44W-Th9roLqWPhtgGMnlQ5KlKE4wj4cz0XA"><img height=22 alt=3 src="http://byfiles.storage.live.com/y1pNdwJB91T_s-5SJUx7qoK38AUV5ffIynatiIHXa5j44W-Th9roLqWPhtgGMnlQ5KlKE4wj4cz0XA" width=24></a>
                        <p>&#160;</p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p><a><strong>Debug | Break</strong></a> </p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p>CTRL + BREAK </p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p>停止执行，调试器中断目标。 </p>
                        <tr>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                            <p><a><strong>.restart (Restart Target Application)</strong></a> </p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"><a href="http://byfiles.storage.live.com/y1pNdwJB91T_s8C-UtSzIv4ycXSoRSLEosqtEZhzdK6OSf5yHrBVIrb-gqeJxlKKnNIO8OhI5L7Bso"><img height=22 alt=4 src="http://byfiles.storage.live.com/y1pNdwJB91T_s8C-UtSzIv4ycXSoRSLEosqtEZhzdK6OSf5yHrBVIrb-gqeJxlKKnNIO8OhI5L7Bso" width=24></a>
                            <p>&#160;</p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p><a><strong>Debug | Restart</strong></a> </p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p>CTRL + SHIFT + F5 </p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p><em>(仅User mode)</em> 重起目标程序 </p>
                            <tr>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                <p><a><strong>g (Go)</strong></a> </p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"><a href="http://byfiles.storage.live.com/y1pNdwJB91T_s_IUBNGnrhBo5J6N-zp1YMiL-gEmqamtABoTktdvgmcK1IVFL7feT00vWB3aVehEQU"><img height=22 alt=5 src="http://byfiles.storage.live.com/y1pNdwJB91T_s_IUBNGnrhBo5J6N-zp1YMiL-gEmqamtABoTktdvgmcK1IVFL7feT00vWB3aVehEQU" width=24></a>
                                <p>&#160;</p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p><a><strong>Debug | Go</strong></a> </p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p>F5 </p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p>目标自由执行。 </p>
                                <tr>
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                    <p><a><strong>gc (Go from Conditional Breakpoint)</strong></a> </p>
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                    <p>在一次<a>条件断点</a>之后恢复执行。 </p>
                                    <tr>
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                        <p><a><strong>gh (Go with Exception Handled)</strong></a> </p>
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                        <p><a><strong>Debug | Go Handled Exception</strong></a> </p>
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                        <p>和<strong>g&nbsp;(Go)</strong>相同，但是当前异常被当作已处理。 </p>
                                        <tr>
                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                            <p><a><strong>gn (Go with Exception Not Handled)</strong></a> </p>
                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                            <p><a><strong>Debug | Go Unhandled Exception</strong></a> </p>
                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                            <p>和<strong>g&nbsp;(Go)</strong>相同，但是当前异常被当作未处理。 </p>
                                            <tr>
                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                <p><a><strong>gu (Go Up)</strong></a> </p>
                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"><a href="http://byfiles.storage.live.com/y1pNdwJB91T_s-_Us1shGJIrhT46HDxG3_Mk5QRjgPuPN4xLvO3uadnb2Rc-EDFmLwvWR12fqPunLw"><img height=23 alt=6 src="http://byfiles.storage.live.com/y1pNdwJB91T_s-_Us1shGJIrhT46HDxG3_Mk5QRjgPuPN4xLvO3uadnb2Rc-EDFmLwvWR12fqPunLw" width=25></a>
                                                <p>&#160;</p>
                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                <p><a><strong>Debug | Step Out</strong></a> </p>
                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                <p>目标运行到当前函数执行完成。 </p>
                                                <tr>
                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                    <p><a><strong>p (Step)</strong></a> </p>
                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"><a href="http://byfiles.storage.live.com/y1pNdwJB91T_s8XPZal2kjiA-9_v9PSBiUW7wwoMnOCPtCKLOk7OpSs-d-O-6hU6EV4Zu0nLQS_wgc"><img height=23 alt=7 src="http://byfiles.storage.live.com/y1pNdwJB91T_s8XPZal2kjiA-9_v9PSBiUW7wwoMnOCPtCKLOk7OpSs-d-O-6hU6EV4Zu0nLQS_wgc" width=25></a>
                                                    <p>&#160;</p>
                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                    <p><a><strong>Debug | Step Over</strong></a> </p>
                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                    <p>目标执行一条指令。如果该指令是函数调用，则这个调用被当作一步执行。 </p>
                                                    <tr>
                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                        <p><a><strong>pa (Step to Address)</strong></a> </p>
                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                        <p>目标运行直到到达指定的地址。该函数中执行的每一步都会显示出来(但是不显示被调用的函数中的内容。) </p>
                                                        <tr>
                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                            <p><a><strong>pc (Step to Next Call)</strong></a> </p>
                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                            <p>目标运行直到遇到下一个<strong>call</strong>指令。如果当前指令是<strong>call</strong>，则这个call会被完成并执行到下一个<strong>call</strong>。 </p>
                                                            <tr>
                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                <p><a><strong>pct (Step to Next Call or Return)</strong></a> </p>
                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                <p>目标继续执行，直到遇到一个<strong>call</strong>指令或者<strong>return</strong>指令。 </p>
                                                                <tr>
                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                    <p><a><strong>ph (Step to Next Branching Instruction)</strong></a> </p>
                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                    <p>目标执行，直到到达任何一种分支指令，包括条件和非条件分支、call调用、函数返回和系统调用。 </p>
                                                                    <tr>
                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                        <p><a><strong>pt (Step to Next Return)</strong></a> </p>
                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                        <p>目标执行，直到遇到<strong>return</strong>指令。 </p>
                                                                        <tr>
                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                            <p><a><strong>t (Trace)</strong></a> </p>
                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid"><a href="http://byfiles.storage.live.com/y1pNdwJB91T_s8xs13ZTHbsF4eK1e4tJy0V_yQhWHyPhaKAvt0jli5kwPKMNAZUfBdlRW0QkK-_Zhc"><img height=22 alt=8 src="http://byfiles.storage.live.com/y1pNdwJB91T_s8xs13ZTHbsF4eK1e4tJy0V_yQhWHyPhaKAvt0jli5kwPKMNAZUfBdlRW0QkK-_Zhc" width=24></a>
                                                                            <p>&#160;</p>
                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                            <p><a><strong>Debug | Step Into</strong></a> </p>
                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                            <p>F11<br><br>F8 </p>
                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                            <p>目标执行一条指令。如果该指令是一条call，调试器跟踪到这个call中。 </p>
                                                                            <tr>
                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                                <p><a><strong>ta (Trace to Address)</strong></a> </p>
                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                                <p>目标执行直到指定地址。本函数和被调用函数中的每一步都会显示出来。 </p>
                                                                                <tr>
                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                                    <p><a><strong>tb (Trace to Next Branch)</strong></a> </p>
                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                                    <p><em>(除内核模式之外的所有模式，仅在基于x86的系统上)</em> 目标运行到下一条分支指令。 </p>
                                                                                    <tr>
                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                                        <p><a><strong>tc (Trace to Next Call)</strong></a> </p>
                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                                        <p>目标运行到下一条<strong>call</strong>指令。如果当前指令是<strong>call</strong>，该命令会跟踪进去直到遇到另一条<strong>call</strong>。 </p>
                                                                                        <tr>
                                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                                            <p><a><strong>tct (Trace to Next Call or Return)</strong></a> </p>
                                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                                            <p>目标运行到下一条<strong>call</strong>指令或<strong>return</strong>指令。如果当前指令是<strong>call</strong>或<strong>return</strong>，命令会跟踪进去知道遇到另一个<strong>call</strong>或<strong>return</strong>。 </p>
                                                                                            <tr>
                                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                                                <p><a><strong>th (Trace to Next Branching Instruction)</strong></a> </p>
                                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                                                <p>目标执行直到遇到任意类型的分支指令，包括条件和非条件跳转、call、return和系统调用。如果当前指令是分支指令，该命令跟踪进入直到遇到下一个分支指令。 </p>
                                                                                                <tr>
                                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                                                    <p><a><strong>tt (Trace to Next Return)</strong></a> </p>
                                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                                                    <p>目标运行直到遇到<strong>return</strong>指令。如果当前指令是一条<strong>return</strong>，则跟踪进入直到另外一条<strong>return</strong>。 </p>
                                                                                                    <tr>
                                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: black 0.5pt solid; BORDER-BOTTOM: black 0.5pt solid">
                                                                                                        <p><a><strong>wt (Trace and Watch Data)</strong></a> </p>
                                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">&nbsp;
                                                                                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                                                                        <p>目标执行，直到指定的函数执行完成。这时会显示统计信息。</p>
                                                                                                        </td>
                                                                                                    </tr>
                                                                                                </tbody>
                                                                                            </table>
                                                                                            </div>
                                                                                            <p>&nbsp;
                                                                                            <p>关于如何重起目标机的更多信息，查看<a>崩溃和重起目标机</a>。
                                                                                            <h4>命令行选项 </h4>
                                                                                            <p>如果要在程序启动或加载时立即停止，可以在CDB或WinDbg使用<strong>-g</strong>命令行选项。更多信息，查看<a>初始断点</a>。
                                                                                            <p>CDB和WinDbg也支持<strong>-G</strong> <a>命令行选项</a>。 该选项使得当应用程序正常结束时调试会话被结束。
                                                                                            <p>下面的命令尝试从开始到结束的运行应用程序，调试器仅在发生错误时显示提示。
                                                                                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>cdb&nbsp;-g&nbsp;-G</strong>&nbsp;<em>ApplicationName</em>&nbsp;<br></span>
                                                                                            <p>使用<strong>-pt</strong> <a>命令行选项</a>来设置中断超时时间。有一些特定问题会造成目标不能和调试器通信。如果输入了某个中断命令但是调试器在这个时间到达之前未能中断目标，则调试器显示一条"Break-in timed out" 消息。<span style="FONT-FAMILY: 宋体"> </span>
                                                                                            <p>这时，调试器停止试图中断目标的行为。取而代之的是，暂停目标的执行使得可以检查(但不能控制)目标程序的状态。
                                                                                            <p>默认的超时时间是30秒。<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5341356082337814461&amp;page=RSS:+WinDbg+%e6%96%87%e6%a1%a3%e7%bf%bb%e8%af%91----18&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=73329&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=netroc682.spaces.live.com&amp;GT1=netroc682" width=0px> </p>
<img src ="http://www.cnitblog.com/cc682/aggbug/43276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc/cc682</a> 2008-05-04 13:39 <a href="http://www.cnitblog.com/cc682/articles/43276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----17</title><link>http://www.cnitblog.com/cc682/articles/43277.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Tue, 29 Apr 2008 09:14:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43277.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43277.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43277.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43277.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">cc682/NetRoc </span>
<p><a href="http://netroc682.spaces.live.com/"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">http://netroc682.spaces.live.com/</span></a>
<p>&nbsp;
<h1>设置路径和加载文件 </h1>
<p>要有效的进行调试，调试器需要尽可能多地访问和目标机或目标程序相关的信息。
<p>很多情况下，调试器可以自己定位需要的文件。但是，如果没能定位这些文件，可以手动设置寻找的路径。也可以在任何时候加载源码文件，不管源码放在什么地方。
<p>本节包含以下主题：
<p><a>可执行映像路径</a>
<p><a>符号路径</a>
<p><a>源代码路径</a>
<h1>可执行映像路径 </h1>
<p><em>可执行文件</em>是处理器可以运行的二进制文件。这些文件一般有<em>.exe</em>、<em>.dll</em>或<em>.sys</em>扩展名。可执行文件也称为<em>模块</em>，特别是当它是一个更大的应用程序的组成部分时。Microsoft Windows操作系统执行文件之前，会先把它加载到内存中。内存中的可执行文件拷贝称为<em>可执行映像</em>或<em>映像</em>。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;这些术语有时候并不是精确使用的。例如，有些文档将"映像"用于实际的磁盘文件。同样，基于Windows的应用程序所称的<em>可执行文件名</em>(<em>executable name</em>)一般包含了文件扩展名，但是这些程序的<em>模块名</em>(<em>module name</em>)一般不包含文件扩展名。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Windows内核和HAL也有特殊的模块名。例如，模块<strong>nt</strong> 是<em>Ntoskrnl.exe</em> 文件。 </span>
<p><em>可执行映像路径</em>指定可执行的二进制文件所在的目录。
<p>大多数情况下调试器都知道可执行文件的位置，所以不需要指定该路径。
<p>但是，有时候这个路径是需要的。例如，内核模式<a>小内存转储</a>文件没有包含发生停机错误(即<em>崩溃</em>)时内存中所有可执行文件。同样，用户模式的minidump文件也没有包含应用程序的二进制内容。如果设置了可执行文件路径，调试器就可以找到这些二进制文件。
<h4>可执行映像路径语法 </h4>
<p>调试器的可执行映像路径由多个由分号分割的目录路径组成。
<p>支持相对路径。但是，除非总是从同一个目录启动调试器，否则还是需要在每个路径前加上盘符和网络共享名。网络共享也可以被支持。
<p>调试器会递归搜索可执行映像路径。即调试器会搜索路径列表中的目录的所有子目录。
<h4>控制可执行映像路径 </h4>
<p>可以通过如下方法之一来设置可执行映像路径：
<ul>
    <li>启动调试器之前，使用_NT_EXECUTABLE_IMAGE_PATH <a>环境变量</a>设置路径。如果这个环境变量中有非法路径，则调试器跳过这个目录。
    <li>启动调试器时，使用<strong>-i</strong> <a>命令行选项</a>设置路径。
    <li>用<a><strong>.exepath</strong></a> 命令显示、设置、修改或添加路径。
    <li><em>(仅WinDbg)</em> 使用<a><strong>File | Image File Path</strong></a> 命令或按下CTRL+I来显示、设置、修改或添加路径。 </li>
</ul>
<p>如果使用了<strong>-sins</strong> <a>命令行选项</a>，调试器忽略环境变量中的可执行映像路径。
<h1>符号路径 </h1>
<p><em>符号路径</em>指定符号文件所在的目录。关于符号文件的更多概述信息，查看<a>符号</a>。
<p>一些编译器(例如Microsoft Visual Studio)将符号文件和二进制文件放到同一个目录中。符号文件和调试版的二进制文件包含路径和文件名信息。这些信息一般用来让调试器自动寻找符号文件。如果在构建的机器上调试一个用户模式进程，并且符号文件还在原来的位置，调试器在没有进行设置的情况下就能定位符号文件。
<p>大多数时候，都必须将符号路径设置为符号文件所在的位置。
<h4>符号路径语法 </h4>
<p>调试器的符号路径由多个由分号分割的目录路径组成。
<p>支持相对路径。但是，除非总是从同一个目录启动调试器，否则还是需要在每个路径前加上盘符和网络共享名。网络共享也可以被支持。
<p>对于符号路径中的每个目录，调试器都会在里面查找三个目录。例如，符号路径包含<em>c:\MyDir</em> 目录，而调试器在查找一个DLL的符号信息，它会首先查找<em>c:\MyDir\symbols\dll</em>，然后<em>c:\MyDir\dll</em> ，最后是<em>c:\MyDir</em> 。调试器对符号路径中的每个目录都重复这个过程。最终它会在当前目录和加上\dll的子目录中查找。(调试器添加<em>dll,exe</em>或者<em>sys</em>取决于正在调试的二进制文件类型。)
<p>无论如何，由于符号文件具有日期和时间戳，所以不用担心调试器因为按照这个顺序查找而使用错误的符号。它总是会查找时间戳和被调试的二进制文件匹配的符号。关于符号文件不不可用时的应对方法的信息，查看<a>符号文件无效或丢失</a>。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;如果连接到Internet或者公有网络，最有效的访问符号的方法是使用符号服务器。可以在符号路径中使用<strong>srv*</strong> 或<strong>symsrv*</strong> 字符串来使用符号服务器。更多信息，查看<a>使用符号服务器和符号存储</a>。 </span>
<h4>延迟符号加载 </h4>
<p>调试器默认会进行<em>延迟符号加载</em>(称为<em>lazy symbol loading或deferred symbol loading</em>)。这意味着符号仅在使用的时候才会被加载。但是，当符号路径改变时，所有<em>已加载</em>符号会立即重新加载。关于延迟符号加载以及如何启用和禁用它的更多信息，查看<a>延迟符号加载</a>。
<p>可以在CDB和KD中使用<strong>-s</strong> <a>命令行选项</a>关闭延迟符号加载。也可以使用 <a><strong>ld&nbsp;(Load Symbols)</strong></a> 命令或者<a><strong>.reload&nbsp;(Reload Module)</strong></a>和<strong>/f</strong>选项强制加载符号。
<h4>控制符号路径 </h4>
<p>使用下面的方法之一来控制符号路径：
<ul>
    <li>启动调试器之前，使用_NT_SYMBOL_PATH 和_NT_ALT_SYMBOL_PATH <a>环境变量</a>设置路径。符号路径通过将_NT_ALT_SYMBOL_PATH添加到_NT_SYMBOL_PATH之后来创建。(一般通过_NT_SYMBOL_PATH来设置路径。但是有时候可能希望使用_NT_ALT_SYMBOL_PATH来覆盖这些设置，例如拥有共享的符号文件的私有版本时。) 如果这些环境变量中有无效目录，调试器跳过这个目录。
    <li>启动调试器时，使用<strong>-y</strong> <a>命令行选项</a>设置。
    <li>用<a><strong>.sympath</strong></a> 命令显示、设置、修改或添加路径。如果使用源码服务器， <a><strong>.symfix&nbsp;(Set Symbol Store Path)</strong></a>命令和<strong>.sympath</strong> 类似，但是会保存输入。
    <li><em>(仅WinDbg)</em> 使用<a><strong>File | Symbol File Path</strong></a> 命令或按下CTRL+S来显示、设置、修改或添加路径。 </li>
</ul>
<p>如果使用了<strong>-sins</strong> <a>命令行选项</a>，调试器忽略环境变量中的符号路径。
<h4>Cache*<em>&lt;localsymbolcache&gt;</em> </h4>
<p><strong>Cache*</strong><em>&lt;localsymbolcache&gt;</em> 可以将从符号服务器任何指定目录结构下载的符号保存到本地缓存中。该命令对符号路径中在它右边的所有目录起效，所以只能指定一次。例如，可以使用下面的<a><strong>.sympath</strong></a> 命令将\\private 共享中的所有.pdb文件保存缓存到C:\symbols 中。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>.sympath</strong>&nbsp;<strong>\\share\that\cachestar\ignores;cache*c:\symbols;\\private\binary\symbol\location;\\private\test\build\symbol\share</strong><br></span>
<p>作为联系，可以试验下面的示例设置。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>_NT_SYMBOL_PATH=srv*c:\symbols*\\symbols\symbols;cache*c:\symbols</strong><br></span>
<p>这样，之后添加的所有符号都会自动保存到本地缓存中。<span style="FONT-FAMILY: 宋体"> </span>
<p>如果本地缓存变得过大，可以使用调试工具包中的<strong>AgeStore</strong> 工具来清除最近未使用的符号。用下面的命令查看<strong>AgeStore</strong> 的语法。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>agestore.exe&nbsp;/?</strong><br></span>
<p>关于符号服务器和符号存储的更多信息，查看<a>使用符号服务器和符号存储</a>。<span style="FONT-FAMILY: 宋体"> </span>
<p><strong>AgeStore</strong> 命令的更多信息，查看<a>工具和文档列表</a>。
<h1>源码路径 </h1>
<p><em>源码路径</em>指定C和C++源代码文件所在的目录。
<p>如果在构建可执行文件的机器上调试用户模式进程，并且源码还保存在原始位置，则调试器可以自动定位这些文件。
<p>大多数其它情况下，都必须设置源码路径或者加载单个源码文件。
<p>进行<a>通过调试器的远程调试</a>时， <a>调试服务器</a>会使用源码路径。如果使用WinDbg作为调试器，每个<a>调试客户端</a>都有它自己的<em>本地源码路径</em>。所有和源码相关的命令都访问本地计算机上的源码文件。在所有需要使用源码命令的客户端或者服务器上都需要设置合适的路径。
<p>多路径系统同样启用一个调试客户端来使用源码相关命令而并不实际和其他客户端或服务器共享源代码。这种系统对于某个用户需要访问私有或保密代码的时候非常有用。
<p>可以随时加载某个源码文件，不管源码路径是什么内容。
<h4>源码路径语法 </h4>
<p>调试器的源码路径由多个由分号分割的目录路径组成。
<p>支持相对路径。但是，除非总是从同一个目录启动调试器，否则还是需要在每个路径前加上盘符和网络共享名。网络共享也可以被支持。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;如果连接到公有网络，最有效的访问源码文件的方式是使用源码服务器。在源码路径中使用<strong>srv*</strong> 字符串来使用源码服务器。更多信息，查看<a>使用源码服务器</a>。 </span>
<h4>控制源码路径 </h4>
<p>使用下列方法之一来控制源码路径：
<ul>
    <li>启动调试器之前，通过_NT_SOURCE_PATH <a>环境变量</a>设置源码路径。如果环境变量中添加了无效目录，则调试器忽略这个目录。
    <li>启动调试器时，使用<strong>-srcpath</strong> <a>命令行选项</a>设置源码路径。
    <li>用 <a><strong>.srcpath</strong></a> 命令显示、设置、修改或添加源码路径。如果使用源码服务器，使用<a><strong>.srcfix&nbsp;(Use Source Server)</strong></a> 会稍微容易一些。
    <li><em>(仅WinDbg)</em>用 <a><strong>.lsrcpath</strong></a> 命令显示、设置、修改或添加本地源码路径。如果使用源码服务起，使用<a><strong>.lsrcfix&nbsp;(Use Local Source Server)</strong></a>会稍微容易。
    <li><em>(仅WinDbg)</em> 使用 <a><strong>File | Source File Path</strong></a> 命令或按下CTRL+P来显示、设置、修改或添加源码路径或本地源码路径。 </li>
</ul>
<p>也可以通过下面的方法直接打开或关闭源码文件：
<ul>
    <li>使用<a><strong>lsf (Load or Unload Source File)</strong></a> 命令来打开或关闭源码文件。
    <li><em>(仅WinDbg)</em> 使用<a><strong>.open (Open Source File)</strong></a> 命令来打开源码文件。
    <li>
    <div><em>(仅WinDbg)</em> 用<a><strong>File | Open Source File</strong></a> 命令或按下CTRL+O来打开源码文件。也可以使用工具栏上的<strong>Open source file (Ctrl+O) </strong>按钮(<a href="http://byfiles.storage.live.com/y1pNdwJB91T_s-AryodqMXmnFTCCgdqqmOX4IhfHmNENTtgozTwTXJU8yhoOKvzxImBpPsL4dqDWFU"><img height=22 alt=2 src="http://byfiles.storage.live.com/y1pNdwJB91T_s-AryodqMXmnFTCCgdqqmOX4IhfHmNENTtgozTwTXJU8yhoOKvzxImBpPsL4dqDWFU" width=24></a>) 。 </div>
    <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;当使用<strong>File&nbsp;|&nbsp;Open Source File</strong> (或者使用相同功能的快捷菜单和按钮) 来打开源码文件时，该文件的路径会自动添加到源码路径中。 </span></p>
    <li><em>(仅WinDbg)</em> 使用<a><strong>File | Recent Files</strong></a> 命令来打开WinDbg最近打开过的4个文件之一。
    <li><em>(仅WinDbg)</em> 用 <a><strong>File | Close Current Window</strong></a> 命令或点击<a>源码窗口(Source window)</a>角上的<strong>Close</strong>按钮来关闭一个源码文件。 </li>
</ul>
<p>关于如何使用源码文件的更多信息，查看<a>源码模式调试</a>。<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5341356082337814461&amp;page=RSS:+WinDbg+%e6%96%87%e6%a1%a3%e7%bf%bb%e8%af%91----17&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=73329&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=netroc682.spaces.live.com&amp;GT1=netroc682" width=0px> </p>
<img src ="http://www.cnitblog.com/cc682/aggbug/43277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc/cc682</a> 2008-04-29 17:14 <a href="http://www.cnitblog.com/cc682/articles/43277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----16</title><link>http://www.cnitblog.com/cc682/articles/43278.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Mon, 28 Apr 2008 09:22:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43278.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43278.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43278.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43278.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43278.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: cc682/NetRoc http://netroc682.spaces.live.com/&nbsp;配置调试器 本节包含以下内容：使用日志文件指定模块和函数所有者控制异常和事件设置路径和加载文件使用日志文件 调试器可以为调试会话记录日志文件。这些日志包括调试器命令窗口中所有内容，包含输入的命令和调试器的输出。在WinDbg中，一些菜单和工具栏操作会在...&nbsp;&nbsp;<a href='http://www.cnitblog.com/cc682/articles/43278.html'>阅读全文</a><img src ="http://www.cnitblog.com/cc682/aggbug/43278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc/cc682</a> 2008-04-28 17:22 <a href="http://www.cnitblog.com/cc682/articles/43278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg文档翻译</title><link>http://www.cnitblog.com/cc682/articles/43279.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Thu, 24 Apr 2008 03:36:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43279.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43279.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43279.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43279.html</trackback:ping><description><![CDATA[<div>省略掉WinDbg Graphical Interface这一段了。图形界面图又多，懒得搞</div>
<img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5341356082337814461&amp;page=RSS:+WinDbg%e6%96%87%e6%a1%a3%e7%bf%bb%e8%af%91&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=73329&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=netroc682.spaces.live.com&amp;GT1=netroc682" width=0px> 
<img src ="http://www.cnitblog.com/cc682/aggbug/43279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc/cc682</a> 2008-04-24 11:36 <a href="http://www.cnitblog.com/cc682/articles/43279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----15</title><link>http://www.cnitblog.com/cc682/articles/43280.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Wed, 23 Apr 2008 17:08:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43280.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43280.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43280.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43280.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43280.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">cc682/NetRoc </span>
<p><a href="http://netroc682.spaces.live.com/"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">http://netroc682.spaces.live.com/</span></a>
<p>&nbsp;
<h1>使用调试器命令程序 </h1>
<p>本节包含下面的主题：
<p><a>调试器命令程序的组成</a>
<p><a>流程控制符</a>
<p><a>调试器命令程序的执行</a>
<p><a>调试器命令程序示例</a>
<h1>调试器命令程序概述 </h1>
<p><em>调试器命令程序</em>是由调试器命令和如<strong>.if</strong>、<strong>.for</strong>和<strong>.while</strong>.这样的流程控制符组成的小程序。 (流程控制符和语法的完整列表，查看<a>流程控制符</a>。)
<p>可以用大括号( <strong>{ } </strong>)将大的命令块中的声明块括起来。输入每个块的时候，块中的所有别名都会被解析。如果改变了命令块中别名的值，之后除了次级块中的命令之外的命令都不会使用新的别名值。
<p>不能用一对大括号来创建块。必须在<strong>{</strong>之前加上流程控制符。如果要创建只用来展开别名的块，应该在<strong>{</strong>之前使用<a><strong>.block</strong></a> 标记。
<p>调试器命令程序可以使用<a>自定义别名和固定别名</a>作为它的本地变量。如果要使用数值或类型变量，可以使用<strong>$t<em>n</em></strong> <a>伪寄存器</a>。
<p>自定义别名仅在不和其他文本连接时会被替代。如果要展开和其他文本连接的别名，使用<a><strong>${&nbsp;}&nbsp;&nbsp;(Alias Interpreter)</strong></a>标记。该标记有一些选项开关可以以不同方式展开别名。
<p>使用双美元符号 (<a><strong>$$&nbsp;&nbsp;(Comment Specifier)</strong></a>)来为调试器命令程序添加注释。不能在标记和它的成员之间插入注释(例如大括号或条件) 。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;不能使用星号 (<a><strong>*&nbsp;&nbsp;(Comment Line Specifier)</strong></a>)。 由于星号指定的注释不是以分号结尾的，所以程序的其余部分都会被忽略掉。 </span>
<p>一般来说在调试器命令程序中都使用MASM语法。如果要使用C++的内容(例如指定结构或类成员)，可以用<strong>@@c++(&nbsp;)</strong> 标记来切换到C++ 语法。
<p>MASM语法中的<strong>$scmp</strong>、<strong>$sicmp</strong>和<strong>$spat</strong> 字符串操作符非常有用。这些操作符的更多信息，查看<a>MASM数字和操作符</a>。
<h1>流程控制符 </h1>
<p>可以使用<em>流程控制符</em> 来在调试器命令程序中创建条件执行和循环语句。
<p>除了下面一些例外之外，流程控制符和C/C++中的控制符行为都是相似的：
<ul>
    <li>
    <div>即使只有一条命令，所有条件执行和循环也必须用大括号括起来。例如，不能省略下面命令中的大括号。 </div>
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>.if&nbsp;(ebx&gt;0)&nbsp;{&nbsp;r&nbsp;ebx&nbsp;}</strong><br></span></p>
    <li>
    <div>所有条件都必须是一个表达式。不能使用命令作为条件。例如下面的例子会出现语法错误。 <span style="FONT-FAMILY: 宋体"></span></div>
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>.while&nbsp;(r&nbsp;ebx)&nbsp;{&nbsp;....&nbsp;}</strong><br></span></p>
    <li>反的大括号(<strong>}</strong>)之前的最后一条命令不需要用分号结束。 <span style="FONT-FAMILY: 宋体"></span></li>
</ul>
<p>调试器命令程序中支持以下流程控制符。关于每个标记的语法的详细信息，查看他们各自的参考信息。
<ul>
    <li><a><strong>.if</strong></a> 标记类似C中的<strong>if</strong>关键字。
    <li><a><strong>.else</strong></a>标记类似C中的<strong>else</strong>关键字。
    <li><a><strong>.elsif</strong></a>标记类似C中的<strong>else if</strong>关键字。
    <li><a><strong>.foreach</strong></a> 标记解析调试器命令的输出、字符串或文本文件。然后将它找到的每条数据作为指定的调试器命令的输入。
    <li><a><strong>.for</strong></a>标记类似C中的<strong>for</strong>关键字，但是必须用分号分割多个增量命令，而不是逗号。
    <li><a><strong>.while</strong></a>标记类似C中的<strong>while</strong>关键字。
    <li><a><strong>.do</strong></a> 和C中的<strong>do</strong> 关键字类似，但是不能在条件之前使用"while" 。
    <li><a><strong>.break</strong></a>和C中的<strong>break</strong>关键字类似。可以在任何<strong>.for</strong>、<strong>.while</strong>或 <strong>.do</strong>循环中使用。
    <li><a><strong>.continue</strong></a>和C中的<strong>continue</strong>关键字类似。可以在任何<strong>.for</strong>、<strong>.while</strong>或 <strong>.do</strong>循环中使用。
    <li><a><strong>.catch</strong></a> 标记避免程序由于出现错误而终止。<strong>.catch</strong>标记后跟用大括号括起来的一条或多条命令。如果某条命令产生错误，则显示错误信息并跳过在大括号中剩下的命令，接着继续执行大括号之后的第一条命令。
    <li><a><strong>.leave</strong></a> 标记用于退出一个<strong>.catch</strong> 块。
    <li><a><strong>.printf</strong></a> 和C语言中的<strong>printf</strong>类似。
    <li><a><strong>.block</strong></a>标记没有操作。使用该标记来创建一个块，因为不能仅使用大括号创建块。在前大括号之前必须加上流程控制符。 </li>
</ul>
<p>调试器命令程序中，<a><strong>!for_each_module</strong></a>, <a><strong>!for_each_frame</strong></a>和<a><strong>!for_each_local</strong></a> 扩展命令也非常有用。
<h1>执行调试器命令程序 </h1>
<p>可以使用下面的方法之一来执行调试器命令程序：
<ul>
    <li>以单个字符串在<a>调试器命令窗口</a>中输入所有语句和命令，每个语句和命令之间用分号隔开。
    <li>将所有语句写在脚本文件的单行中，每个语句和命令之间用分号隔开。然后用<a>使用脚本文件</a>中描述的方法运行脚本。
    <li>在脚本文件中输入所有语句，每条语句占一行。 (既用回车或分号来分割不同的语句。) 然后使用<a><strong>$&gt;&lt; (Run Script File)</strong></a> 或 <a><strong>$$&gt;&lt; (Run Script File)</strong></a> 命令运行脚本。 这些命令会打开脚本文件，用分号替换所有的回车符，然后将结果文本当作单个命令块执行。 </li>
</ul>
<h1>调试器命令程序示例 </h1>
<p>本主题的下面一小节描述了调试器命令程序的示例。
<h4>使用 .foreach 标记 </h4>
<p>下面的例子是用<a><strong>.foreach</strong></a> 标记搜索word值然后将他们以DWORD和字符的方式显示出来。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>.foreach&nbsp;(place&nbsp;{&nbsp;s-[1]w&nbsp;77000000&nbsp;L?4000000&nbsp;5a4d&nbsp;})&nbsp;{&nbsp;dc&nbsp;place&nbsp;L8&nbsp;}&nbsp;</strong><br></span>
<p><a><strong>s&nbsp;(Search Memory)</strong></a>命令和<strong>-[1]</strong>选项一起使得输出只包含它找到的地址，而不是在这些地址上找到的值：<span style="FONT-FAMILY: 宋体"> </span>
<p>下面的命令显示所有位于0x77000000 到0x7F000000地址范围内的模块的详细信息。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>.foreach&nbsp;(place&nbsp;{&nbsp;lm1m&nbsp;})&nbsp;{&nbsp;.if&nbsp;((${place}&nbsp;&gt;=&nbsp;0x77000000)&nbsp;&amp;&nbsp;(${place}&nbsp;&lt;=&nbsp;0x7f000000))&nbsp;{&nbsp;lmva&nbsp;place&nbsp;}&nbsp;}&nbsp;</strong><br></span>
<p><a><strong>lm&nbsp;(List Loaded Modules)</strong></a>和<strong>1m</strong>选项 使得它的输出只包含模块地址，而不是模块的完整描述。<span style="FONT-FAMILY: 宋体"> </span>
<p>上面的例子使用<a><strong>${&nbsp;}&nbsp;&nbsp;(Alias Interpreter)</strong></a>标记来确保别名即使和其他文本连接在一起也能被正确替换。如果不这样，和<strong>place</strong> 连在一起的圆括号可能使得别名无法被替换掉。注意这对于<strong>.foreach</strong> 和真实的别名使用的变量都起效。
<h4>遍历进程列表 </h4>
<p>下面的示例遍历内核模式的进程列表并显示列表中所有入口的可执行文件名。
<p>该示例应该保存在文本文件中并用<a><strong>$$&gt;&lt; (Run Script File)</strong></a> 命令执行。该命令加载整个文件，用分号替换所有回车然后再执行。该命令使得可以通过使用多行和缩进来编写更具可读性的程序，而不是将所有程序挤压到单独一行中。
<p>该示例使用了下面一些特性：
<ul>
    <li>程序中使用<strong>$t0</strong>、<strong>$t1</strong>和<strong>$t2</strong> 伪寄存器作为变量。还使用了别名<strong>Procc</strong> 和<strong>$ImageName</strong>。
    <li>该程序使用MASM表达式语法。但是<strong>@@c++(&nbsp;)</strong>标记也出现了一次。 这个标记使得圆括号中的表达式使用C++ 语法。这里用来在程序中直接使用C++结构。
    <li><a><strong>r&nbsp;(Registers)</strong></a> 和<strong>?</strong>标志一起使用。该标志为伪寄存器<strong>$t2</strong>指派有类型的值。 </li>
</ul>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">$$&nbsp;&nbsp;Get&nbsp;process&nbsp;list&nbsp;LIST_ENTRY&nbsp;in&nbsp;$t0.<br>r&nbsp;$t0&nbsp;=&nbsp;nt!PsActiveProcessHead<br><br>$$&nbsp;&nbsp;Iterate&nbsp;over&nbsp;all&nbsp;processes&nbsp;in&nbsp;list.<br>.for&nbsp;(r&nbsp;$t1&nbsp;=&nbsp;poi(@$t0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(@$t1&nbsp;!=&nbsp;0)&nbsp;&amp;&nbsp;(@$t1&nbsp;!=&nbsp;@$t0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;$t1&nbsp;=&nbsp;poi(@$t1))<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;r?&nbsp;$t2&nbsp;=&nbsp;#CONTAINING_RECORD(@$t1,&nbsp;nt!_EPROCESS,&nbsp;ActiveProcessLinks);<br>&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;/x&nbsp;Procc&nbsp;@$t2<br><br>&nbsp;&nbsp;&nbsp;&nbsp;$$&nbsp;&nbsp;Get&nbsp;image&nbsp;name&nbsp;into&nbsp;$ImageName.<br>&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;/ma&nbsp;$ImageName&nbsp;@@c++(&amp;@$t2-&gt;ImageFileName[0])<br><br>&nbsp;&nbsp;&nbsp;&nbsp;.block<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.echo&nbsp;${$ImageName}&nbsp;at&nbsp;${$Procc}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;ad&nbsp;$ImageName<br>&nbsp;&nbsp;&nbsp;&nbsp;ad&nbsp;Procc<br>}<br></span>
<h4>遍历LDR_DATA_TABLE_ENTRY 链表<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>下面的例子遍历用户模式的LDR_DATA_TABLE_ENTRY 链表，并显示每个链表入口中的基地址和完整路径。
<p>和上面的示例一样，需要将程序保存到文本文件中，并用<a><strong>$$&gt;&lt; (Run Script File)</strong></a>命令执行。
<p>该示例使用了下面一些特性：
<ul>
    <li>该程序使用MASM表达式语法。但是在两个地方使用了<strong>@@c++(&nbsp;)</strong> 标记。这个标记使得圆括号中的表达式使用C++ 语法。这里用来在程序中直接使用C++结构。
    <li><a><strong>r&nbsp;(Registers)</strong></a> 和<strong>?</strong>标志一起使用。该标志为伪寄存器<strong>$t0</strong> 和<strong>$t1</strong>指派有类型的值。循环体中，<strong>$t1</strong>具有<strong>ntdll!_LDR_DATA_TABLE_ENTRY*</strong>类型，所以程序可以直接引用它的成员。
    <li>使用了自定义别名<strong>$Base</strong> 和<strong>$Mod</strong>。双美元符号避免了这些别名在当前调试器会话之前被使用过的可能性。美元符号不是必须的。<a><strong>${/v:&nbsp;}</strong></a> 标记会逐字解释别名，避免如果脚本运行之前定义过同名的别名使得它被替换的情况。 也可以将该标记和语句块一起使用，避免在语句块之前定义的别名的影响。
    <li><a><strong>.block</strong></a> 标记用于增加一个额外的别名替换步骤。别名在整个脚本被加载时会进行一次替换，在进入每个语句块的时候还会进行一次替换。如果没有<strong>.block</strong> 标记和它的大括号，<strong>.echo</strong> 命令无法接收到上一行中赋给<strong>$Mod</strong> 和<strong>$Base</strong> 别名的值。 </li>
</ul>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">$$&nbsp;Get&nbsp;module&nbsp;list&nbsp;LIST_ENTRY&nbsp;in&nbsp;$t0.<br>r?&nbsp;$t0&nbsp;=&nbsp;&amp;@$peb-&gt;Ldr-&gt;InLoadOrderModuleList<br>&nbsp;<br>$$&nbsp;Iterate&nbsp;over&nbsp;all&nbsp;modules&nbsp;in&nbsp;list.<br>.for&nbsp;(r?&nbsp;$t1&nbsp;=&nbsp;*(ntdll!_LDR_DATA_TABLE_ENTRY**)@$t0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(@$t1&nbsp;!=&nbsp;0)&nbsp;&amp;&nbsp;(@$t1&nbsp;!=&nbsp;@$t0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r?&nbsp;$t1&nbsp;=&nbsp;(ntdll!_LDR_DATA_TABLE_ENTRY*)@$t1-&gt;InLoadOrderLinks.Flink)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;$$&nbsp;Get&nbsp;base&nbsp;address&nbsp;in&nbsp;$Base.<br>&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;/x&nbsp;${/v:$Base}&nbsp;@@c++(@$t1-&gt;DllBase)<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;$$&nbsp;Get&nbsp;full&nbsp;name&nbsp;into&nbsp;$Mod.<br>&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;/msu&nbsp;${/v:$Mod}&nbsp;@@c++(&amp;@$t1-&gt;FullDllName)<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;.block<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.echo&nbsp;${$Mod}&nbsp;at&nbsp;${$Base}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;ad&nbsp;${/v:$Base}<br>&nbsp;&nbsp;&nbsp;&nbsp;ad&nbsp;${/v:$Mod}<br>}</span><img height=1 alt="" src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5341356082337814461&amp;page=RSS:+WinDbg+%e6%96%87%e6%a1%a3%e7%bf%bb%e8%af%91----15&amp;referrer=" width=1 border=0><img style="POSITION: absolute" height=0px alt="" src="http://c.live.com/c.gif?NC=31263&amp;NA=1149&amp;PI=73329&amp;RF=&amp;DI=3919&amp;PS=85545&amp;TP=netroc682.spaces.live.com&amp;GT1=netroc682" width=0px> </p>
<img src ="http://www.cnitblog.com/cc682/aggbug/43280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc/cc682</a> 2008-04-24 01:08 <a href="http://www.cnitblog.com/cc682/articles/43280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----14</title><link>http://www.cnitblog.com/cc682/articles/43281.html</link><dc:creator>NetRoc/cc682</dc:creator><author>NetRoc/cc682</author><pubDate>Tue, 22 Apr 2008 15:56:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43281.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43281.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43281.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43281.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43281.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">cc682/NetRoc </span>
<p><a href="http://netroc682.spaces.live.com/"><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">http://netroc682.spaces.live.com/</span></a>
<h1>调试器命令窗口 </h1>
<p>本节包含以下主题：
<p><a>使用调试器命令</a>
<p><a>表达式求值</a>
<p><a>使用外壳命令</a>
<p><a>使用别名</a>
<p><a>使用脚本文件</a>
<p><a>使用调试器命令</a>
<h1>使用调试器命令 </h1>
<p>对于KD或CDB来说，"调试器命令窗口"就是整个窗口。在窗口底部的提示符位置输入命令。如果命令有输出，则窗口显示这些输出并重新显示提示符。
<p>对于WinDbg，"<a>调试器命令窗口</a>"指标题为"Command"的窗口。该窗口有两个部分：
<ul>
    <li>较小的，底部的部分用于输入命令。
    <li>大的，上边的部分用来查看命令输出。 </li>
</ul>
<p>这个窗口始终在开始调试会话的时候就会打开。可以通过点击<strong>View</strong>菜单中的<strong>Command</strong>、按下ALT+1或者点击工具栏上的<strong>Command(Alt+1)</strong>按钮(<a href="http://byfiles.storage.live.com/y1pNdwJB91T_s_Ey3bSUJFRa1lT9xRJVpiKZqYQRrjh0O6mGuwMHadnl7e1qQIiQsdVvC9IH-U_8ZQ"><img height=22 alt=1 src="http://byfiles.storage.live.com/y1pNdwJB91T_s_Ey3bSUJFRa1lT9xRJVpiKZqYQRrjh0O6mGuwMHadnl7e1qQIiQsdVvC9IH-U_8ZQ" width=24></a>)来重新打开或者切换到该窗口。
<p>可以通过按下上箭头和下箭头来滚动查看历史命令。当前面使用过的命令出现时，可以编辑并按下ENTER来执行这条命令(或者编辑过的命令)。光标不需要在行尾即可正常工作。
<h4>调试命令窗口提示符 </h4>
<p>进行用户模式调试时，调试命令窗口的提示符如下例中一样。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">2:005&gt;<br></span>
<p>上例中，2是当前进程号，005是当前线程号。<span style="FONT-FAMILY: 宋体"> </span>
<p>如果将调试器附加到不止一台计算机，在进程和线程号之前会有一个系统号。如下。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">3:2:005&gt;<br></span>
<p>这个例子中，3是当前系统号，2是当前进程号，005是当前线程号。<span style="FONT-FAMILY: 宋体"> </span>
<p>进行内核模式调试时，如果目标机只有一个处理器，提示符如下。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">kd&gt;<br></span>
<p>但是，如果目标机有多个处理器，当前处理器号会在提示符之前显示，如下。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:&nbsp;kd&gt;&nbsp;<br></span>
<p>如果KD或CDB中没有提示符出现，或者WinDbg的调试器命令窗口不可用，说明调试器不能输入任何命令。但是，仍然可以使用KD和CDB的<a>控制键</a>，以及WinDbg的菜单命令和 <a>快捷键</a>。<span style="FONT-FAMILY: 宋体"> </span>
<p>也可以使用<a><strong>.pcmd&nbsp;(设置提示命令)</strong></a> 命令为提示增加字符。
<h4>命令类型 </h4>
<p>WinDbg、KD和CDB支持各种命令。一些是各调试器共有的，一些只能在某些调试器中可用。
<p>一些命令只工作在<a>活动调试</a>下，另有一些命令只在调试<a>dump文件</a>时有用。
<p>一些命令只在<a>用户模式调试</a>可用，令一些只在<a>内核模式调试</a>有用。
<p>一些命令仅在当目标运行在特定处理器上时才有用。关于这些命令和限制的详细信息，查看<a>调试器命令</a>。
<h4>编辑、重复和取消命令 </h4>
<p>输入命令时可以使用标准编辑按键：
<ul>
    <li>用上下方向键查找先前的命令。
    <li>使用空格、DELETE、INSERT 和左右方向键编辑当前命令。
    <li>用ESC键清除当前行。 </li>
</ul>
<p>可以按下TAB键来自动完成文本输入。在任一款调试器中都可以在输入至少一个字符之后通过按下TAB来自动补完命令。重复按下TAB来循环所有的自动完成命令，或者按下SHIFT和TAB来反向循环。也可以在文本中使用通配符并通过TAB来展开成完整命令。例如，如果输入<strong>fo*!ba</strong> 并按下TAB，调试器将展开为所有名字以"fo"开头的模块中所有以"ba"开头的符号。又比如，可以通过键入<strong>!*prcb</strong> 并按下TAB来完成所有包含"prcb"的扩展命令。
<p>当使用TAB自动完成时，如果文本片断以点号(.)开始，文本将会以点命令来匹配。如果以感叹号(!)开始，则以扩展命令来匹配。另外，文本还会和符号进行匹配。使用TAB来输入符号时，按下TAB完成代码和符号以及模块名。如果没有显式指定模块名，则用本地符号和模块来补完。如果给出了模块或者模块的模板，则会按所有匹配的符号来补完。
<p>可以右键点击调试器命令窗口来自动将剪贴板中的内容粘贴到命令中。
<p>命令的最大长度为4096个字符。但是，如果<a>从内核调试其控制用户模式调试器</a>，最大长度为512字符。
<p>在CDB和KD中，按下ENTER会自动重复上一条命令。在WinDbg中，可以启用或禁用这个特性。关于该特性的更多信息，查看<a><strong>ENTER&nbsp;(重复上一条命令)</strong></a>。
<p>如果上一条命令产生了很上的输出并且想中断它，可以在CDB和KD中使用<a>CTRL+C</a> 。在WinDbg中，使用<a><strong>Debug&nbsp;|&nbsp;Break</strong></a> 或按下 <a>CTRL+BREAK</a>。
<p>在内核模式调试时，可以通过按下<a>CTRL+C</a>中断目标机的命令执行。
<p>使用<a><strong>.cls&nbsp;(清除屏幕)</strong></a>命令清空<a>调试器命令窗口</a>的所有文本。该命令清除所有命令的历史记录。 在WinDbg中，可以使用<a><strong>Edit&nbsp;|&nbsp;Clear Command Output</strong></a> 命令或者在调试器命令窗口的快捷菜单中点击<strong>Clear command output</strong>来清除命令历史记录。
<h4>表达式语法 </h4>
<p>很多命令和扩展命令都接受<em>表达式</em>作为参数。调试器在执行命令之前先计算这些表达式的值。关于表达式的更多信息，查看<a>表达式计算</a>。
<h4>别名 </h4>
<p><em>别名</em>是用来避免重复键入复杂语句的文本宏。有两种类型的别名。更多信息，查看<a>使用别名</a>。
<h4>自重复命令 </h4>
<p>使用如下命令来重复操作或条件执行其他命令：
<ul>
    <li><a><strong>j (Execute If-Else)</strong></a> 条件命令
    <li><a><strong>z (Execute While)</strong></a> 条件命令
    <li><a><strong>~e&nbsp;(Thread-Specific Command)</strong></a> 命令修饰符
    <li><em>(Windows XP和之后版本Windows)</em> <a><strong>!list</strong></a> 扩展命令 </li>
</ul>
<p>关于每条命令的更多信息，查看各命令的说明。
<h4>控制滚动条 </h4>
<p>使用滚动条来查看之前的命令和它们的输出。
<p>使用CDB和KD时，所有键盘输入都自动将调试器命令窗口置于窗口底部。
<p>在WinDbg中，当命令产生输出或按下ENTER键时，文本显示都会自动滚动到底部。如果要禁用自动滚动，点击<strong>View</strong>菜单的<a><strong>Options</strong></a> 并清除<strong>Automatically scroll</strong> 选择框。
<h4>WinDbg文本特性 </h4>
<p>在WinDbg中，可以使用更多改变文本如何在<a>调试器命令窗口</a>中显示的特性。一些可以在WinDbg窗口中使用，一些可以在调试器命令窗口的快捷菜单中使用，也有一些可以在菜单图标上点击。
<ul>
    <li>快捷菜单的<strong>Word wrap</strong>命令打开或关闭自动换行。这个命令对所有窗口生效，而并不只是选择这条命令的窗口。由于很多命令和扩展命令都产生格式化的输出，所以一般不建议打开自动换行。
    <li><a><strong>Edit&nbsp;|&nbsp;Add to Command Output</strong></a> 菜单命令在调试器命令窗口添加注释。快捷菜单的<strong>Add to command output</strong> 命令有相同作用。
    <li>可以自定义调试器命令窗口的背景和字符颜色。可以为不同类型的文本指定不同颜色。例如，可以以某种颜色显示自动的寄存器输出，用另外一种颜色显示错误信息，再用第三种颜色显示<strong>DbgPrint</strong>信息。更多信息，查看<a><strong>View&nbsp;|&nbsp;Options</strong></a>。
    <li>可以使用所有WinDbg调试信息窗口的共有特性，例如自定义字体和使用特殊编辑命令。关于这些特性的更多信息，查看<a>使用调试信息窗口</a>。 </li>
</ul>
<h4>远程调试 </h4>
<p>通过调试器进行远程调试时，<a>调试客户端</a>可以访问有限的命令。要修改客户端可以访问的命令数，使用<strong>-clines</strong> <a>命令行选项</a>或者 _NT_DEBUG_HISTORY_SIZE <a>环境变量</a>。
<h1>表达式计算 </h1>
<p>调试器能够识别两种表达式类型：<em>MASM表达式</em>和<em>C++表达式</em>。
<p>如果没有特别指出，本帮助文档示例中使用的是Microsoft宏汇编(MASM)表达式。在MSAM表达式中，所有符号都被当作地址对待。
<p>C++表达式和真实的C++代码中一样，符号被当作适当的数据类型。
<h4>每种语法何时被使用 </h4>
<p>可以使用下面的方法之一来选择默认的表达式类型：
<ul>
    <li>在调试器启动之前使用_NT_EXPR_EVAL <a>环境变量</a>。
    <li>调试器启动时，使用<strong>-ee</strong> {<strong>masm</strong>|<strong>c++</strong>} <a>命令行选项</a>。
    <li>调试器启动之后，使用<a><strong>.expr&nbsp;(Choose Expression Evaluator)</strong></a> 命令来显示或修改表达式类型。 </li>
</ul>
<p>如果没用使用上面任何一种方法，调试器使用MASM表达式。
<p>如果想不改变默认的表达式类型来计算一个表达式，可以使用<a><strong>?&nbsp;(Evaluate Expression)</strong></a> 命令。
<p>除了下面几种例外情况，所有命令和调试器信息窗口都通过默认表达式来解释他们的参数：
<ul>
    <li><a><strong>??&nbsp;(Evaluate C++ Expression)</strong></a> 命令总是使用C++ 表达式形式。
    <li><a>Watch窗口</a>始终使用C++表达式。
    <li><a>Locals窗口</a>始终使用C++ 表达式。
    <li>有些扩展命令始终使用MASM表达式(而有一些扩展命令只允许使用数字参数)。
    <li>如果将表达式用圆括号括起来，并在表达式前面插入两个at符号(<strong>@@</strong>)，将会使用这种情况下通常<em>不</em>使用的表达式形式。 </li>
</ul>
<p>双at符号(<strong>@@</strong>)使得可以在单个命令中为不同参数使用不同的表达式类型。也可以在长表达式中使用两种不同形式来计算子表达式。双at号可以嵌套。每层@@号都将表达式类型改为另一种。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>警告</strong