﻿<?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>Mon, 26 Sep 2011 05:15:25 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 05:15:25 GMT</pubDate><ttl>60</ttl><item><title>WinDbg 文档翻译----3</title><link>http://www.cnitblog.com/cc682/articles/43274.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</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</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</dc:creator><author>NetRoc</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>3</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</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</dc:creator><author>NetRoc</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</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</dc:creator><author>NetRoc</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</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</dc:creator><author>NetRoc</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</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</dc:creator><author>NetRoc</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</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</dc:creator><author>NetRoc</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</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</dc:creator><author>NetRoc</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</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</dc:creator><author>NetRoc</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</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</dc:creator><author>NetRoc</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>1</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>&nbsp;&nbsp;C++表达式语法用于处理结构和变量很有用，但是用作调试器命令的参数解析器并不适当。使用通常情况下的调试器命令或调试器扩展时，应该将MASM表达式设置为默认类型。如果有某个参数必须使用C++表达式语法时，使用@@号。 </span>
<p>关于两种不同类型表达式的更多信息，查看<a>数值表达式语法</a>。
<h4>表达式中的数字 </h4>
<p>MASM表达式中的数字根据当前的进制数来进行解释。<a><strong>n&nbsp;(Set Number Base)</strong></a> 命令可以用来将进制设置为16、10或8。所有未加前缀的数字都会按这个进制来解释。默认的进制数可以用<strong>0x</strong>(16进制)、<strong>0n</strong>(10进制)、<strong>0t</strong>(8进制)或<strong>0t</strong>(2进制)前缀覆盖掉。
<p>在C++表达式中的数字如果没有专门指定，则被认为是10进制数。可以在数字前加上<strong>0x</strong> 来指定16进制整数，加上<strong>0</strong>来指定8进制整数。(但是，在调试器的<em>输出</em>中，有时候<strong>0n</strong>前缀用于8进制整数。)
<p>如果一次想以不同进制数来显示数字，可以使用<a><strong>.formats (Show Number Formats)</strong></a>命令。
<h4>表达式中的符号 </h4>
<p>两种表达式解释符号的方式不同：
<ul>
    <li>在MASM表达式中，所有的符号都解释为地址。根据符号指向的数据的不同，可能是全局变量，本地变量，函数，段，模块或其他可识别标志的地址。
    <li>在C++表达式中，符号按照它们的类型来解析。根据符号意义的不同，可能是整数、数据结构、函数指针，或其他数据类型。如果符号和C++数据类型不符合(例如未更改的模块名)，则会产生一个语法错误。 </li>
</ul>
<p>如果符号不明确，可以在它前面加上模块名和感叹号(<strong>!</strong>)，或者只加上感叹号。关于符号解析的更多信息，查看<a>符号语法和符号匹配</a>。
<h4>表达式中的运算符 </h4>
<p>不同的表达式类型使用不同的运算符集合。
<p>关于MASM表达式中的运算符和他们的运算优先级的更多信息，查看<a>MASM数字和运算符</a>。
<p>关于C++表达式的运算符和优先级规则，查看<a>C++ 数字和运算符</a>。
<p>MASM运算符都是基于byte的，C++运算符由C++类型决定(包括指针的转换)。
<p>关于不同语法的示例，查看<a>表达式示例</a>。
<h1>使用外壳命令 </h1>
<p>调试器可以将一些特定的命令传递给它运行的Microsoft Windows环境。
<p>在 任何Windows 调试器中都可以使用<a><strong>.shell&nbsp;(Command Shell)</strong></a> 命令。该命令可以从调试器直接执行应用程序或者Microsoft MS-DOS命令。如果在进行<a>远程调试</a>，则这些外壳命令在<em>服务端</em>上运行。
<p><a><strong>.noshell&nbsp;(Prohibit Shell Commands)</strong></a> 命令或<strong>-noshell</strong> <a>命令行选项</a>可以禁用所有外壳命令。即使开始了一个新的调试会话，调试器运行时命外壳令还是被禁用。在KD中使用<a><strong>.restart&nbsp;(Restart Kernel Connection)</strong></a>命令之后，外壳命令仍然被禁用。
<p>如果在运行远程调试服务器，可能需要禁用掉外壳命令。因为如果这些命令可用，远程连接可以使用<strong>.shell</strong> 来修改计算机。
<h4>网络驱动器 </h4>
<p>在WinDbg中，可以用<a><strong>File | Map Network Drive</strong></a> 和<a><strong>File | Disconnect Network Drive</strong></a> 菜单命令来控制网络驱动器的映射。这些改变都作用在WinDbg运行的计算机上，而不是远程连接到WinDbg的计算机。
<h1>使用别名 </h1>
<p><em>别名</em>是用来自动被其他字符串替换的字符串。可以在调试器命令中使用它们来避免重复输入特定的字符串。
<p>别名由<em>别名(alias name)</em>和<em>别名等价字符串(alias equivalent)</em>组成。当使用 别名作为调试器命令的一部分时，会被自动替换为等价字符串。这种替换是在命令被解析或执行之前进行的。
<p>调试器支持以下三种别名：
<ul>
    <li>可以设置和命名<em>自定义别名(user-named aliases)</em>。
    <li>设置<em>固定别名</em>，他们必须名为<strong>$u0</strong>, <strong>$u1</strong>, ..., <strong>$u9</strong>。
    <li>调试器设置的<em>自动别名(automatic aliases)</em>。 </li>
</ul>
<h4>定义自定义别名 </h4>
<p>定义自定义别名时，可以选择别名和等价字符串：
<ul>
    <li>别名可以是不包含空格的任意字符串。
    <li>等价字符串可以是任意字符串。如果在键盘上输入，则等价字符串不能包含头部的空格或回车。等价字符串可以是内存中的字符串、数值表达式的值、文件中的内容、环境变量值或一个或多个调试器命令的输出。 </li>
</ul>
<p>别名和等价字符串都是大小写敏感的。
<p>使用<a><strong>as&nbsp;(Set Alias)</strong></a> 或 <a><strong>aS&nbsp;(Set Alias)</strong></a> 命令来定义或修改自定义别名。
<p>使用<a><strong>ad&nbsp;(Delete Alias)</strong></a> 命令删除别名。
<p>列举当前所有自定义别明，使用<a><strong>al&nbsp;(List Aliases)</strong></a>命令。
<h4>定义固定别名 </h4>
<p>有10个固定别名。他们是<strong>$u0</strong>, <strong>$u1</strong>, ..., <strong>$u9</strong>。他们的等价字符串可以是不包含ENTER键的任意字符串。
<p>使用<a><strong>r&nbsp;(Registers)</strong></a> 命令为固定别明指定等价字符串。定义固定别名时，必须在字母"u"之前插入点号(.)。等号(=)之后的文本是等价字符串。等价字符串可以包含空格或分号，但是头部和尾部的空格被忽略掉。不能用引号将等价字符串括起来(除非希望替代结果中包含引号)。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;<strong>r&nbsp;(Registers)</strong>命令设置固定别名容易混淆。这些别明不是寄存器或伪寄存器，即使使用了<strong>r</strong>命令来设置了他们的等价字符串。这些别名前不需要添加at符号(@)，也不能使用<strong>r</strong>命令来<em>显示</em>这些别明的值。 </span>
<p>默认情况下，如果没有定义固定别名，他们是空字符串。
<h4>自动别名 </h4>
<p>调试器预设了下面一些自动别名
<div>
<table style="BORDER-COLLAPSE: collapse" border=0>
    <colgroup>
    <col style="WIDTH: 187px">
    <col style="WIDTH: 403px">
    <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>等价字符串</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><strong>$ntnsym</strong> </p>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                <p>当前系统架构NT符号的最适合的模块。该别名可能是<strong>ntdll</strong>和<strong>nt</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><strong>$ntwsym</strong> </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>WOW64</a>的32位调试最适合的NT符号的模块名。该别名可以是<strong>ntdll32</strong>或<em>Ntdll.dll</em>的其他32位版本。 </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><strong>$ntsym</strong> </p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p>当前机器模式最适合的NT符号的模块名。以本地模式调试时，该别名和<strong>$ntnsym</strong>一样。当在非本地模式调试时，调试器会尝试找到适合这个模式的模块名。(例如，在使用WOW64的32位调试时，该别明和<strong>$ntwsym</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><strong>$CurrentDumpFile</strong> </p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p>调试器上一次加载的dump文件名字。 </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><strong>$CurrentDumpPath</strong> </p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p>调试器上一次加载的dump文件所在的目录。 </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><strong>$CurrentDumpArchiveFile</strong> </p>
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                    <p>调试器上一次加载的dump存档文件(CAB文件)名字。 </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><strong>$CurrentDumpArchivePath</strong> </p>
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                        <p>调试器上一次加载的dump存档文件(CAB文件)所在目录。</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                            </div>
                            <p>&nbsp;
                            <p>除了可以使用别名相关的字符(例如<strong>${&nbsp;}</strong>)而伪寄存器不可以使用之外，自动别名和<a>伪寄存器</a>类似。
                            <h4>在调试器命令窗口使用别名 </h4>
                            <p>定义了别名之后，可以在任何命令入口中使用。别名会自动被等价字符串替代。因此，可以将别名作为表达式或者宏使用。
                            <p>即使被引号括起来，别名仍然可以被正确展开。因为等价字符串可以包含任意数量的引号和分号，等价字符串可以代表多个命令。
                            <p>自定义别名和其他字符之间必须使用空白字符隔开才能被识别。别名的第一个字符之前和最末一个字符之后必须是空格、分号或者引号。
                            <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;在<a>调试器命令窗口</a>输入的以"as", "aS", "ad", 或者 "al" 开头的文本不会进行别名替换。该限制避免不合适的别名替换。但是，这也意味着一行中跟在<strong>ad</strong> 或 <strong>al</strong> 之后的命令的别名不会被替换掉。如果想在以这些字符串开头的行中使用别名替换，可以在别名前加上分号。 </span>
                            <p>也可以使用<strong>${&nbsp;}</strong>符号来展开和其他文本连在一起的自定义别名。也可以和特定的开关一起使用该符号来避免别名被展开，或者显示特定别名的值。关于这些情况的更多信息，查看<a><strong>${&nbsp;}&nbsp;&nbsp;(Alias Interpreter)</strong></a>。
                            <p>不管在文本中嵌入得多深，自定义别名可以在一行的<em>任意</em>位置展开。
                            <p>只在WinDbg中支持的命令(<a><strong>.open</strong></a>, <a><strong>.write_cmd_hist&nbsp;(Write Command History)</strong></a>, <a><strong>.lsrcpath</strong></a>, 和 <a><strong>.lsrcfix</strong></a>)和少数辅助命令 (<a><strong>.hh</strong></a>, <a><strong>.cls</strong></a>, <a><strong>.wtitle</strong></a>, <a><strong>.remote</strong></a>, 内核模式 <a><strong>.restart</strong></a>, 和用户模式 <a><strong>.restart</strong></a>) 不能使用别名。
                            <h4>示例 </h4>
                            <p>如下例，可以使用别名来避免输入很长的或很复杂的符号。
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>as&nbsp;Short&nbsp;usersrv!NameTooLongToWantToType</strong><br>0:000&gt;&nbsp;<strong>dw&nbsp;Short&nbsp;+8</strong><br></span>
                            <p>这个例子和上一个类似，但是使用固定别名。<span style="FONT-FAMILY: 宋体"> </span>
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>r&nbsp;$.u0=usersrv!NameTooLongToWantToType</strong><br>0:000&gt;&nbsp;<strong>dw&nbsp;$u0+8</strong><br></span>
                            <p>可以为经常使用的命令定义别名作为宏。下面的示例将<strong>eax</strong>和<strong>ebx</strong>增加2次。<span style="FONT-FAMILY: 宋体"> </span>
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>as&nbsp;GoUp&nbsp;r&nbsp;eax=eax+1;&nbsp;r&nbsp;ebx=ebx+1</strong><br>0:000&gt;&nbsp;<strong>GoUp</strong><br>0:000&gt;&nbsp;<strong>GoUp</strong><br></span>
                            <p>下例使用别名简化命令输入。<span style="FONT-FAMILY: 宋体"> </span>
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>as&nbsp;Cmd&nbsp;"dd&nbsp;esp&nbsp;14;&nbsp;g"</strong><br>0:000&gt;&nbsp;<strong>bp&nbsp;MyApi&nbsp;Cmd&nbsp;</strong><br></span>
                            <p>下例和上面的示例类似，但是使用固定别名。<span style="FONT-FAMILY: 宋体"> </span>
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>r&nbsp;$.u5="dd&nbsp;esp&nbsp;14;&nbsp;g"</strong><br>0:000&gt;&nbsp;<strong>bp&nbsp;MyApi&nbsp;$u5&nbsp;</strong><br></span>
                            <p>前面两个示例实际上是下面的命令。<span style="FONT-FAMILY: 宋体"> </span>
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>bp&nbsp;MyApi&nbsp;"dd&nbsp;esp&nbsp;14;&nbsp;g"</strong><br></span>
                            <h4>递归的别名<span style="FONT-FAMILY: 宋体"> </span></h4>
                            <p>在任何别名的定义中都可以使用固定别名。也可以在固定别名定义中使用自定义别名。但是，要在自定义别名的定义中使用自定义别名，必须在<strong>as</strong>或<strong>aS</strong>命令前加上分号，否则该行不会进行别名替换。
                            <p>在这种情况下使用递归别名，每个别名都在使用的地方马上被替换。例如，下面的显示是<strong>3</strong>，不是<strong>7</strong>。
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>r&nbsp;$.u2=2&nbsp;</strong><br>0:000&gt;&nbsp;<strong>r&nbsp;$.u1=1+$u2&nbsp;</strong><br>0:000&gt;&nbsp;<strong>r&nbsp;$.u2=6&nbsp;</strong><br>0:000&gt;&nbsp;<strong>?&nbsp;$u1&nbsp;</strong><br>Evaluate&nbsp;expression:&nbsp;3&nbsp;=&nbsp;00000003<br></span>
                            <p>类似的，下例的显示是<strong>3</strong>，不是<strong>7</strong>。<span style="FONT-FAMILY: 宋体"> </span>
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>as&nbsp;fred&nbsp;2&nbsp;</strong><br>0:000&gt;&nbsp;<strong>r&nbsp;$.u1=&nbsp;1&nbsp;+&nbsp;fred&nbsp;</strong><br>0:000&gt;&nbsp;<strong>as&nbsp;fred&nbsp;6&nbsp;</strong><br>0:000&gt;&nbsp;<strong>?&nbsp;$u1&nbsp;</strong><br>Evaluate&nbsp;expression:&nbsp;3&nbsp;=&nbsp;00000003<br></span>
                            <p>下面的例子也是正确的，并且显示为<strong>9</strong>。<span style="FONT-FAMILY: 宋体"> </span>
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">0:000&gt;&nbsp;<strong>r&nbsp;$.u0=2</strong>&nbsp;<br>0:000&gt;&nbsp;<strong>r&nbsp;$.u0=7+$u0&nbsp;</strong><br>0:000&gt;&nbsp;<strong>?&nbsp;$u0</strong><br>Evaluate&nbsp;expression:&nbsp;9&nbsp;=&nbsp;00000009<br></span>
                            <h4><em>Tools.ini</em> 文件<span style="FONT-FAMILY: 宋体"> </span></h4>
                            <p>在 CDB (和<a>NTSD</a>)中，可以在<a><em>tools.ini</em></a> 文件中预定义固定别名。 与定义固定别名如下例，在[NTSD]入口中添加需要的<strong>$u</strong> 域。
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[NTSD]<br>$u1:_ntdll!_RtlRaiseException<br>$u2:"dd&nbsp;esp&nbsp;14;g"<br>$u9:$u1&nbsp;+&nbsp;42<br></span>
                            <p>不能在<em>Tools.ini</em>文件中设置自定义别名。<span style="FONT-FAMILY: 宋体"> </span>
                            <h4>固定别名和自定义别名对比 </h4>
                            <p>自定义别名比固定别名要更加容易使用。他们的定义更简单，并且可以使用<a><strong>al&nbsp;(List Aliases)</strong></a> 命令列举出来。
                            <p>固定别名即使和其他文本连在一起也能被替换掉。而将和其他文本连接在一起的自定义别名替换掉需要使用<a><strong>${&nbsp;}&nbsp;&nbsp;(Alias Interpreter)</strong></a>标记。
                            <p>固定别名的替换会在自定义别名替换<em>之前</em>进行。
                            <h1>使用脚本文件 </h1>
                            <p><em>脚本文件</em>是包含调试器命令序列的文本文件。调试器有多种多样的方法来加载和执行它。脚本文件里面的命令可以顺序执行，也可以包含复杂的流程。
                            <p>可以使用下面的方法之一来执行脚本：
                            <ul>
                                <li><em>(仅在KD和CDB中；调试器启动时)</em> 创建一个名为<em>Ntsd.ini</em> 的脚本文件，并放到启动调试器的目录中。调试器启动之后自动执行该脚本。要为启动脚本使用不同的文件，可以用<strong>-cf</strong> <a>命令行选项</a>或者<a><em>Tools.ini</em></a>文件中的<strong>IniFile</strong>入口。
                                <li><em>(仅在KD和CDB中；每个会话开始时)</em> 创建一个脚本文件并使用<strong>-cfr</strong> <a>命令行选项</a>指定它的路径和文件名。 调试器会在每次自己启动和调试目标启动时执行该脚本。
                                <li>在调试器运行之后使用<strong>$&lt;</strong>，<strong>$&gt;&lt;</strong>，<strong>$$&lt;</strong>和 <strong>$$&gt;&lt;</strong> 命令执行脚本文件。关于该语法的更多信息，查看<a><strong>$&lt;, $&gt;&lt;, $&gt;&lt;, $$&gt;&lt; (Run Script File)</strong></a>。 </li>
                            </ul>
                            <p>使用<strong>$&gt;&lt;</strong> 和<strong>$$&gt;&lt;</strong>命令执行脚本和其他方法有一个很重要的不同点。使用它们时，调试器打开指定的脚本文件，并使用分号替换掉所有回车符，然后将替换后的文本作为单个命令块来执行。这几个命令对于包含调试器命令程序的脚本很有用。关于这些程序的更多信息，查看<a>使用调试器命令程序</a>。
                            <p>只在WinDbg中支持的命令(<a><strong>.open</strong></a>, <a><strong>.write_cmd_hist&nbsp;(Write Command History)</strong></a>, <a><strong>.lsrcpath&nbsp;(Set Local Source Path)</strong></a>, 和 <a><strong>.lsrcfix&nbsp;(Use Local Source Server)</strong></a>)不能在脚本文件中使用，即使脚本是在WinDbg中执行的。另外，也不能在脚本文件中使用<a><strong>.hh&nbsp;(Open HTML Help File)</strong></a>, <a><strong>.cls&nbsp;(Clear Screen)</strong></a>， <a><strong>.wtitle&nbsp;(Set Window Title)</strong></a>，<a><strong>.remote (Create Remote.exe Server)</strong></a> 、内核模式 <a><strong>.restart&nbsp;(Restart Kernel Connection)</strong></a> 和用户模式 <a><strong>.restart&nbsp;(Restart Target pplication)</strong></a> 命令。
                            <p style="MARGIN-LEFT: 14pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;除了一个小例外，WinDbgzhichi的脚本和KD、CDB一样。只能在KD或CDB使用的脚本中使用<a><strong>.remote_exit&nbsp;(Exit Debugging Client)</strong></a> 命令。不能在WinDbg执行的脚本中退出一个调试客户端。</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----14&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/43281.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-04-22 23:56 <a href="http://www.cnitblog.com/cc682/articles/43281.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----13</title><link>http://www.cnitblog.com/cc682/articles/43282.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Thu, 10 Apr 2008 04:53:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43282.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43282.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43282.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43282.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>WinDbg图形界面</a>
<p><a>调试器配置</a>
<p><a>调试器操作(常规)</a>
<p><a>调试器操作(用户模式)</a>
<p><a>调试器操作(内核模式)</a>
<p><a>调试器扩展</a>
<p><a>远程调试</a>
<h1>启动调试器 </h1>
<p>启动了CDB，KD或者WinDbg之后，有几种办法可以选择调试目标。
<p>KD和CDB都和目标一起启动，当会话结束时，调试器也会退出。
<p>另一方面，WinDbg可以在未选择目标的情况下启动。可以从命令提示符启动，或者从<strong>开始</strong>菜单打开<strong>Debugging Tools for Windows</strong> 并选择<strong>WinDbg</strong> 。也可以不用退出WinDbg就停止WinDbg调试会话。如果未指定目标就打开WinDbg或者停止WinDbg的会话，它会进入<em>静止模式</em>(<em>dormant mode</em>)。在这个模式下，可以选择调试目标并开始一个新的会话。
<p>本节描述了下面一些方法用于启动调试会话。每种方法都包括启动新调试器或者在静止的WinDbg中选择目标。
<p><a>附加到运行中的进程(用户模式)</a>
<p><a>创建一个新进程(用户模式)</a>
<p><a>非侵入式调试(用户模式)(Noninvasive Debugging</a>)
<p><a>附加到目标机(内核模式)</a>
<p><a>附加到虚拟机(内核模式)</a>
<p><a>通过内核调试器控制用户模式调试器</a>
<p><a>打开崩溃转储(Crash Dump)</a>
<p>也可以按如下方法开始调试会话：
<ol>
    <li>连接到调试服务器来加入远程调试会话。关于这种方法的更多信息，查看<a>激活调试客户端</a>。
    <li>当用户模式进程出错时，可以自动打开调试器。这种方法的更多信息，查看<a>启用即时调试</a>。
    <li>可以通过加载命名的工作空间(workspace)来恢复以前的调试会话。关于该方法的更多信息，查看<a>使用工作空间</a>。 </li>
</ol>
<h1>附加到运行中的进程(用户模式) </h1>
<p>如果用户模式应用程序已经在运行了，调试器可以附加到这个进程并调试它。通常需要用操作系统指派的称为<em>进程ID(PID)</em>的十进制数字来指定这个程序。
<p>也可以通过包含文件扩展名在内的完整名字来指定进程。但是，如果两个进程有相同的名字时，必须使用进程ID。 (关于如何找到进程ID和进程名，查看<a>查找进程ID</a>)。
<p>下节描述了几种附加到进程的方法。
<h4>CDB命令提示符 </h4>
<p>在CDB命令提示符附加到运行中的进程，以如下语法使用<strong>-p</strong>选项和进程ID。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>cdb&nbsp;-p</strong>&nbsp;<em>ProcessID</em>&nbsp;<br></span>
<p>或者使用下面的语法通过进程名附加。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>cdb&nbsp;-pn</strong>&nbsp;<em>ProcessName</em>&nbsp;<br></span>
<p>还有一些其它有用的命令行选项。例如，可以使用<strong>-psn</strong>选项来指定要调试的进程所包含的服务名。关于命令行语法的更多信息，查看<a>CDB命令行选项</a>。<span style="FONT-FAMILY: 宋体"> </span>
<h4>WinDbg 命令提示符 </h4>
<p>通过WinDbg命令提示符附加到运行中的进程，按如下语法指定<strong>-p</strong>选项和进程ID。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>windbg&nbsp;-p</strong>&nbsp;<em>ProcessID</em>&nbsp;<br></span>
<p>或者按下面的语法通过进程名附加。 <span style="FONT-FAMILY: 宋体"></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>windbg&nbsp;-pn</strong>&nbsp;<em>ProcessName</em>&nbsp;<br></span>
<p>还有一些其它有用的命令行选项。例如，可以使用<strong>-psn</strong>选项来指定要调试的进程所包含的服务名。关于命令行语法的更多信息，查看<a>WinDbg 命令行选项</a>。<span style="FONT-FAMILY: 宋体"> </span>
<h4>WinDbg 菜单 </h4>
<p>当WinDbg在静止模式时，可以通过在<strong>File</strong>菜单中选择<a><strong>Attach to a Process</strong></a> 或者按F6来附加到运行中的进程。
<p><strong>Attach to Process</strong> 对话框出现时，选择包含想调试的进程ID和名字的一行，(也可以在<strong>Process ID</strong> 文本框中输入进程ID。)然后点击<strong>OK</strong>。
<h4>调试器命令窗口 </h4>
<p>如果调试器已经打开，可以在<a>调试器命令窗口</a>使用<a><strong>.attach&nbsp;(附加到进程)</strong></a>命令来附加到运行中的进程。
<p>如果CDB是静止的或者已经在调试一个或多个进程，也可以使用<strong>.attach</strong>命令。如果WinDbg是静止的，则不能使用该命令。
<p>多个目标进程总是一起执行的，除非它们的一些现成被冻结或暂停。
<p>如果<strong>.attach</strong> 命令成功，调试器会在下一次执行命令的时候附加到指定进程。如果在一行中使用了这个命令多次，则每一条.attach命令都需要执行一次其他命令。
<h4>非侵入式调试 </h4>
<p>如果想调试运行中的程序，并且只对它的执行造成最小的影响，可以<a><em>非侵入式(noninvasively)</em></a>调试该进程。
<h4>开始调试会话 </h4>
<p>关于如何开始调试会话的更多信息，查看<a>调试器配置</a>， <a>符号</a>， <a>调试器操作(常规)</a>和 <a>调试器操作(用户模式)</a>。
<p>调试器创建的进程行为和通常条件下不同。更多关于这些种类进程的信息，查看<a>被创建进程的行为</a>。
<p>在Microsoft Windows XP和之后的Windows系统中，如果调试器停止相应或者冻结了，可以将一个新的调试器附加到目标进程上。关于如何在这种情况下附加调试器的更多信息，查看<a>重新附加目标进程</a>。
<h1>创建一个新进程(用户模式) </h1>
<p>调试器可以启动用户模式程序并调试它。如同在命令提示符或者Microsoft Windows系统的<strong>运行</strong>对话框启动一样，使用名字来指定程序。
<p>调试器也可以自动附加到<em>子进程(child processes)</em> (目标进程创建的另一个进程)。
<p>本主题的下一小节描述了开始新进程的几种方法。
<h4>CDB 命令提示符 </h4>
<p>在CDB命令提示符下启动用户模式程序，需要按如下形式在CDB命令的最后插入对应用程序的命令行。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>cdb</strong>&nbsp;[<strong>-o</strong>]&nbsp;<em>ProgramName</em>&nbsp;[<em>Arguments</em>]&nbsp;<br></span>
<p><strong>-o</strong> 选项使得调试器附加到子进程。还有一些其它有用的命令行选项。关于命令行语法的更多信息，查看<a>CDB命令行选项</a>。<span style="FONT-FAMILY: 宋体"> </span>
<h4>WinDbg 命令提示符 </h4>
<p>在WinDbg命令提示符下启动用户模式程序，需要按如下形式在WinDbg命令的最后插入对应用程序的命令行。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>windbg</strong>&nbsp;[<strong>-o</strong>]&nbsp;<em>ProgramName</em>&nbsp;[<em>Arguments</em>]&nbsp;<br></span>
<p><strong>-o</strong> 选项使得调试器附加到子进程。还有一些其它有用的命令行选项。关于命令行语法的更多信息，查看 <a>WinDbg命令行选项</a>。<span style="FONT-FAMILY: 宋体"> </span>
<h4>WinDbg 菜单 </h4>
<p>当WinDbg在静止模式时，可以在<strong>File</strong>菜单中点击<a><strong>Open Executable</strong></a>或者按下CTRL+E来启动新进程。
<p>当<strong>Open Executable</strong> 对话框出现时，在<strong>File name</strong>文本框里输入可执行文件的完整路径或者使用<strong>Look in</strong>列表框来选择路径和文件。 (如果在<strong>运行</strong>对话框或命令提示符窗口中创建进程，Windows会在命令路径下搜索可执行文件，但是<strong>Open Executable</strong> 对话框需要精确的路径。)
<p>如果想为用户模式程序使用任何命令行参数，可以在<strong>Arguments</strong> 文本框中输入。如果要修改掉默认的运行目录，在<strong>Start directory</strong> 中输入。如果希望WinDbg附加到子进程，选上<strong>Debug child processes also</strong> 选择框。
<p>选择完成后，点击<strong>Open</strong>。
<h4>调试器命令窗口 </h4>
<p>如果调试器已经激活，可以通过<a>调试器命令窗口</a>中输入<a><strong>.create&nbsp;(创建进程)</strong></a>命令来创建新进程。
<p>如果CDB在静止状态或者已经在调试一个或多个进程，可以使用<strong>.create</strong> 命令。不能在WinDbg静止时使用。
<p>多个目标进程总是一起执行的，除非它们的一些现成被冻结或暂停。
<p>如果<strong>. create</strong>命令成功，调试器会在下一次执行命令的时候创建指定进程。如果在一行中使用了这个命令多次，则每一条.create命令都需要执行一次其他命令。
<p>可以在<strong>.create</strong>之前先使用<a><strong>.createdir&nbsp;(设置被创建进程目录)</strong></a>命令来设置程序的启动目录。可以用<strong>.createdir &#8211;I</strong>命令或<strong>-noinh</strong> 命令行选项来控制目标程序是否继承调试器的句柄。
<p>在Windows XP和之后版本的Windows系统中，可以使用<a><strong>.childdbg&nbsp;(调试子进程)</strong></a>命令来启用或禁用对子进程的调试。
<h4>开始调试会话 </h4>
<p>关于如何开始调试会话的更多信息，查看<a>调试器配置</a>， <a>符号</a>， <a>调试器操作(常规)</a>和 <a>调试器操作(用户模式)</a>。
<p>在Microsoft Windows XP和之后的Windows系统中，如果调试器停止相应或者冻结了，可以将一个新的调试器附加到目标进程上。关于如何在这种情况下附加调试器的更多信息，查看<a>重新附加目标进程</a>。
<h1>非侵入式调试(用户模式) </h1>
<p>如果用户模式应用程序正在运行，调试器可以<em>非侵入式</em>的调试它。在非侵入式调试下，调试动作会少一些。但是，可以将调试器对目标程序的影响降到最低。
<p>在非侵入式调试下，调试器实际上并没有<em>附加</em>到目标程序。调试器暂停目标的所有线程并访问它的内存、注册表和其他信息。但是，调试器不能<em>控制</em>目标，所以类似<a><strong>g&nbsp;(运行)</strong></a> 这样的命令都不能工作。
<p>如果在非侵入式调试时试图执行不允许的命令，会收到这样的错误信息： "The debugger is not attached, so process execution cannot be monitored."
<p>结束调试会话时，调试器释放目标程序，并且目标程序继续运行。可以使用<a><strong>q&nbsp;(退出)</strong></a>, <a><strong>.detach&nbsp;(取消进程附加)</strong></a>或者WinDbg的 <a><strong>Debug&nbsp;|&nbsp;Detach Debuggee</strong></a> 或 <a><strong>Debug&nbsp;|&nbsp;Stop Debugging</strong></a> 命令来关闭会话。 (如果通过关闭调试器窗口，或者使用WinDbg的<strong>File</strong>菜单的<strong>Exit</strong>命令，目标进程一般会停止响应。)
<p>如果当目标程序运行在Microsoft NT或Windows 2000下，并且希望结束会话时不结束它，非侵入式调试是很有用的。(这些系统上如果调试器附加到了目标就不能再取消附加。) 非侵入式调试在当目标程序停止相应并且不能打开附加时需要的中断线程时也很有用。
<h4>选择要调试的进程 </h4>
<p>可以通过进程ID(PID)或进程名来指定目标程序。
<p>如果用名字指定程序，则会要使用进程包含扩展名在内的的完整名字。如果两个进程有相同的名字，则必须使用进程ID。
<p>关于如何找到进程ID和进程名，查看<a>查找进程ID</a>。
<p>下小节描述了进行非侵入式调试的几种方法。
<h4>CDB 命令提示符 </h4>
<p>使用CDB命令提示符对运行中进程进行非侵入式调试，用如下语法使用<strong>-pv</strong> 、<strong>-p</strong> 选项和进程ID。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>cdb&nbsp;-pv&nbsp;-p</strong>&nbsp;<em>ProcessID</em>&nbsp;<br></span>
<p>或者按照如下语法用进程名指定。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>cdb&nbsp;-pv&nbsp;-pn</strong>&nbsp;<em>ProcessName</em>&nbsp;<br></span>
<p>还有一些其它有用的命令行选项。关于命令行语法的更多信息，查看<a>CDB命令行选项</a>。<span style="FONT-FAMILY: 宋体"> </span>
<h4>WinDbg 命令提示符 </h4>
<p>使用WinDbg命令提示符对运行中进程进行非侵入式调试，用如下语法使用<strong>-pv</strong> 、<strong>-p</strong> 选项和进程ID。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>windbg&nbsp;-pv&nbsp;-p</strong>&nbsp;<em>ProcessID</em>&nbsp;<br></span>
<p>或者按照如下语法用进程名指定。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>windbg&nbsp;-pv&nbsp;-pn</strong>&nbsp;<em>ProcessName</em>&nbsp;<br></span>
<p>还有一些其它有用的命令行选项。关于命令行语法的更多信息，查看<a>WinDbg命令行选项</a>。<span style="FONT-FAMILY: 宋体"> </span>
<h4>WinDbg 菜单 </h4>
<p>当WinDbg在静止模式时，可以点击<strong>File</strong>菜单的<strong>Attach to a Process</strong> 或者按F6来对运行中进程进行非侵入式调试。
<p><strong>Attach to Process</strong> 对话框出现时，选中<strong>Noninvasive</strong> 选择框。然后选中包含目标进程ID和名字的一行。(也可以在<strong>Process ID</strong>文本框自己输入进程ID)。最后，点击<strong>OK</strong>。
<h4>调试器命令窗口 </h4>
<p>如果调试器已经激活，可以使用<a>调试器命令窗口</a>输入<a><strong>.attach -v (附加到进程)</strong></a> 命令进行非侵入式调试。
<p>可以在调试器已经在对一个或多个进程进行<em>侵入式</em>调试的情况下使用<strong>.attach</strong> 命令。也可以在CDB静止的时候使用，但是不能在WinDbg静止时使用。
<p>如果<strong>.attach -v</strong> 命令成功，调试器会在自己执行下一条命令时开始调试指定进程。因为非侵入式调试不允许被调试进程执行，所以一次只能对一个进程进行非侵入式调试。这也意味着<strong>.attach -v</strong> 命令可能使得已存在的其他侵入式调试会话受到限制。
<h4>开始调试会话 </h4>
<p>关于如何开始调试会话的更多信息，查看<a>调试器配置</a>， <a>符号</a>， <a>调试器操作(常规)</a>和 <a>调试器操作(用户模式)</a>。
<h1>附加到目标机(内核模式) </h1>
<p>在使用KD或者WinDbg开始内核调试之前，必须指定如何连接到目标机。
<p>下面小节描述了附加到目标机的一些方法。
<h4>KD命令提示符 </h4>
<p>使用下面的命令之一来通过KD命令提示符开始内核调试会话。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>kd&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k&nbsp;com:port=</strong><em>ComPort</em><strong>,baud=</strong><em>BaudRate</em>&nbsp;<br><strong>kd&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k&nbsp;1394:channel=</strong><em>1394Channel</em>[<strong>,symlink=</strong><em>1394Protocol</em>]&nbsp;<br><strong>kd&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k&nbsp;usb2:targetname=</strong><em>String</em>&nbsp;<br><strong>kd&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k&nbsp;com:modem</strong>&nbsp;<br><strong>kd&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-kl</strong>&nbsp;<br><strong>kd&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<br></span>
<p>如果不包含<strong>-k</strong>命令行选项，连接选项由特定的环境变量决定。关于内核调试连接选项和他们使用上的限制的更多信息，查看<a>选择内核调试设置</a>。关于其他选项的信息，查看<a>KD命令行选项</a>。<span style="FONT-FAMILY: 宋体"> </span>
<p>在会话开始之后还能通过<a>CTRL+A</a>修改内核调试连接的波特率。
<h4>WinDbg命令提示符 </h4>
<p>使用下面的命令来通过WinDbg命令提示符开始内核调试会话。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>windbg&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k&nbsp;com:port=</strong><em>ComPort</em><strong>,baud=</strong><em>BaudRate</em>&nbsp;<br><strong>windbg&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k&nbsp;1394:channel=</strong><em>1394Channel</em>[<strong>,symlink=</strong><em>1394Protocol</em>]&nbsp;<br><strong>windbg&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k&nbsp;usb2:targetname=</strong><em>String</em>&nbsp;<br><strong>windbg&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k&nbsp;com:modem</strong>&nbsp;<br><strong>windbg&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-kl</strong>&nbsp;<br><strong>windbg&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k</strong>&nbsp;<br></span>
<p>如果不包含<strong>-k</strong>命令行选项，关于内核调试连接选项和他们使用上的限制的更多信息，查看<a>选择内核调试设置</a>。关于其他选项的信息，查看 <a>WinDbg命令行选项</a>。<span style="FONT-FAMILY: 宋体"> </span>
<p>在调试会话开始之后，还可以通过点击<a><strong>Debug&nbsp;|&nbsp;Kernel Connection&nbsp;|&nbsp;Cycle Baud Rate</strong></a> 命令或者按下CTRL+ALT+A来修改波特率。
<h4>WinDbg 菜单 </h4>
<p>当WinDbg在静止模式时，可以通过点击<strong>File</strong>菜单的<strong>Kernel Debug</strong>或者按下CTRL+K来开始内核调试会话。
<p>当<strong>Kernel Debugging</strong> 对话框出现时，点击<strong>COM</strong> 、<strong>1394</strong>或<strong>Local</strong>选项卡。每个选项卡都指定了不同的连接方式。关于这个对话框的更多信息，查看<a><strong>File&nbsp;|&nbsp;Kernel Debug</strong></a>。
<p>如果让<strong>Kernel Debugging</strong> 对话框中的内容都为空，则由特定的环境变量来设置连接。关于这些设置的更多信息，查看<a>选择内核调试设置</a>。
<h4>开始会话 </h4>
<p>在主控机一端的调试器启动并等待连接之后，启动目标机。如果目标机的<em>Boot.ini</em>文件中启用了调试器(在<a>编辑Boot.ini文件</a>中描述)，目标机的调试器会在启动早期就自动连接上来。
<p>如果目标机停止响应，可能是因为较早之前的内核调试动作造成的等待，或者使用了<strong>-b</strong> <a>命令行选项</a>，调试器立即中断了目标机。
<p>否则，目标及会继续运行，直到调试器的中断。
<p>关于之后的步骤的更多信息，查看<a>调试器配置</a>， <a>符号</a>， <a>调试器操作(常规)</a>和<a>调试器操作(内核模式)</a>。
<h4>1394 配置 </h4>
<p>如果是在启用1394调试连接之后第一次启动内核调试器，一个驱动程序将会安装到主控机上。必须在进行这次调试会话时以管理员登陆目标机。关于该驱动的更多信息，查看<a>安装1394虚拟驱动</a>。
<p>还必须为1394电缆内核调试配置目标机。关于配置的更多信息，查看<a>禁用1394控制器</a>。
<h1>附加到虚拟机(内核模式) </h1>
<p>KD和WinDbg可以对虚拟机进行内核调试。虚拟机可以运行在调试器同一台物理机器上，或者在连接到相同网络的另一台机器上。
<p>在开始调试之前，需要在虚拟机上创建一条命名管道。调试器通过该管道进行连接。关于如何创建管道，查看所使用的虚拟机文档。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意&nbsp;&nbsp;</strong>如果使用VMWare的功能来重起虚拟机(例如，重起按钮)，需要退出WinDbg并重新打开WinDbg来继续调试。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在进行虚拟机调试时，VMWare通常会占用100%的CPU资源。 </span>
<h4>开启调试器 </h4>
<p>如果虚拟机和调试器运行于同一台物理计算机，使用下面的命令之一来开始调试会话。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>kd&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k</strong>&nbsp;<strong>com:pipe,port=\\.\pipe\</strong><em>PipeName</em>[<strong>,resets=0</strong>][<strong>,reconnect</strong>]&nbsp;<br><br><strong>windbg&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k</strong>&nbsp;<strong>com:pipe,port=\\.\pipe\</strong><em>PipeName</em>[<strong>,resets=0</strong>][<strong>,reconnect</strong>]&nbsp;<br></span>
<p>如果虚拟机和调试器运行在不同的计算机上，需要使用下面的命令之一来启动会话。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>kd&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k</strong>&nbsp;<strong>com:pipe,port=\\</strong><em>VMHost</em><strong>\pipe\</strong><em>PipeName</em>[<strong>,resets=0</strong>][<strong>,reconnect</strong>]&nbsp;<br><br><strong>windbg&nbsp;</strong>[-<strong>y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;<strong>-k</strong>&nbsp;<strong>com:pipe,port=\\</strong><em>VMHost</em><strong>\pipe\</strong><em>PipeName</em>[<strong>,resets=0</strong>][<strong>,reconnect</strong>]&nbsp;<br></span>
<p>命令包含以下一些参数：<span style="FONT-FAMILY: 宋体"> </span>
<p><em>VMHost</em>
<p style="MARGIN-LEFT: 36pt">指定运行虚拟机的机器名字。虚拟机文档中通常以<em>virtual machine host</em> 来引用这台计算机。如果虚拟机和内核调试器在同一台主机，则<em>VMHost</em>为一个点号(.)。
<p><em>PipeName</em>
<p style="MARGIN-LEFT: 36pt">指定虚拟机创建的命名管道名。
<p><strong>resets=0</strong>
<p style="MARGIN-LEFT: 36pt">指定当主控机和目标机重新同步时，发送给目标机的重置包个数，这个数字没有限制。对于Microsoft Virtual PC和其他丢弃管道中多余数据的虚拟机，使用<strong>resets=0</strong> 参数。对于VMware 或其他不丢弃管道的多余数据的虚拟机，不要这样使用。
<p><strong>reconnect</strong>
<p style="MARGIN-LEFT: 36pt">指定调试器当管道读/写错误时，自动断开并重连。另外，如果调试器在启动时没有找到指定的管道名，<strong>reconnect</strong> 参数使得调试器一直等待名为<em>PipeName</em> 的管道出现。对Virtual PC和其他在重起虚拟机时销毁并重建管道的虚拟机使用<strong>reconnect</strong> 。对于VMWare和其他在重起计算机时保留管道的虚拟机不要使用该参数。
<p style="MARGIN-LEFT: 35pt">关于其他命令行选项，查看<a>KD命令行选项</a>或者<a>WinDbg命令行选项</a>。
<h4>开始会话 </h4>
<p style="MARGIN-LEFT: 35pt">在主控机一端的调试器启动并等待连接之后，启动目标机。如果目标机的<em>Boot.ini</em>文件中启用了调试器(在<a>编辑Boot.ini文件</a>中描述)，目标机的调试器会在启动早期就自动连接上来。
<p style="MARGIN-LEFT: 35pt">如果目标机停止响应，可能是因为较早之前的内核调试动作造成的等待，或者使用了<strong>-b</strong> <a>命令行选项</a>，调试器立即中断了目标机。
<p style="MARGIN-LEFT: 35pt">否则，目标及会继续运行，直到调试器的中断。
<p style="MARGIN-LEFT: 35pt">关于之后的步骤的更多信息，查看<a>调试器配置</a>， <a>符号</a>， <a>调试器操作(常规)</a>和<a>调试器操作(内核模式)</a>。
<h1>通过内核调试器控制用户模式调试器 </h1>
<p>可以将用户模式调试器的输入输出重定向到内核调试器。这使得内核调试器可以控制目标机上的特定用户模式调试会话。 (在这种情况下可以使用KD或者WinDbg来作为内核调试器。)
<p>可以使用CDB或NTSD作为用户模式调试器。<a>NTSD</a> 由于只对处理器和被调试程序运行的操作系统造成很小的负担，所以是相当强大的用户模式调试器。事实上，当NTSD在内核调试器控制下启动时，不会创建NTSD的窗口。通过NTSD，可以在引导过程的早期和关闭过程的末期通过串口进行用户模式调试。
<p>通过内核调试器控制用户模式调试器对于调试系统进程非常有用。关于该技术的示例，查看<a>通过NTSD调试CSRSS</a>和 <a>通过NTSD调试WinLogon</a>。
<p>也可以使用该技术来为非交互式服务设置<a>即时调试器</a>以调试停止错误(确切的说是，<em>崩溃</em>)。在Windows Vista和Windows Server 2008上，服务运行在会话0(session 0)中。交互式用户不能访问会话0，所以可以使用本地即时调试器来进行交互式的调试。要使用及时调试器交互式的调试服务，将调试器输出重定向到内核模式是非常有用的。
<p>但是，如果符号存放在远程服务器时，对于非交互式服务的即时调试可能会失败，因为当内核调试器在等待输入时很难维持对符号的连贯访问。在这种等待中，系统可能产生妨碍符号服务器验证的始终误差。这种情况下，使用如下命令来设定即时调试器。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">&lt;debugger&gt;&nbsp;-iaec&nbsp;-server&nbsp;npipe:pipe=dbg%x&nbsp;-ddefer&nbsp;-noio<br></span>
<p>当某个事件引发即时调试时，上述的命令用即时调试器的进程ID(PID)来替代<em>%x</em> 以生成唯一服务器名字，并且中断到内核调试器要求输入。这时，可以使用<a><strong>.sleep (暂停调试器)</strong></a>命令来从内核模式调试器中断中启用系统足够长时间以连接到新创建的服务器。通过使用<a><strong>!process</strong> 内核调试器扩展命令</a>，可以找到用户模式调试器道德PID，并打开到明确定义的服务器名字(<strong>dbg</strong><em>&lt;PID&gt;</em>)的连接。当用户模式调试器从<strong>.sleep</strong>命令被唤醒时，它会检测到远程连接，并从该连接获取输入，而不是在此中断到内核。这时，就可以通过新连接的远程调试器来交互式的调试系统服务并稳定访问符号。<span style="FONT-FAMILY: 宋体"> </span>
<p>如果调试用户模式应用程序并且必须使用一些内核模式调试的功能来分析问题时，可能仍然希望从内核调试器控制用户模式调试器。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;在这里描述中，<em>目标程序</em>指被调试的用户模式应用程序，<em>目标机</em>指包含目标程序和CDB、NTSD进程的计算机，<em>主控机</em>指运行内核调试器的计算机。 </span>
<h4>启动调试会话 </h4>
<p>要使用该技术，必须如下操作(按任一顺序)：
<ul>
    <li>
    <div>在主控机上启动WinDbg或KD，和想调试目标机时类似，但是不要实际中断目标机。 </div>
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>kd</strong>&nbsp;[<strong>-y</strong>&nbsp;<em>SymbolPath</em>]&nbsp;[<strong>-k</strong>&nbsp;<em>ConnectionOptions</em>]&nbsp;<br></span>
    <p>这一步的更多信息，查看<a>附加到目标机(内核模式)</a>。<span style="FONT-FAMILY: 宋体"> </span></p>
    <li>
    <div>在目标机上启动CDB或NTSD，并使用<strong>-d</strong>，命令行选项。可以按如下语法附加到运行中的进程。 </div>
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>ntsd&nbsp;-d&nbsp;-p&nbsp;</strong><em>PID</em>&nbsp;<br></span>
    <p>或者按如下语法启动新进程调试。<span style="FONT-FAMILY: 宋体"> </span>
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>ntsd&nbsp;-d&nbsp;</strong><em>ApplicationName</em>&nbsp;<br></span>
    <p>关于这一步的更多信息，查看<a>附加到运行中的进程(用户模式)</a>或 <a>创建新进程(用户模式)</a>。<span style="FONT-FAMILY: 宋体"> </span></p>
    </li>
</ul>
<p>如果使用CDB，CDB关联到的命令提示符窗口在调试进行时保持锁定并不可用。如果使用NTSD，不会有另外的窗口创建出来，但是目标机上会有NTSD的进程ID。
<p>如果想通过内核调试器运行用户模式调试器，<em>并且</em>将它作为<a>调试服务器</a>，必须用<strong>-ddefer</strong> 命令行替代<strong>-d</strong>。使用<strong>-ddefer</strong>时，用户模式调试器从<a>调试客户端</a>获得输入。如果没有这样的输入可用，调试器从内核调试器获得输入。关于调试客户端和调试服务器的更多信息，查看<a>通过调试器进行的远程调试</a>。
<h4>切换模式 </h4>
<p>当从内核调试器控制用户模式调试器时，会遇到四种可能的模式：
<p><em>用户模式调试</em>
<p style="MARGIN-LEFT: 36pt">目标机和目标程序都冻结。在内核调试器的<a>调试器命令窗口</a>中会出现用户模式提示符。在WinDbg中，会在窗口下部显示<strong>Input&gt;</strong>。可以在这里输入命令来分析目标程序的状态或者运行、单步执行，如同在用户模式调试时一样。 符号文件、扩展DLL和其他调试器访问的文件将在目标机上访问，而不是主控机。
<p><em>目标程序执行</em>
<p style="MARGIN-LEFT: 36pt">目标机运行，并且目标程序也在执行，调试器在等待状态。这和通常情况下让目标运行的状态一样。
<p><em>睡眠模式</em>
<p style="MARGIN-LEFT: 36pt">目标计算机在运行，但是目标程序和调试器被冻结。当想在目标机上作一些事情但是又不想改变调试会话的状态时，这种模式非常有用。
<p><em>内核模式调试</em>
<p style="MARGIN-LEFT: 36pt">目标机和目标程序都被冻结。内核调试器的调试器命令窗口出现内核模式调试提示符。这种模式是典型的内核调试状态。
<p>在用户模式下启动的调试会话，下面的一些操作和事件会造成模式切换：
<ul style="MARGIN-LEFT: 56pt">
    <li>从用户模式调试状态切换到目标程序运行状态，使用<a><strong>g&nbsp;(Go)</strong></a> 命令。
    <li>使用单步、跟踪或其它临时执行命令，临时从用户模式调试状态切换为运行目标程序，然后又返回到用户模式调试。关于这些命令的列表，查看<a>控制目标</a>。
    <li>使用<a><strong>.sleep&nbsp;(暂停调试器)</strong></a>命令从用户模式调试切换到睡眠模式。该命令可以指定时间，当到达这个时间时，系统返回到用户模式调试状态。
    <li>使用<a><strong>.breakin&nbsp;(中断到内核调试器)</strong></a>命令从用户模式调试切换到内核模式调试。注意，如果调用的进程没有管理员权限时，<strong>.breakin</strong> 会因为拒绝访问的错误失败。这种情况下，应该使用一个短暂的<a><strong>.sleep</strong>命令</a>切换到KD并按下CTRL+C。
    <li>可以在特定环境下从目标程序执行状态切换到用户模式调试状态。如果目标机运行Microsoft Windows XP或之后地Windows版本，可以使用<a><strong>!bpid</strong></a> 扩展命令。如果使用CDB(不是NTSD)，可以在目标机激活CDB窗口并按下CTRL+C。
    <li>如果目标程序遇到断点、异常、其它控制事件或者结束，系统从目标程序执行状态切换到用户模式调试状态。需要预先计划好这样的事件，尤其在使用NTSD时。关于这些事件的详细信息，查看<a>使用断点</a>和 <a>控制异常和事件</a>。
    <li>从目标程序执行状态切换到内核模式调试状态，在KD窗口按下CTRL+C或者在WinDbg窗口中按下CTRL+BREAK或者点击<strong>Debug</strong>菜单中的<strong>Break</strong>按钮，或者在目标机键盘上按下SYSRQ或ALT+SYSRQ键。(如果内核调试器是KD，并且在内核调试器和用户模式调试器通信时按下了CTRL+C，用户模式调试器可能截获到按下的CTRL+C。)
    <li>如果调试器遇到内核错误，或者使用了<em>breakin.exe</em>工具，系统从目标程序执行状态切换到内核模式调试状态。
    <li>从睡眠模式切换到用户模式调试状态，可以等待睡眠时间结束、使用<strong>-wake</strong> <a>命令行选项</a>在目标机启动一个新的CDB进程、或者在目标机上另一个CDB或NTSD中使用<a><strong>.wake&nbsp;(唤醒调试器)</strong></a> 命令。
    <li>要切换出内核模式调试，使用<a><strong>g&nbsp;(运行)</strong></a> 命令。该命令返回到用户模式调试或目标程序执行状态(最近一次的状态)。 </li>
</ul>
<h1>打开崩溃Dump </h1>
<p>调试器可以读取和分析由用户模式程序或者系统崩溃时生成的崩溃转储文件(crash dump file)。
<p>关于如何使用KD、WinDbg或KAnalyze打开和分析内核模式崩溃dump文件的更多信息，查看<a>分析内核模式Dump文件</a>。
<p>关于使用CDB或WinDbg打开和分析用户模式崩溃dump文件的更多信息，查看<a>分析用户模式Dump文件</a>。
<p>关于Dump文件如何创建以及它的各种不同类型的说明，查看<a>崩溃dump文件</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----13&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/43282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-04-10 12:53 <a href="http://www.cnitblog.com/cc682/articles/43282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----12</title><link>http://www.cnitblog.com/cc682/articles/43283.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Tue, 08 Apr 2008 07:13:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43283.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43283.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43283.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43283.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>
<h1>用户模式调试的硬件配置 </h1>
<p>用户模式调试一般是在单台机器上进行的：调试器和发生异常的应用程序运行在相同的计算机上。
<p>在这种情况下，不需要进行特别的硬件配置。本文档中，术语<em>主控机(host computer)</em>和<em>目标机(target computer)</em>在这种情况下是可互换的。
<p>如果要在两台机器上进行用户模式调试，参照<a>内核模式调试的硬件配置</a>来设置主控机和目标机。
<h1>用户模式调试的软件配置 </h1>
<p>本节包含：
<p><a>基本用户模式配置</a>
<p><a>配置<em>tools.ini</em></a>
<p><a>查找进程 ID</a>
<h1>基本用户模式配置 </h1>
<p>进行用户模式调试之前，必须安装必要的符号文件并设置一些环境变量。
<h4>安装符号文件 </h4>
<p>必须安装被调试的用户模式进程的符号文件。如果这是自己编写的程序，应该生成完整符号文件。如果是商业软件，符号文件可能在产品磁盘上；如果没有，可以联系开发商。
<p>如果可能，还应该安装该用户模式程序运行的Microsoft Windows版本对应的符号文件。
<p>如果进行远程调试，符号文件的位置由采用的调试方式决定：
<ul>
    <li>对于<a>通过调试器的远程调试</a>，符号文件应该在运行调试服务器的机器上。
    <li>对于 <a>通过<em>remote.exe</em>的远程调试</a>，符号文件应存放在运行调试器的机器上。
    <li>对于通过<a>进程服务器</a> 或<a>KD 连接服务器connection server</a>进行的远程调试，符号文件应该放在运行灵巧客户端(smart client)的机器上。
    <li>如果<a>通过内核调试器控制用户模式调试器</a>，需要在<em>两台</em>机器上都存放符号文件。 </li>
</ul>
<p>关于正确安装符号文件的更多信息，查看<a>符号</a>。
<h4>配置环境变量 </h4>
<p>调试器使用多个环境变量来进行重要设置。
<p>用户模式调试使用的环境变量的完整列表，查看<a>一般环境变量</a>。
<h1>配置 <em>tools.ini</em> </h1>
<p>启动时，CDB(或<a>NTSD</a>) 在<em>tools.ini</em>文件中搜索[NTSD]节，并在该节下读取初始化信息。环境变量INIT必须指向包含<em>tools.ini</em>文件的目录。
<p><em>tools.ini</em> 中[NTSD]节下的入口在下表中列出。
<p>关键字和值之间必须用空格或者冒号分隔。关键字不是大小写敏感的。
<p>对于TRUE和FALSE的值，"FALSE"是唯一表示假的值，其他任何值都表示真。
<div>
<table style="BORDER-COLLAPSE: collapse" border=0>
    <colgroup>
    <col style="WIDTH: 170px">
    <col style="WIDTH: 421px">
    <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>入口 </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>说明 </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><strong>$u0:</strong> <em>值<br><strong>...<br></strong></em>$u9: <em>值</em> </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>n</em>或<em>0xn</em>或其他任意字符串。查看<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><strong>DebugChildren:</strong> <em>标志</em> </p>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                    <p>TRUE或者FALSE。如果为TRUE，CDB调试指定程序以及它可能创建的子进程。等价的命令行参数为<strong>-o</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><strong>DebugOutput:</strong> <em>标志</em> </p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p>TRUE或者FALSE。如果为TRUE，CDB通过一个终端发送和接收数据。如果为FALSE，输出到用户屏幕上。命令行选项<strong>-d</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><strong>IniFile:</strong> <em>文件</em> </p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p>设置CDB或KD在启动时用于获取命令的脚本文件。默认值为当前目录下的<em>ntsd.ini</em>文件 。等价的命令行参数为<strong>-cf</strong>。更多信息，查看<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><strong>LazyLoad:</strong> <em>标志</em> </p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p>TRUE或者FALSE。如果为TRUE，CDB进行延迟符号加载；既直到需要的时候才加载符号。等价的命令行为<strong>-s</strong>。详细信息和设置这个选项的其他办法，查看<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><strong>SetDll:</strong> <em>文件名</em> </p>
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                    <p>设置扩展DLL。<em>.dll</em>扩展名需要省略。默认为<em>userexts.dll</em>。等价的命令行为<strong>-a</strong>。详细信息和设置这个选项的其他办法，查看<a>加载调试器扩展DLL</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><strong>StopFirst:</strong> <em>标志</em> </p>
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                        <p>TRUE或者FALSE。如果为TRUE，CDB在加载完进程映像之后中断。等价的命令行为<strong>-g</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><strong>StopOnProcessExit:</strong> <em>标志</em> </p>
                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                            <p>TRUE或者FALSE。如果为TRUE，CDB在接收到进程终止的信息时中断。等价命令行为<strong>-G</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><strong>sxd:</strong> <em>事件 </em>
                                                <p><strong>sxe:</strong> <em>事件</em> </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>&nbsp;
                                                <p>异常和事件可以按照下面的方式设定：
                                                <p>&nbsp;
                                                <p>*:默认异常
                                                <p>N:异常 <em>n</em>(十进制)
                                                <p><em>0xn</em>:异常<em>0xn</em>(十六进制)
                                                <p>(other):事件代码
                                                <p>&nbsp;
                                                <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><strong>VerboseOutput:</strong> <em>标志</em> </p>
                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                    <p>TRUE或者FALSE。如果为TRUE，CDB将显示符号处理、事件通知和其他运行时事件的详细信息。等价命令行为<strong>-v</strong>。</p>
                                                    </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        </div>
                                        <p>&nbsp;
                                        <p>下面是一个<em>tools.ini</em>文件中的[NTSD]节的示例内容：
                                        <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[NTSD]<br>sxe:&nbsp;3c<br>sxe:&nbsp;cc<br>$u0:&nbsp;VeryLongName<br>VerboseOutput:true<br><br></span>
                                        <p><em>tools.ini</em> 文件不会影响WinDbg或KD。<span style="FONT-FAMILY: 宋体"> </span>
                                        <h1>查找进程ID </h1>
                                        <p>每个运行于Microsoft Windows下的进程都被指派了一个唯一的十进制数字，称为<em>进程 ID</em>或<em>PID</em>。当附加调试器的时候，这个数字用于指定进程。
                                        <p>有很多方法可以知道指定程序的PID：使用任务管理器、使用<strong>tasklist</strong>命令、使用TList实用工具或者调试器。
                                        <h4>任务管理器 </h4>
                                        <p><em>任务管理器</em>可以通过很多办法打开，最简便的是按下CTRL+ALT+DELETE 并点击<strong>任务管理器</strong>。
                                        <p>如果选择了<strong>进程</strong>选项卡，所有进程和它的PID以及其他有用信息都会被列出。
                                        <p>一些内核错误可能使得<strong>任务管理器</strong>的图形界面延迟。
                                        <h4>Tasklist 命令 </h4>
                                        <p>在Windows XP和之后版本的Windows中，可以在命令提示符窗口使用<strong>tasklist</strong>命令。用于显示所有进程、特们的PID和其他详细信息。
                                        <h4>TList </h4>
                                        <p>TList (<em>任务列表查看器</em>, <em>tlist.exe</em>) 是一个命令行实用程序，用于显示当前本地计算机的任务列表、用户模式进程。TList 包含在Windows调试工具包中。
                                        <p>当从命令提示符运行TList时，它会显示内存中的所有用户模式进程和他们的PID。对每个进程，会显示PID、进程名，如果进程有窗口，它会显示窗口标题。
                                        <p>更多信息，查看<a>TList</a>。
                                        <h4>.tlist 调试器命令 </h4>
                                        <p>如果在机器上已经运行了一个用户模式调试器，<a><strong>.tlist&nbsp;(列举进程ID)</strong></a>命令会显示系统中所有PID的列表。
                                        <h4>CSRSS和用户模式驱动程序 </h4>
                                        <p>要调试在另外一台机器上运行的用户模式驱动程序，选择CSRSS进程(Windows子系统进程)。该进程的PID始终为-1。更多信息，查看<a>使用NTSD调试CSRSS </a>。
                                        <h1>启用即时调试 </h1>
                                        <p>大多数公共的应用程序错误称为<em>异常</em>。包括访问违例、除零、数字溢出和一些其他种类的错误。
                                        <p>应用程序也可能产生<em>断点中断</em>。当Windows不能继续运行程序(例如必须的模块不能加载)或者当遇到断点的时候会产生。断点可以由调试器插入代码中，也可以通过对类似<strong>DbgBreakPoint</strong>这样的函数调用产生。在汇编语言中，断点一般由<strong>int 3</strong>指令产生。
                                        <p>Windows可以通过各种方式处理用户模式错误。下面按优先顺序列出了错误处理方式：
                                        <ol>
                                            <li>
                                            <div>如果出错进程已经附加上了用户模式调试器，所有错误都会使得目标中断到调试器。 </div>
                                            <p>在用户模式调试器已经附加上去的时候，不会再使用其他错误处理方法，即使使用了<a><strong>gn&nbsp;(不处理异常并继续)</strong></a> 命令。 </p>
                                            <li>如果没有附加调试器并且执行的代码有自己的异常处理程序(例如<strong>try-except</strong>)，异常处理程序会被尝试用于处理错误。
                                            <li>
                                            <div>如果没有用户模式调试器附加，<em>并且</em>Windows打开了内核调试连接，<em>并且</em>错误是一个断点中断，Windows会尝试联络内核调试器。 </div>
                                            <p>内核调试连接必须在Windows引导过程中就打开。如果运行Windows Server 2003或之后的Windows，并且希望避免从用户模式中断到内核调试器，可以使用KDbgCtrl 实用工具和-<strong>du</strong>参数。关于如何配置内核调试连接及如何使用KDbgCtrl，查看<a>在目标机上配置软件</a>。
                                            <p>如果Windows尝试联系内核调试器，但是在连接的另一端没有调试器运行，Windows会停止并等待内核调试器激活。
                                            <p>在内核调试器中，可以使用<a><strong>gh&nbsp;(处理异常并继续)</strong></a> 来忽略错误并继续运行目标。使用了<a><strong>gn&nbsp;(不处理异常并继续)</strong></a> 命令来跳过内核调试器并进入第4步。 </p>
                                            <li>
                                            <div>如果上面1、2、3步骤的条件都不满足，Windows将激活一个调试工具。任何程序都可以将自己设置为在这种情况下使用的工具。被选定的程序称为<em>即时调试器</em>。也称为<em>just-in-time</em> 调试器或者<em>JIT调试器</em>。 </div>
                                            <p>如果即时调试器是标准的用户模式调试器(如CDB、WinDbg或者Microsoft Visual Studio)，该调试器会被启动起来并且中断应用程序。
                                            <p>如果即时调试器是用于创建dump文件的工具(如<a>Dr.&nbsp;Watson</a>)，将会创建一个内存转储(dump)文件，并且应用程序将被终止。 </p>
                                            </li>
                                        </ol>
                                        <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;如果Dr.&nbsp;Watson 在Windows XP或之后版本Windows中被激活，会出现一个消息框。这个窗口提供选项来发送错误报告给Microsoft。如果选择<strong>不发送</strong>(<strong>Don't Send</strong>)，一个dump文件会被创建并保存到磁盘中。如果选择<strong>发送错误报告</strong>，dump文件会被创建并保存，同时将通过网络发送给Microsoft。 </span>
                                        <p>如果没有重新配置过即时调试设置，默认的即时调试器是Dr.&nbsp;Watson 。这个设置可以通过编程或者注册表修改，并且立即生效。
                                        <ul>
                                            <li>要将即时调试器修改为WinDbg，运行<strong>windbg -I</strong> 。(<strong>I</strong>必须大写。)使用该命令后会显示成功或者失败的消息。当WinDbg是即时调试器的时候，任何应用程序崩溃时它都会激活。
                                            <li>要将即时调试器修改为CDB，运行<strong>cdb -iae</strong> 或 <strong>cdb -iaec <em>KeyString</em></strong>。使用<strong>-iaec</strong>开关时， <em>KeyString</em> 指定添加到<strong>AeDebug</strong> 注册表键后面的字符串。该命令如果成功不会有消息显示，但是失败会有提示。如果CDB是即时调试器，当应用程序崩溃时，它会自动被激活。
                                            <li>要将即时调试器修改为NTSD，运行<strong>ntsd &#8211;iae</strong>或 <strong>ntsd -iaec <em>KeyString</em></strong>。使用<strong>-iaec</strong>开关时， <em>KeyString</em> 指定添加到<strong>AeDebug</strong> 注册表键后面的字符串。如果<em>KeyString</em> 包含空格，则它必须用引号括起来。该命令如果成功不会有消息显示，但是失败会有提示。如果NTSD是即时调试器，当应用程序崩溃时，它会自动被激活。
                                            <li>要将即时调试器恢复成Dr.&nbsp;Watson，运行<strong>drwtsn32 &#8211;i</strong>。当Dr.&nbsp;Watson为即时调试器时，应用程序崩溃时会生成内存dump文件。查看 <a>Dr.&nbsp;Watson命令行选项</a> 获得详细信息。 </li>
                                        </ul>
                                        <p>只有系统管理员可以修改即时调试设置。
                                        <p>如果安装了即时调试器，用户模式应用程序可以通过调用<strong>DebugBreak</strong> 函数来主动中断到调试器中。
                                        <h4>编辑注册表 </h4>
                                        <p>即时调试设置被保存在注册表中。如果想控制这些设置，推荐使用上面描述过的WinDbg、CDB、NTSD或Dr.&nbsp;Watson 命令；他们将会自动修改相应的注册表键。如果要自己修改注册表，注意要非常小心，对注册表的不合适修改会造成Windows不能使用。
                                        <p>在x86计算机上，即时调试设置保存在<strong>\\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows&nbsp;NT\CurrentVersion\AeDebug</strong> 键。
                                        <p>在Intel Itanium计算机上，有两个用于即时调试的注册表键：
                                        <ol>
                                            <li>出错的64位应用程序会根据保存在<strong>\\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows&nbsp;NT\CurrentVersion\AeDebug</strong> 中的键来调试。
                                            <li>出错的32位应用程序会根据保存在<strong>\\HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows&nbsp;NT\CurrentVersion\AeDebug</strong> 键中的内容来调试。但是，如果该键的<strong>Debugger</strong>键值 指定了<em>%windir%\system32</em> 目录中的程序，Windows将会在<em>%windir%\syswow64</em> 中查找它。 </li>
                                        </ol>
                                        <p>当使用Itanium计算机时，通常简单的为这些键指定相同的值。特别的，如果使用WinDbg、CDB或NTSD作为即时调试器，在Itanium计算机上32位和64位用户模式程序都会使用同一个版本的调试器。查看<a>选择32位或64位调试器包</a>获取更多信息。
                                        <p>这些键中可能出现的键值有两个：
                                        <p><strong>Debugger</strong>
                                        <p style="MARGIN-LEFT: 36pt">这个REG_SZ 值指定用于进行即时调试的调试器。必须列出调试器的<em>全路径</em>，除非调试器在默认路径下。
                                        <p><strong>Auto</strong>
                                        <p style="MARGIN-LEFT: 36pt">这个REG_SZ值总是<strong>0</strong>或者<strong>1</strong> 。如果<strong>Auto</strong> 设置为<strong>0</strong>，在即时调试器打开前会先显示一个消息框。
                                        <p style="MARGIN-LEFT: 45pt">当应用程序产生未处理的异常时，Windows检查是否<strong>Debugger</strong> 和<strong>Auto</strong>键值存在。
                                        <p style="MARGIN-LEFT: 45pt">如果<strong>Auto</strong> 值为0，会出现一个消息框。
                                        <p style="MARGIN-LEFT: 45pt">在Windows NT和Windows 2000中，这个消息框会是下面的格式之一：
                                        <ul style="MARGIN-LEFT: 81pt">
                                            <li>如果<strong>Debugger</strong> 值包含有效调试器的名字或者Dr.&nbsp;Watson ，消息框包含两个按钮：<strong>确定</strong>(<strong>OK</strong>) 和<strong>取消</strong>(<strong>Cancel</strong>)。如果点击了<strong>确定</strong>，程序将被终止。如果点击<strong>取消</strong>，会启动<strong>Debugger</strong> 值中指定的工具。
                                            <li>如果<strong>Debugger</strong> 值为空，消息框只有<strong>确定</strong>(<strong>OK</strong>)按钮，并且不会启动调试器。 </li>
                                        </ul>
                                        <p>在Windows XP和之后的Windows中，消息框会是下面格式之一：
                                        <ul style="MARGIN-LEFT: 81pt">
                                            <li>如果<strong>Debugger</strong> 值包含有效调试器的名字或者Dr.&nbsp;Watson ，消息框包含三个按钮：<strong>发送错误报告</strong>(<strong>Send Error Report</strong>)、<strong>不发送</strong>(<strong>Don't Send</strong>)和<strong>调试</strong>(<strong>Debug</strong>)。如果选择<strong>不发送</strong>，应用程序被终止。如果选择<strong>发送错误报告</strong>，则向Microsoft发送一个minidump文件，程序会被终止。如果点击<strong>调试</strong>按钮，<strong>Debugger</strong> 值指定的调试器会启动。(注意所有这些按钮的作用和当<strong>Auto</strong>不为0时为Dr.&nbsp;Watson显示的消息不同。)
                                            <li>如果<strong>Debugger</strong> 为空，消息框只有<strong>发送错误报告</strong>(<strong>Send Error Report</strong>)和<strong>不发送</strong>(<strong>Don't Send</strong>)按钮。 </li>
                                        </ul>
                                        <p>如果<strong>Auto</strong> 值为1，不会出现消息框。<strong>Debugger</strong> 值中指定的调试器会自动启动。
                                        <h4>注册表示例 </h4>
                                        <p style="MARGIN-LEFT: 45pt">下面的键值用于设置Dr.&nbsp;Watson 为即时调试器(这是默认情况)：
                                        <p style="MARGIN-LEFT: 45pt"><span style="COLOR: #660000; FONT-FAMILY: Courier New">Debugger&nbsp;=&nbsp;"<strong>drwtsn32&nbsp;-p&nbsp;%ld&nbsp;-e&nbsp;%ld&nbsp;-g</strong>"<br>Auto&nbsp;=&nbsp;<strong>1</strong><br><br></span>
                                        <p style="MARGIN-LEFT: 45pt">下面的值设置WinDbg为即时调试器：<span style="FONT-FAMILY: 宋体"> </span>
                                        <p style="MARGIN-LEFT: 45pt"><span style="COLOR: #660000; FONT-FAMILY: Courier New">Debugger&nbsp;=&nbsp;"<em>Path</em><strong>\WinDbg&nbsp;-p&nbsp;%ld&nbsp;-e&nbsp;%ld</strong>"<br>Auto&nbsp;=&nbsp;<strong>1</strong><br><br></span>
                                        <p style="MARGIN-LEFT: 45pt">下面的值设置CDB为即时调试器：<span style="FONT-FAMILY: 宋体"> </span>
                                        <p style="MARGIN-LEFT: 45pt"><span style="COLOR: #660000; FONT-FAMILY: Courier New">Debugger&nbsp;=&nbsp;"<em>Path</em><strong>\CDB&nbsp;-p&nbsp;%ld&nbsp;-e&nbsp;%ld&nbsp;-g</strong>"<br>Auto&nbsp;=&nbsp;<strong>1</strong><br><br></span>
                                        <p style="MARGIN-LEFT: 45pt">在这些例子中，<em>Path</em> 是调试器所在的目录，-<strong>p&nbsp;%ld</strong> 指定被调试的进程ID，-<strong>e&nbsp;%ld</strong> 提供造成异常的事件，-<strong>g</strong> 使得调试器跳过初始断点。 (Dr.&nbsp;Watson 跳过 -<strong>g</strong> 选项。)<span style="FONT-FAMILY: 宋体"> </span>
                                        <h4>安全漏洞 </h4>
                                        <p style="MARGIN-LEFT: 45pt">如果想要在公用计算机上使用即时调试，查看<a>即时调试的安全性</a>。
                                        <h1>Windows 95, 98, 和Millennium </h1>
                                        <p>WinDbg、CDB和NTSD可以在Windows 95、Windows 98和Windows Millennium Edition上调试用户模式程序。这需要安装时进行一些附加步骤，并且功能上有所限制。这些系统上不支持内核调试。
                                        <p>这三个操作系统被统称为"Windows&nbsp;9x/Me"。
                                        <p>本节包含：
                                        <p><a>在Windows 9x/Me上安装调试器</a>
                                        <p><a>Windows 9x/Me上的调试限制</a>
                                        <p><a>Windows 9x/Me上的内核调试</a>
                                        <h1>在Windows 9x/Me上安装调试器 </h1>
                                        <p>Windows调试工具包在Windows 9x/Me上的安装由于两个原因要更加复杂一些。首先，这些系统没有原生的Unicode支持，所以需要支持Unicode。其次，Windows调试工具包使用的安装程序不兼容这些系统。
                                        <p>在Windows&nbsp;9x/Me 上安装Windows调试工具包，按以下步骤操作。
                                        <p><strong>To install the debugging tools on a Windows 9x/Me system</strong>
                                        <ol>
                                            <li>在Windows&nbsp;9x/Me计算机上安装Microsoft Layer for Unicode (MSLU)。可以在<a href="http://go.microsoft.com/fwlink/?LinkId=86543">Microsoft Layer for Unicode on Windows 95, 98, and Me Systems</a>下载。
                                            <li>在一个基于NT内核的Windows机器上下载并安装Windows调试工具包。详细信息，查看<a>从网页安装</a>。
                                            <li>在Windows&nbsp;9x/Me电脑上创建一个新文件夹。
                                            <li>将Windows调试工具包的文件从NT内核Windows的机器上拷贝到Windows&nbsp;9x/Me 机器上。 </li>
                                        </ol>
                                        <h1>Windows 9x/Me 上的调试限制 </h1>
                                        <p>在Windows&nbsp;9x/Me 上使用调试器的方式和在基于NT内核的Windows上基本上相同，只是有一些功能限制。
                                        <p>总的来说大多数功能都能使用，包括使用<a><strong>.dump</strong></a> 命令创建dump文件。
                                        <p>有下面一些限制：
                                        <h4>调试器扩展 </h4>
                                        <p>操作系统相关的调试器扩展不会被加载，所以有一些通常可用的命令不能使用。
                                        <h4>远程调试 </h4>
                                        <p>当使用CDB时通过<a><strong>.server</strong></a>命令创建的远程功能不能使用。WinDbg的远程调试能够正常工作。
                                        <p>命名管道在Windows&nbsp;9x/Me上不被支持， <a>通过调试器进行的远程调试</a>需要使用TCP/IP传输。
                                        <h4>符号 </h4>
                                        <p>Windows&nbsp;9x/Me 的核心符号是<em>.sym</em>格式的。Windows调试工具包不兼容这种格式。所有<em>.dbg</em> 或 <em>.pdb</em> 格式的符号可以正常工作。
                                        <h4><em>GDI32.dll</em>中的第一次异常处理 (First Chance Exceptions) </h4>
                                        <p>如果调试一个图形界面程序，会在<em>GDI32.dll</em> 代码中看到非常大量的第一次异常处理。这是正常的情况，但是会使得和图形应用程序的交互变的困难。要避免被这种情况中断，可以通过如下方法配置调试器跳过这些异常：
                                        <ul>
                                            <li>使用 <strong>-xd av</strong> 命令启动调试器。这使得调试器忽略第一次异常处理。
                                            <li>在CDB或者WinDbg的调试器命令窗口中输入<strong>sxd&nbsp;av</strong> 命令。使得调试器忽略第一次异常处理。
                                            <li>使用WinDbg的<strong>Event Filters</strong> 对话框，指定调试器忽略对访问违例的第一次异常处理。 </li>
                                        </ul>
                                        <p>关于这些方法的详细信息，查看<a>控制异常和事件</a>。
                                        <h1>Windows 9x/Me 上的内核调试 </h1>
                                        <p>Windows调试工具在Windows&nbsp;9x/Me 系统上不能用于内核调试。
                                        <p>要进行内核调试，必须使用WDeb 系列的调试器(例如<em>wdeb386.exe</em>)或者Microsoft Windows系统调试器(<em>debugger.exe</em>)。关于在Windows 9x上内核调试的更多信息，查看Windows Millennium Edition DDK 或者<a href="http://go.microsoft.com/fwlink/?LinkId=87071">Debugging Tools for Windows Me</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----12&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/43283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-04-08 15:13 <a href="http://www.cnitblog.com/cc682/articles/43283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----11</title><link>http://www.cnitblog.com/cc682/articles/43284.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Mon, 07 Apr 2008 03:38:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43284.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43284.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43284.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43284.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43284.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><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体"><strong>绕过引导选项 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">可能会遇到必须调试一台没有配置为内核调试的机器，但是又不能编辑引导选项的情况。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">例如，可能一台机器在到达登陆界面之前就已经蓝屏，使得不能通过Windows来修改<em>Boot.ini</em>文件。可以从软盘启动Microsoft MS-DOS，但是硬盘引导分区是NTFS格式，不能通过MS-DOS编辑<em>Boot.ini</em>。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">当不能直接编辑引导选项时，将机器重起并等到BIOS初始化过程完成。这时，如果机器中安装了多个操作系统，就可以看到引导菜单。当菜单出现时，按下F8键。如果没有多个引导选项，引导菜单不会显示出来，但是仍然可以在Windows加载的前2秒之内按下F8——在BIOS初始化接近完成的时候就开始不停的按下F8，并一直持续到菜单出现会更容易一些。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">按下F8会使得故障排除和高级设置选项菜单被显示出来。其中有一个选项为<strong>调试模式</strong>(<strong>Debugging Mode</strong>)。如果选择了这个选项，就可以启动Windows并打开内核调试支持。内核调试器连接会在计数最高的COM端口(例如，如果只有2个端口，则是COM2)以19200的波特率激活。 </span>
<h1>禁用1394控制器 </h1>
<p>要使用IEEE 1394(火线)进行内核调试，可能需要禁用目标机上的1394调试器和主控机上的1394网络适配器。所需要的调整由目标机上面运行的操作系统来决定。
<p>当目标机运行Microsoft Windows Server 2003(未安装Service Pack)或者Windows XP SP1，为了使用1394内核调试连接，必须禁用1394控制器。如果运行这些系统上的机器的1394控制器仍然启用，核心1394栈可能会和1394调试连接发生资源冲突，导致调试连接失败或者在引导期迅速断开。
<p>在Windows Vista(所有版本)，Windows Server 2003 SP1和Windows XP SP2上，不需要再目标机禁用控制器。 事实上，如果禁用这些操作系统上的控制器，可能是的在某些电源状态转换的时候妨碍调试。
<p>不管主控机运行什么系统，在任何情况下都不要禁用它的1394控制器。
<p>如果在通过1394调试运行Windows Vista之前版本的Windows有一些问题，可以禁用掉主控机上的1394网络适配器。禁用掉1394网络适配器可以解决由于加载1394网络适配器驱动造成的总线重置的环境更新(issue= = Information System and Software Update Environment？)问题。当使用IP1394时，不要禁用1394网络适配器。这种方法在Windows Vista中不存在，因为Vista不支持1394网络适配器。
<p><strong>在目标机上禁用1394控制器</strong>
<ol>
    <li>(仅在<em>Windows Server&nbsp;2003 (没有安装 service pack) 和Windows&nbsp;XP SP1上</em>)
    <li>在目标机上，打开<strong>设备管理器(Device Manager)</strong>，既点击<strong>开始</strong>，<strong>运行</strong>，并且输入<strong>Devmgmt.msc</strong> 。
    <li>找到1394控制器。根据设备管理器里面使用的不同试图，会在不同的地方找到它。一般，可以在<strong>PCI 总线</strong>(<strong>PCI Bus</strong>)节点下找到。
    <li>右键点击1394控制器，并选择<strong>禁用(Disable)</strong>。
    <li>重新启动计算机。 </li>
</ol>
<p>注意不要错误的禁用了1394网络适配器。
<p><strong>在主控机上禁用1394网络适配器</strong>
<ol>
    <li>(只在<em>Windows Server&nbsp;2003 和更早以前的系统上</em>)
    <li>在目标计算机上，打开<strong>设备管理器（Device Manager）</strong>，既点击<strong>开始</strong>，<strong>运行</strong>，并且输入<strong>Devmgmt.msc</strong> 。
    <li>展开<strong>网络适配器(Network Adapters)</strong> ，找到<strong>1394 网络适配器(1394 Net Adapter)</strong>。
    <li>右键点击<strong>1394网络适配器</strong>，并选择<strong>禁用</strong>。Right-click <strong>1394 Net Adapter</strong>, and then click <strong>Disable</strong>.
    <li>重新启动计算机 </li>
</ol>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;在通过1394电缆进行内核调试之前，还需要在主控机上进行软件配置。更多信息，查看<a>安装1394虚拟驱动</a>。 </span>
<h1>使用KDbgCtrl </h1>
<p>KDbgCtrl (内核调试控制，<em>kdbgctrl.exe</em>)工具可以用来控制目标机上的内核调试连接。
<p>要使用该工具，目标机上必须运行Windows Server 2003或之后版本的Windows。
<p>KDbgCtrl 可以控制4种不同的设置：完全的内核调试，自动内核调试，用户模式错误处理，DbgPrint缓冲区大小。
<p>要使用KDbgCtrl，必须在启动时已经在引导配置中启用了内核调试。如果没有这样，KdbgCtrl不能用于启用内核调试。更多细节和配置，查看 <a>用于启用调试的引导参数</a> 。
<h4>完全的内核调试 </h4>
<p>当完全内核调试启用时，主控机上运行的内核调试器可以中断目标机。目标机在发生内核模式异常时也会中断。从目标机到主控机的消息，如<strong>DbgPrint</strong>的输出、符号加载信息和重定向的用户模式调试器都可以使用。
<p>如果该设置禁用，则目标机跳过所有来自主控机的信息。
<p>完全内核调试默认被打开。要查看当前设置的值，使用<strong>kdbgctrl -c</strong> 。禁用设置，使用<strong>kdbgctrl -d</strong> 。启用设置，使用<strong>kdbgctrl &#8211;e</strong>。
<p>如果要检查当前配置并在批处理文件中用来控制执行，可以使用<strong>kdbgctrl -cx</strong> 命令。关于该命令的更多信息，查看 <a>KDbgCtrl命令字符串选项</a>。
<h4>自动内核调试 </h4>
<p>如果完全内核调试打开，则自动内核调试的设置无关紧要，因为所有通信都被允许。
<p>当完全内核调试禁用，自动内核调试启用时，只有目标机可以初始化调试连接。
<p>这种情况下，只有内核模式异常、断点或其他内核模式事件会使得连接被启用。<strong>DbgPrint</strong>输出、符号加载信息、重定向的用户模式调试器输入输出、或者其它相似信息都不会启用连接，这些信息会保存在DbgPrint缓冲区，而不是发送给调试器。
<p>当异常或某个事件使目标机中断到调试器，完全内核调试被自动打开，如同使用了<strong>kdbgctrl -e</strong> 命令。
<p>自动内核调试默认被关闭(这是无关紧要的，除非完全内核调试也被禁用)。查看当前设置，使用<strong>kdbgctrl &#8211;ca</strong>。禁用设置，使用<strong>kdbgctrl -da</strong> 。起用设置，使用<strong>kdbgctrl -ea</strong> 。
<h4>用户模式错误处理 </h4>
<p>当用户模式错误处理起用，一些用户模式事件会使得目标机中断到内核调试器。
<p>具体来说，所有<strong>int 3</strong>中断，如调试器插入到代码中的断点或者对<strong>DbgBreakPoint</strong>的调用会使得中断到内核调试器。但是像访问非法或者除0错误这样的标准异常通常不会被发给内核调试器。
<p>如果用户模式调试器已经附加到进程，调试器会捕捉到所有用户模式错误，不会通知内核调试其。关于各种用户模式错误处理的优先级，查看<a>启用事后调试</a>。
<p>要使用用户模式错误处理，完全内核调试或自动内核调试必须启用。
<p>用户模式错误处理默认是启用的。要检查当前设置，使用<strong>kdbgctrl -cu</strong> 。禁用设置，使用<strong>kdbgctrl -du</strong> 。启用设置，使用<strong>kdbgctrl -eu</strong> 。
<h4>DbgPrint缓冲区大小 </h4>
<p>DbgPrint 缓冲区保存目标机发送给内核调试器的信息。
<p>如果完全内核调试启用，这些信息会在内核调试器中自动出现。但是如果该选项禁用，这些信息只保存在缓冲区中。在之后，可以启用内核调试并连接到内核调试器，并使用<a><strong>!dbgprint</strong></a>扩展命令来查看缓冲区的内容。关于该缓冲区的更多信息，查看<a>DbgPrint缓冲区</a>。
<p>在Windows 发行版中，DbgPrint缓冲区的默认大小是4 KB，在调试版Windows中为32 KB。查看当前的缓冲区大小，使用<strong>kdbgctrl -cdb</strong> 。修改 大小，使用<strong>kdbgctrl -sdb </strong><em>size</em>，<em>size</em>指定新的缓冲区大小。关于语法的详细信息，查看<a>KDbgCtrl命令字符串选项</a>。
<h4>示例 </h4>
<p>显示所有的当前设置，使用下面的命令：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>kdbgctrl&nbsp;-c&nbsp;-ca&nbsp;-cu&nbsp;-cdb</strong>&nbsp;<br><br></span>
<p>恢复默认设置，使用如下命令：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>kdbgctrl&nbsp;-e&nbsp;-da&nbsp;-eu&nbsp;-sdb&nbsp;0x1000</strong>&nbsp;<br><br></span>
<p>阻止主控机，仅当发生异常时才连接。使用如下命令：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>kdbgctrl&nbsp;-d&nbsp;-ea&nbsp;-eu</strong>&nbsp;<br><br></span>
<p>禁用所有内核调试，使用如下命令：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>kdbgctrl&nbsp;-d&nbsp;-da</strong>&nbsp;<br><br></span>
<p>禁用所有内核调试之后，可能想增加DbgPrint缓冲区的大小。这可以确保当需要查看的时候，所以信息都能被保存下来。如果有1MB的内存剩余，可以使用下面的命令：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>kdbgctrl&nbsp;-sdb&nbsp;0x1000000</strong>&nbsp;<br></span>
<h1>在主控机上进行软件配置 </h1>
<p>本节包含：
<p><a>选择内核调试设置</a>
<p><a>安装1394虚拟驱动</a>
<p><a>安装符号文件</a>
<h1>选择内核调试设置 </h1>
<p>开始内核调试之前，必须选择使用的连接设置。
<p>调试器支持各种不同的内核调试方式：
<ul>
    <li>主控机和目标机通过COM端口连接。
    <li>主控机和目标机用1394电缆连接。这只在主控机和目标机都运行Windows XP之后系统的情况下支持。通过1394电缆调试之前，必须在主控机和目标机上都进行一些软件配置。查看<a>禁用1394控制器</a>和 <a>安装1394虚拟驱动</a>获取更多信息。
    <li>主控机和目标机通过USB 2.0调试电缆连接。仅当主控机运行Windows 2000及之后的系统，目标机运行Windows Vista及之后的系统时才支持。需要进行更多的配置，查看<a>设置USB 2.0调试电缆连接</a>获取更多信息。
    <li>主控机和目标机通过modem通信。
    <li>调试器和虚拟机(在同一台机器或者不同机器上)通过命名管道通信。
    <li>在单机上进行本地内核调试。这只在Windows XP和之后的系统中支持。 </li>
</ul>
<p>有三种办法可以进行内核调试设置：通过环境变量，通过调试器命令行，或者通过WinDbg图形界面。如果不使用这些方法，调试器默认使用COM1和19200波特率连接。
<h4>环境变量 </h4>
<p>如果通过环境变量设置COM端口连接，需要使用下面两个变量：
<p style="BACKGROUND: #dddddd"><span style="FONT-FAMILY: Courier New"><strong>set&nbsp;_NT_DEBUG_PORT&nbsp;=</strong>&nbsp;<em>Com</em></span><span style="FONT-FAMILY: 宋体"><em>端口</em></span><span style="FONT-FAMILY: Courier New">&nbsp;<br><strong>set&nbsp;_NT_DEBUG_BAUD_RATE&nbsp;=</strong>&nbsp;</span><span style="FONT-FAMILY: 宋体"><em>波特率</em></span><span style="FONT-FAMILY: Courier New"><br></span>
<p>通过环境变量设置1394连接，使用下面三个变量：<span style="FONT-FAMILY: 宋体"> </span>
<p style="BACKGROUND: #dddddd"><span style="FONT-FAMILY: Courier New"><strong>set&nbsp;_NT_DEBUG_BUS&nbsp;=&nbsp;1394</strong>&nbsp;<br><strong>set&nbsp;_NT_DEBUG_1394_CHANNEL&nbsp;=</strong>&nbsp;<em>1394</em></span><span style="FONT-FAMILY: 宋体"><em>频道</em></span><span style="FONT-FAMILY: Courier New">&nbsp;<br><strong>set&nbsp;_NT_DEBUG_1394_SYMLINK&nbsp;=</strong>&nbsp;<em>1394</em></span><span style="FONT-FAMILY: 宋体"><em>协议</em></span><span style="FONT-FAMILY: Courier New">&nbsp;<br></span>
<p>不能用环境变量来设置USB 2.0调试电缆连接、通过modem的调试、通过命名管道调试和本地内核调试。<span style="FONT-FAMILY: 宋体"> </span>
<h4>KD 命令行 </h4>
<p>如果使用KD命令行，可以在<strong>-k</strong> 命令行选项之后指定连接设置。<strong>com:port</strong> 参数指定调试器通过COM端口连接。<strong>1394</strong> 参数指定通过1394电缆连接。<strong>usb2</strong> 参数指定通过USB 2.0调试电缆连接。<strong>com:modem</strong> 参数指定通过modem连接。<strong>com:pipe</strong> 参数指定通过命名管到连接。<strong>-kl</strong> 命令行选项启用内核调试。如果省略掉这些参数，则使用环境变量或者默认设置。
<p style="BACKGROUND: #dddddd"><span style="FONT-FAMILY: Courier New"><strong>kd&nbsp;...</strong>&nbsp;<strong>-k&nbsp;com:port=</strong><em>Com</em></span><span style="FONT-FAMILY: 宋体"><em>端口</em></span><span style="FONT-FAMILY: Courier New"><strong>,baud=</strong></span><span style="FONT-FAMILY: 宋体"><em>波特率</em></span><span style="FONT-FAMILY: Courier New"><strong>...</strong>&nbsp;<br><strong>kd&nbsp;...</strong>&nbsp;<strong>-k&nbsp;1394:channel=</strong><em>1394</em></span><span style="FONT-FAMILY: 宋体"><em>频道</em></span><span style="FONT-FAMILY: Courier New">[<strong>,symlink=</strong><em>1394</em></span><span style="FONT-FAMILY: 宋体"><em>协议</em></span><span style="FONT-FAMILY: Courier New">]&nbsp;<strong>...</strong>&nbsp;<br><strong>kd&nbsp;...</strong>&nbsp;<strong>-k&nbsp;usb2:targetname=</strong></span><span style="FONT-FAMILY: 宋体"><em>字符串</em></span><span style="FONT-FAMILY: Courier New">&nbsp;<strong>...</strong>&nbsp;<br><strong>kd&nbsp;...</strong>&nbsp;<strong>-k&nbsp;com:pipe,port=\\</strong><em>VMHost</em><strong>\pipe\</strong><em>PipeName</em>[<strong>,resets=0</strong>][<strong>,reconnect</strong>]&nbsp;<strong>...</strong>&nbsp;<br><strong>kd&nbsp;...</strong>&nbsp;<strong>-k&nbsp;com:modem</strong>&nbsp;<strong>...</strong>&nbsp;<br><strong>kd&nbsp;...</strong>&nbsp;<strong>-kl</strong>&nbsp;<strong>...</strong>&nbsp;<br><strong>kd&nbsp;...</strong>&nbsp;<br></span>
<h4>WinDbg 命令行<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>WinDbg 连接参数和KD一样。唯一不同在于，如果想使用环境变量或者默认设置，还是必须指定<strong>-k</strong> 选项。
<p style="BACKGROUND: #dddddd"><span style="FONT-FAMILY: Courier New"><strong>windbg&nbsp;...</strong>&nbsp;<strong>-k&nbsp;com:port=</strong><em>ComPort</em><strong>,baud=</strong><em>BaudRate</em>&nbsp;<strong>...</strong>&nbsp;<br><strong>windbg&nbsp;...</strong>&nbsp;<strong>-k&nbsp;1394:channel=</strong><em>1394Channel</em>[<strong>,symlink=</strong><em>1394Protocol</em>]&nbsp;<strong>...</strong>&nbsp;<br><strong>windbg&nbsp;...</strong>&nbsp;<strong>-k&nbsp;usb2:targetname=</strong><em>String</em>&nbsp;<strong>...</strong>&nbsp;<br><strong>windbg&nbsp;...</strong>&nbsp;<strong>-k&nbsp;com:pipe,port=\\</strong><em>VMHost</em><strong>\pipe\</strong><em>PipeName</em>[<strong>,resets=0</strong>][<strong>,reconnect</strong>]&nbsp;<strong>...</strong>&nbsp;<br><strong>windbg&nbsp;...&nbsp;-k&nbsp;com:modem</strong>&nbsp;<strong>...</strong>&nbsp;<br><strong>windbg&nbsp;...</strong>&nbsp;<strong>-kl</strong>&nbsp;<strong>...</strong>&nbsp;<br><strong>windbg&nbsp;...</strong>&nbsp;<strong>-k</strong>&nbsp;<strong>...</strong>&nbsp;<br></span>
<h4>WinDbg 对话框<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>如果WinDbg已经运行并且处于静止状态，可以使用<strong>File&nbsp;|&nbsp;Kernel Debug</strong> 菜单选项来开始新的内核调试任务。出现的对话框中有三个选项卡：<strong>COM</strong>， <strong>1394</strong>,，和<strong>Local</strong>。他们每个都指定一种不同的连接方式：
<ul>
    <li><strong>COM</strong> 选项卡指定使用COM端口连接。<strong>Baud Rate</strong> 文本框内输入<em>波特率</em>，<strong>Port</strong>文本框内输入<em>Com端口</em>。
    <li><strong>1394</strong> 选项卡指定使用1394连接。在<strong>Channel</strong> 文本框中输入<em>1394频道</em>。
    <li><strong>Local</strong> 选项卡指定WinDbg使用本地内核调试。本地内核调试只在Windows XP和之后版本Windows中支持。 </li>
</ul>
<p>这个对话框不能用来设置USB 2.0调试电缆、modem和命名管道连接。
<h4>参数 </h4>
<p>这些参数由环境变量、命令行选项和WinDbg对话框使用，有下面一些可能的值：
<p><em>Com端口</em>
<p style="MARGIN-LEFT: 36pt">指定COM端口的名字。可以是"com2"或者"\\.\com2"这样的形式，但是不能仅仅只有一个数字。
<p><em>波特率</em>
<p style="MARGIN-LEFT: 36pt">指定波特率，可以是19200，38400，57600或115200.
<p><em>1394频道</em>
<p style="MARGIN-LEFT: 36pt">指定1394频道的数字。合法的频道是从0到62之间的任何整数。<em>1394频道</em>必须和目标机上使用的相同，但是和适配器上的物理1394端口无关。
<p style="MARGIN-LEFT: 36pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;1394内核调试只在主控机和目标机都运行Windows XP之后系统的情况下支持。通过1394电缆调试之前，必须在主控机和目标机上都进行一些软件配置。查看<a>禁用1394控制器</a>和 <a>安装1394虚拟驱动</a>获取更多信息。 </span>
<p><em>1394协议</em>
<p style="MARGIN-LEFT: 36pt">指定1394内核连接使用的协议。这个选项几乎总是被省略，因为调试器会自动选择合适的协议。如果想自己设定，并且目标计算机运行Windows XP，<em>1394协议</em>需要设置为"channel"。如果目标机运行Windows Server 2003或之后 的系统，<em>1394协议</em>需要设置为"instance".。如果省略，调试器会选择适合目标机的协议。<em>这个参数只能通过命令行或环境变量设置，不能通过WinDbg图形界面。</em>
<p><em>字符串</em>
<p style="MARGIN-LEFT: 36pt">指定USB 2.0连接字符串。必须和<strong>/targetname</strong> 引导选项指定的字符串相同；查看<a><strong>/debug</strong></a> 获取更多信息。
<p style="MARGIN-LEFT: 36pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;USB 2.0内核调试仅当主控机运行Windows 2000及之后的系统，目标机运行Windows Vista及之后的系统时才支持。需要进行更多的配置，查看<a>设置USB 2.0调试电缆连接</a>获取更多信息。 </span>
<p><em>VMHost</em>
<p style="MARGIN-LEFT: 36pt">当调试虚拟机时，<em>VMHost</em> 指定虚拟机运行的物理计算机名。虚拟机文档中一般用<em>virtual machine host</em> 来引用它。如果虚拟机和内核调试器运行在同样的机器上，<em>VMHost</em>可以使用一个点号(.)。
<p><em>PipeName</em>
<p style="MARGIN-LEFT: 36pt">指定虚拟机为调试连接创建的命名管道名。
<p><strong>resets=0</strong>
<p style="MARGIN-LEFT: 36pt">指定一个无约束的当主控机和目标机进行同步时发送给目标机的重置包的数量。这仅仅在使用某些特定的虚拟机时需要。查看<a>附加到虚拟机(内核模式)</a>获取更多信息。
<p><strong>reconnect</strong>
<p style="MARGIN-LEFT: 36pt">指定当读/写失败时，调试器自动断开并重连管道。另外，当调试器启动时没有找到指定的命名管到，<strong>reconnect</strong> 使得它等待这个名字的管道出现。这个参数仅在调试某些特定类型的虚拟机时需要。查看 <a>附加到虚拟机(内核模式)</a>获取更多信息。
<p><strong>modem</strong>
<p style="MARGIN-LEFT: 36pt">指定调试器通过modem连接。
<p><strong>-kl</strong>
<p style="MARGIN-LEFT: 36pt">指定调试器进行本地内核调试。仅当用户具有调试权限时才能启动进程。要使用本地内核调试，x86的<em>boot.ini</em>文件或Itanium的<strong>OsLoadOptions</strong> 配置必须包含<strong>/debug</strong> 选项。查看<a>进行本地内核调试</a>获取关于该技术的更多特殊功能。
<p style="MARGIN-LEFT: 36pt">关于其他有用的环境变量和命令行选项列表，查看<a>环境变量</a>和<a>命令行选项</a>。
<h4>示例 </h4>
<p style="MARGIN-LEFT: 35pt">下面的批处理文件用来设置COM连接：
<p style="MARGIN-LEFT: 35pt"><span style="COLOR: #660000; FONT-FAMILY: Courier New">set&nbsp;_NT_SYMBOL_PATH=d:\mysymbols<br>set&nbsp;_NT_DEBUG_PORT=com1<br>set&nbsp;_NT_DEBUG_BAUD_RATE=19200<br>set&nbsp;_NT_DEBUG_LOG_FILE_OPEN=d:\debuggers\logfile1.log<br>kd<br><br></span>
<p style="MARGIN-LEFT: 35pt">下面的批处理用于设置1394连接： <span style="FONT-FAMILY: 宋体"></span>
<p style="MARGIN-LEFT: 35pt"><span style="COLOR: #660000; FONT-FAMILY: Courier New">set&nbsp;_NT_SYMBOL_PATH=d:\mysymbols<br>set&nbsp;_NT_DEBUG_BUS=1394<br>set&nbsp;_NT_DEBUG_1394_CHANNEL=44<br>set&nbsp;_NT_DEBUG_LOG_FILE_OPEN=d:\debuggers\logfile1.log<br>windbg&nbsp;-k<br><br></span>
<p style="MARGIN-LEFT: 35pt">下面的命令行在每种配置下启动KD，不使用任何环境变量：<span style="FONT-FAMILY: 宋体"> </span>
<p style="MARGIN-LEFT: 35pt"><span style="COLOR: #660000; FONT-FAMILY: Courier New">kd&nbsp;-y&nbsp;d:\mysymbols&nbsp;-k&nbsp;com:modem&nbsp;<br><br>kd&nbsp;-y&nbsp;d:\mysymbols&nbsp;-k&nbsp;com:port=com2,baud=57600&nbsp;<br><br>kd&nbsp;-y&nbsp;d:\mysymbols&nbsp;-k&nbsp;com:port=\\.\com2,baud=115200&nbsp;<br><br>kd&nbsp;-y&nbsp;d:\mysymbols&nbsp;-k&nbsp;1394:channel=20,symlink=instance&nbsp; </span>
<h1>安装1394虚拟驱动 </h1>
<p>要通过1394连接进行调试，调试器会安装一个1394虚拟驱动用于和目标机通信。
<p>安装有三个步骤：
<ol>
    <li>当调试器软件包在系统上安装时，会将特定文件放到调试器安装目录的<em>1394</em>子目录中。
    <li>第一次使用1394连接启动内核调试时，调试器会进行1394虚拟驱动的预安装。
    <li>如果预安装成功，调试器调用总线驱动程序。总线驱动程序会完成安装过程。 </li>
</ol>
<p>在第2和第3步，必须以管理员登陆到主控机上，因为只有管理员可以安装新驱动。
<p>有两种不同的1394驱动：一个用于运行Windows XP的目标机，另一个用于运行Windows Server 2003或之后的Windows的目标机。他们分别对应两种不同的1394协议设置。不需要袭击修改协议的配置，它会自动被选择。如果因为某些原因想自定义协议配置，查看<a>选择内核调试设置</a>获得更多信息。
<p>如果通过1394调试Windows XP目标然后又通过1394调试Windows Server 2003(或之后)的目标，在主控机上两种驱动都会被安装。反之亦然。
<h4>改变调试器文件的位置 </h4>
<p>每个1394虚拟驱动都只会被安装一次。
<p>所以，如果安装了Windows调试工具包，并进行过1394调试，就不能把调试器的文件复制到其他机器上。这种复制不会包括通过1394连接调试时需要使用到的1394驱动。
<p>同样的问题也会在拥有双重启动的机器上使用同一份调试器拷贝的情况下出现。
<p>要确保1394调试工作，每台计算机(或者双重启动机器上的每个系统)都应该安装调试工具包。查看<a>调试器安装</a>获取操作方法。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;在通过1394电缆进行内核调试之前，还必须在目标机上进行软件设置。查看<a>禁用1394控制器</a>。 </span>
<h1>安装符号文件 </h1>
<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----11&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/43284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-04-07 11:38 <a href="http://www.cnitblog.com/cc682/articles/43284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----10</title><link>http://www.cnitblog.com/cc682/articles/43285.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Thu, 03 Apr 2008 09:43:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43285.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43285.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43285.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43285.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>驱动程序开发、测试人员经常需要添加、删除和修改引导入口的参数以在不同条件下测试他们的驱动。本节描述了一些共通的用于配置保存在<em>Boot.ini</em>和NVRAM中的引导参数的情况和策略建议。
<p>本节包含以下主题：
<p><a>用于启用调试的引导参数</a>
<p><a>用于操作内存的引导参数</a>
<p><a>用于加载局部调试版系统的引导参数</a>
<p><a>用于启用EMS重定向的引导参数</a>
<p><a>用于配置DEP和PAE的引导参数</a>
<h1>用于启用调试的引导参数 </h1>
<p>当内核调试连接建立起来之后，系统给予内核调试器自己执行的控制权。同样，当发生bug check或者内核模式程序和调试器进行通信的时候，计算机在继续执行之前都要等待内核调试器的相应。
<p>有四种可以通过引导参数来配置的基本的调试方法：
<ul>
    <li>单机(本地)调试
    <li>通过null-modem电缆调试
    <li>通过IEEE 1394电缆调试(只在Microsoft Windows&nbsp;XP和之后的版本)
    <li>使用USB 2.0调试电缆调试(只在Microsoft Windows&nbsp;XP和之后的版本) </li>
</ul>
<h4>Windows Vista之前的系统中用于本地调试的引导参数 </h4>
<p>要在单台机器上启用内核调试，需要在引导入口添加<a><strong>/debug</strong></a> 参数。不要在引导入口中添加任何其它调试相关的参数。
<p>下面的示例<em>Boot.ini</em>文件中的第一条引导入口包含<strong>/debug</strong> 参数。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Local&nbsp;Debugging"&nbsp;/fastdetect&nbsp;<strong>/debug</strong><br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect<br><br></span>
<p>下面的Bootcfg命令启用本地调试。Bootcfg的<strong>/debug</strong> 开关和<strong>ON</strong> 值一起使用，会在引导入口中添加<strong>/debug</strong> 参数。<strong>/ID</strong> 开关指定引导入口。 <span style="FONT-FAMILY: 宋体"></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bootcfg&nbsp;/debug&nbsp;ON&nbsp;/ID&nbsp;1</strong><br><br></span>
<p>下面是一个使用<em>Boot.ini</em>文件的系统上的Bootcfg显示结果。第一个引导入口被配置为使用本地调试。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Entries<br>------------<br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;1<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Windows&nbsp;XP&nbsp;Local&nbsp;Debugging<br>Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(2)\WINDOWS<br>OS&nbsp;Load&nbsp;Options:&nbsp;&nbsp;/fastdetect&nbsp;<strong>/debug</strong><br><br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;2<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Microsoft&nbsp;Windows&nbsp;XP<br>Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(2)\WINDOWS<br>OS&nbsp;Load&nbsp;Options:&nbsp;&nbsp;/fastdetect<br><br></span>
<h4>Windows Vista中本地调试的引导配置<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>使用BCDEdit <strong>/debug</strong> 调试选项来启用单机内核调试。
<p>使用BCDEdit，要使用提升的权限打开一个命令行窗口(右键点击<strong>命令提示符</strong>并在快捷菜单中点击<strong>用管理员方式启动</strong>)。
<p><strong>/debug</strong> 选项的语法如下：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/debug</strong>&nbsp;[{<em>ID</em>}]&nbsp;{&nbsp;<strong>on</strong>&nbsp;|&nbsp;<strong>off</strong>&nbsp;}<br></span>
<p>{<em>ID</em>}是引导入口被指派的GUID。如果{<em>ID</em>}没有指定，则修改当前的引导入口。下面的命令启用当前系统的引导入口的内核调试：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/debug&nbsp;on</strong><br></span>
<p>下面的命令启用指定的引导入口的系统地内核调试：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/debug&nbsp;&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;on</strong><br></span>
<p>可以使用<strong>bcdedit /enum</strong> 命令来查看当前所有引导入口、他们的设置和分配的GUID。<span style="FONT-FAMILY: 宋体"> </span>
<h4>在Windows Vista之前的系统中用于配置Null-modem电缆调试的引导参数 </h4>
<p>要 启用null-modem 电缆调试，需要在引导入口中添加<a><strong>/debug</strong></a> 参数和<strong>/debugport</strong> 、 <strong>/baudrate</strong> 子参数。
<p>下面<em>Boot.ini</em>文件中的第一个引导入口配置为使用null modem电缆调试。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>[operating&nbsp;systems]<br><strong>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Debugging&nbsp;with&nbsp;Cable"&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=57600</strong><br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect<br><br></span>
<p>设置<strong>/debugport</strong> 子参数的值为机器上某一个COM端口。<strong>/baudrate</strong> 子参数的值为电缆的连接速度。(默认值为19200 bps)<span style="FONT-FAMILY: 宋体"> </span>
<p>下面的Bootcfg命令启用第一个引导入口的调试。设置调试端口为COM1，波特率为57600 bps。
<p>Bootcfg的<strong>/debug</strong> 开关和<strong>ON</strong> 值在引导入口中添加<strong>/debug</strong> 参数。Bootcfg 的<strong>/port</strong> 开关添加<strong>/debugport</strong> 子参数和值COM1。<strong>/baud</strong> 开关添加<strong>/baudrate</strong> 子参数和值57600。<strong>/ID</strong> 开关指定引导入口。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bootcfg&nbsp;/debug&nbsp;ON&nbsp;/port&nbsp;COM1&nbsp;/baud&nbsp;57600&nbsp;/ID&nbsp;1</strong><br><br></span>
<p>下面的Bootcfg示例显示了一个基于Itanium系统的引导入口结果。新添加的参数在下面以粗体标识。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><br>Boot&nbsp;Entries<br>------------<br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;1<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Windows&nbsp;Server&nbsp;2003,&nbsp;Enterprise<br>OsLoadOptions:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>/debug&nbsp;/debugport=COM1&nbsp;/baudrate=57600</strong><br>BootFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume1\EFI\Microsoft\WINNT50\ia64ldr.efi<br>OsFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume3\WINDOWS<br><br></span>
<h4>Windows Vista使用Null-modem电缆的引导选项<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在Windows Vista中，调试设置可以配置为全局或者针对单个引导入口。默认的全局调试设置是串口通信的，使用COM1，波特率为115200。
<p>要显示当前设置，使用下面的命令：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/dbgsettings</strong><br><br>debugtype&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Serial<br>debugport&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>baudrate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;115200<br></span>
<p>使用BCDEdit，要使用提升的权限打开一个命令行窗口(右键点击<strong>命令提示符</strong>并在快捷菜单中点击<strong>用管理员方式启动</strong>)。<span style="FONT-FAMILY: 宋体"> </span>
<p>使用如下语法来将全局调试设置修改为串口通信：
<p><span style="COLOR: #660000"><span style="FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/dbgsettings</strong>&nbsp;<strong>serial</strong>&nbsp;[<strong>DEBUGPORT:</strong></span><span style="FONT-FAMILY: 宋体"><em>端口</em></span><span style="FONT-FAMILY: Courier New">]&nbsp;[<strong>BAUDRATE:</strong></span><span style="FONT-FAMILY: 宋体"><em>波特率</em></span><span style="FONT-FAMILY: Courier New">]&nbsp;<br></span></span>
<p>下面的是将全局调试设置指定为串口通信的示例：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/dbgsettings&nbsp;serial&nbsp;debugport:1&nbsp;baudrate:115200<br></span>
<p>使用下面的语法来设置指定引导入口或当前入口的调试设置：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/set</strong>&nbsp;[{<em>ID</em>}]&nbsp;[&nbsp;<strong>debugtype</strong>&nbsp;<strong>serial</strong>&nbsp;|&nbsp;[<strong>DEBUGPORT&nbsp;</strong><em>port</em>]&nbsp;|&nbsp;[<strong>BAUDRATE&nbsp;</strong><em>baud</em>]&nbsp;]<br></span>
<p>如果没有指定{<em>ID</em>}，则修改当前激活的引导入口。 <span style="FONT-FAMILY: 宋体"></span>
<p>下面的例子表明了如何为特定引导入口指定串口调试设置。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;debugtype&nbsp;serial<br></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;debugport&nbsp;1<br></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;baudrate&nbsp;115200<br></span>
<p>可以使用<strong>bcdedit /enum</strong> 命令查看当前的所有引导入口和他们的设置。<span style="FONT-FAMILY: 宋体"> </span>
<h4>在Windows Vista之前的系统中用于1394电缆调试的引导参数 </h4>
<p>如果主控机和目标机都运行Windows XP或之后地系统，就可以用IEEE 1394(火线)电缆进行内核调试。
<p>要启用IEEE 1394电缆调试，要在引导入口中添加<a><strong>/debug</strong></a> 参数和<strong>/debugport</strong> 、<strong>/channel</strong> 子参数。将<strong>/debugport</strong> 子参数设置为<strong>1394</strong>，将<strong>/channel</strong> 设置为传输使用的频道。
<p>下面的示例<em>Boot.ini</em>文件中第一个引导入口配置为使用1394电缆调试。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>[operating&nbsp;systems]<br><strong>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Debugging&nbsp;with&nbsp;1394"&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=1394&nbsp;/channel=44</strong><br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect<br><br></span>
<p>下面的Bootcfg命令启用1394电缆调试，并将调试频道设置为44。<strong>/dbg1394</strong> 开关和值<strong>ON</strong> 在引导入口中添加<strong>/debug</strong> 和<strong>/debugport=1394</strong>子参数，<strong>/ch</strong> 开关添加<strong>/channel</strong> 子参数。<strong>/id</strong> 开关指定第二个引导入口。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bootcfg&nbsp;/dbg1394&nbsp;ON&nbsp;/ch&nbsp;44&nbsp;/id&nbsp;2</strong><br><br></span>
<p>下面的Bootcfg输出显示了该命令在<em>Boot.ini</em>文件的系统上的结果。新添加的参数在下面用粗体标识。这台机器现在有不启用调试和启用1394电缆调试的两种引导选项。不启用调试的一个是默认。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Entries<br>------------<br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;1<br>Friendly&nbsp;Name:&nbsp;&nbsp;&nbsp;"Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"<br>Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>OS&nbsp;Load&nbsp;Options:&nbsp;/fastdetect<br><br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;2<br>Friendly&nbsp;Name:&nbsp;&nbsp;&nbsp;"1394&nbsp;Debug&nbsp;Windows&nbsp;XP"<br>Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>OS&nbsp;Load&nbsp;Options:&nbsp;/fastdetect&nbsp;<strong>/debug&nbsp;/debugport=1394&nbsp;/channel=44</strong><br><br></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;在使用1394电缆进行内核调试之前，还要在目标机和主控机上进行额外的软件配置。查看<a>禁用1394控制器</a>和<a>安装1394虚拟驱动</a>获取详细信息。 </span>
<h4>Windows Vista 中的1394电缆调试引导参数 </h4>
<p>在Windows Vista中启用IEEE 1394调试，使用BCDEdit并将<em>debugtype</em> 参数设置为<strong>1394</strong>。可以使用<strong>/dgbsettings</strong> 选项来进行全局调试设置，或者用<strong>/set</strong> 来设置指定引导入口。
<p>使用BCDEdit，要使用提升的权限打开一个命令行窗口(右键点击<strong>命令提示符</strong>并在快捷菜单中点击<strong>用管理员方式启动</strong>)。
<p>使用下面语法将全局设置改为1394：
<p><span style="COLOR: #660000"><span style="FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/dbgsettings</strong>&nbsp;<strong>1394</strong>&nbsp;[<strong>channel:</strong></span><span style="FONT-FAMILY: 宋体"><em>频道</em></span><span style="FONT-FAMILY: Courier New">]&nbsp;<br></span></span>
<p>下例将全局调试设置指定为使用1394：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/dbgsettings&nbsp;1394&nbsp;channel:32&nbsp;<br></span>
<p>使用下面语法为指定的引导入口或当前入口进行调试设置：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/set</strong>&nbsp;[{<em>ID</em>}]&nbsp;[&nbsp;<strong>debugtype</strong>&nbsp;<strong>1394</strong>&nbsp;|&nbsp;<strong>channel&nbsp;</strong><em>channel&nbsp;</em>]&nbsp;<br></span>
<p>如果{<em>ID</em>} 未指定，则应用到当前入口。 <span style="FONT-FAMILY: 宋体"></span>
<p>下面的例子说明了如何为指定的引导入口设置1394调试，以及如何用<strong>/debug</strong> 选项为制定引导入口启用内核调试。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;debugtype&nbsp;1394<br></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;channel&nbsp;32<br></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/debug&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;on<br></span>
<p>可以使用<strong>bcdedit /enum</strong> 命令查看当前的所有引导入口和他们的设置。<span style="FONT-FAMILY: 宋体"> </span>
<h4>在Windows Vista之前的系统中的USB 2.0调试引导参数 </h4>
<p>要启用USB 2.0电缆调试，需要在引导入口添加<a><strong>/debug</strong></a> 参数和<strong>/debugport</strong> 、<strong>/targetname</strong> 子参数。将<strong>/debugport</strong> 的值设置为<strong>usb</strong>，<strong>/targetname</strong> 的值设置为任意字符串。该字符串用于指定内核调试器连接。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;进行USB 2.0电缆调试之前，需要进行额外配置。查看<a>设置USB 2.0 调试电缆连接</a>获取详细信息。 </span>
<h4>Windows Vista上的USB 2.0调试引导参数 </h4>
<p>如果目标机运行Windows Vista，并且主控机运行Windows 2000和之后的系统，就可以使用USB 2.0调试电缆进行内核调试。
<p>要在Windows Vista上启用USB电缆调试，使用BCDEdit并将<em>debugtype</em> 参数设置为<strong>USB</strong>。可以使用<strong>/dgbsettings</strong> 设置全局调试设置，或用<a><strong>BCDEdit /set</strong></a> 选项设置单个引导入口。
<p>使用BCDEdit，要使用提升的权限打开一个命令行窗口(右键点击<strong>命令提示符</strong>并在快捷菜单中点击<strong>用管理员方式启动</strong>)。
<p>使用下面语法将全局调试设置修改为使用USB：
<p><span style="COLOR: #660000"><span style="FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/dbgsettings</strong>&nbsp;<strong>usb</strong>&nbsp;[<strong>targetname:</strong></span><span style="FONT-FAMILY: 宋体"><em>目标名</em></span><span style="FONT-FAMILY: Courier New">]&nbsp;<br></span></span>
<p>下例将全局调试设置指定为USB。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/dbgsettings&nbsp;usb&nbsp;targetname:U1<br></span>
<p>用如下语法为单个引导入口进行设置：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/set</strong>&nbsp;[{<em>ID</em>}]&nbsp;[&nbsp;<strong>debugtype</strong>&nbsp;<strong>usb</strong>&nbsp;|&nbsp;<strong>targetname&nbsp;</strong><em>targetname&nbsp;</em>]<br></span>
<p>如果没有指定{<em>ID</em>}，则应用到当前入口。 <span style="FONT-FAMILY: 宋体"></span>
<p>下例说明了如何为单个引导入口指定USB调试设置，以及如何用<strong>/debug</strong> 命令为它启用内核调试。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;debugtype&nbsp;usb<br></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;targetname&nbsp;u2<br></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/debug&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;on<br></span>
<p>可以使用<strong>bcdedit /enum</strong> 命令查看当前的所有引导入口和他们的设置。<span style="FONT-FAMILY: 宋体"> </span>
<h1>用于操作内存的引导参数 </h1>
<p>可以不改变机器的物理内存总数就模拟低内存环境。可以在Windows Server 2003和Windows XP上使用<a><strong>/burnmemory</strong></a> 和 <a><strong>/maxmem</strong></a>引导参数，在Windows Vista上使用<a><strong>BCDedit /set</strong></a>命令和<strong>truncatememory</strong> 或 <strong>removememory</strong> 选项来限制操作系统可使用的内存。
<p><strong>/burnmemory</strong> 在Windows Server 2003和Windows XP上有效，可以将Windows能使用的内存控制在指定值。 它以MB为单位。可以将它的值设置为小于系统中实际物理内存的任意值。
<p><strong>/maxmem</strong> 指定Windows可以使用的内存最大值。以MB为单位。可以将它的值设置为小于系统中实际物理内存的任意值。
<p><strong>/maxmem</strong> 参数实际是指定Windows 能使用的最大内存地址。由于在映射物理内存时有缝隙，Windows能使用的内存可能小于<strong>/maxmem</strong> 的值。如果要精确设置，使用<strong>/burnmemory</strong> 。
<p><strong>truncatememory</strong> 或 <strong>removememory</strong> 在Windows Vista中有效。<strong>truncatememory </strong>选项忽略指定的物理地址和它之上的所有内存。<strong>removememory</strong> 选项将Windows可以使用的内存减少指定值(以MB为单位)。两个选项都可以减少内存，但是<strong>removememory</strong> 在算上内存空隙的时候限制系统使用的内存更好。
<h4>在Windows Vista之前的操作系统中用于在低内存环境进行测试的引导参数 </h4>
<p>要在Windows Server 2003和Windows XP上模拟低内存环境，需要在引导入口添加<strong>/burnmemory</strong> 参数。将它的值设置为系统总物理内存数减去测试期望使用的内存大小。
<p>例如，要将一台1GB物理内存的及其限制为最多使用128MB内存，将<strong>/burnmemory</strong> 参数设置为896((1&nbsp;GB (1024&nbsp;MB) - 128&nbsp;MB = 896&nbsp;MB)。
<p>下面的示例<em>Boot.ini</em>文件的第一个引导入口具有<strong>/burnmemory</strong> 参数。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Low&nbsp;Memory"&nbsp;/fastdetect&nbsp;<strong>/burnmemory=896</strong><br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect<br></span>
<p>使用Bootcfg 为引导入口添加<strong>/burnmemory</strong> 参数。由于Bootcfg没有为<strong>/burnmemory</strong> 设置的开关，所以需要使用Bootcfg <strong>/raw</strong> 开关，它允许为引导入口指定任何参数。<span style="FONT-FAMILY: 宋体"> </span>
<p>下面的Bootcfg命令中，<strong>/raw</strong> 开关在引导入口中添加<strong>"/burnmemory=896"</strong>这段字符串内容。<strong>/A</strong> 开关指定Bootcfg直接在入口中添加字符串，但是不替换入口中已有的任何引导参数。<strong>/ID</strong> 开关指定引导入口号。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/raw&nbsp;"/burnmemory=896"&nbsp;/A&nbsp;/ID&nbsp;1<br><br></span>
<p>下面的Bootcfg输出显示了<em>Boot.ini</em>文件的系统中的命令运行结果。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Entries<br>------------<br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;1<br>Friendly&nbsp;Name:&nbsp;&nbsp;&nbsp;"Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"<br>Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>OS&nbsp;Load&nbsp;Options:&nbsp;/fastdetect&nbsp;<strong>/burnmemory=896</strong><br><br></span>
<h4>Windows Vista中进行低内存环境测试的引导参数<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>要在Windows Vista中模拟低内存环境，用<a><strong>BCDedit /set</strong></a>命令和<strong>removememory</strong> 选项来修改引导入口。将<strong>removememory</strong> 的值设置为系统总物理内存数减去测试期望使用的内存大小。
<p>例如，要将一台2GB物理内存的机器的内存限制为512MB，将<strong>removememory</strong> 的值设置为1536 (1&nbsp;GB (2048&nbsp;MB) - 512&nbsp;MB = 1536&nbsp;MB)。
<p>下面的BCDEdit命令将指定引导入口的系统可用内存减少1536MB。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;removememory&nbsp;1536<br></span>
<p>也可以使用<strong>bcdedit /set</strong> 命令和<strong>truncatememory</strong> 参数达到同样目的。例如，下面的命令将系统可用内存限制到512MB。 <span style="FONT-FAMILY: 宋体"></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;truncatememory&nbsp;512<br></span>
<p>由于<strong>removememory</strong> 选项是的系统内存使用更加有效率，所以建议用它代替<strong>truncatememory</strong> 。<span style="FONT-FAMILY: 宋体"> </span>
<h4>Windows Vista之前的系统中进行低内存环境测试的引导参数 </h4>
<p>要在Windows 2000中模拟低内存环境，需要在引导入口添加<strong>/maxmem</strong> 参数。将它的值设置为期望的内存值。
<p>下面的示例<em>Boot.ini</em>文件的第一个引导入口包含<strong>/maxmem</strong> 参数。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Low&nbsp;Memory"&nbsp;/fastdetect&nbsp;<strong>/maxmem=128</strong><br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect<br></span>
<p>下例中，<strong>/maxmem</strong> 参数将Windows可用内存限制到128MB， 并且配置为使用调试电缆(null modem)调试。将使用两个Bootcfg命令。<span style="FONT-FAMILY: 宋体"> </span>
<p>第一条Bootcfg命令使用Bootcfg <strong>/addsw</strong> (add switch)开关和<strong>/MM</strong> 参数、值128，在引导入口中添加<strong>/maxmem</strong> 参数，并设置值为128(MB)。<strong>/ID</strong>指定引导入口号。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/addsw&nbsp;/MM&nbsp;128&nbsp;/ID&nbsp;1<br><br></span>
<p>第二条Bootcfg命令使用Bootcfg <strong>/debug</strong> 开关和值<strong>ON</strong>为引导入口添加<strong>/debug</strong>参数。使用<strong>/port</strong> 开关和值COM1添加<strong>/debugport</strong> 参数并设置为COM1，使用<strong>/baud</strong> 开关合值19200添加<strong>/baudrate</strong>参数并设置为19200 bps。<strong>/ID</strong>参数指定引导入口号。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/debug&nbsp;ON&nbsp;/port&nbsp;COM1&nbsp;/baud&nbsp;19200&nbsp;/ID&nbsp;1<br><br></span>
<p>下面的Bootcfg输出显示了引导入口的结果。新添加的参数在下面用粗体显示。 <span style="FONT-FAMILY: 宋体"></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Entries<br>------------<br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;1<br>Friendly&nbsp;Name:&nbsp;&nbsp;&nbsp;"Windows&nbsp;XP&nbsp;128MB&nbsp;Debug"<br>Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>OS&nbsp;Load&nbsp;Options:&nbsp;/fastdetect&nbsp;<strong>/maxmem=128&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=19200</strong><br></span>
<h1>用于加载局部调试版系统的引导参数 </h1>
<p><em>局部调试版</em>包含调试版的内核和HAL以及其他发行版操作系统系统组件。更多信息，在Windows Driver Kit(WDK)中查看Checked Operating System and HAL 。
<h4>在Windows Vista之前的操作系统中配置局部调试版系统 </h4>
<p>在Windows 2000、Windows XP或Windows Server 2003中配置局部调试版系统，需要在引导入口添加<strong>/kernel</strong>和<strong>/hal</strong>参数。由于Bootcfg没有对应的开关来添加<strong>/kernel</strong>和<strong>/hal</strong> ，需要使用Bootcfg <strong>/raw</strong> 开关直接在引导入口添加参数。
<p>下面的示例<em>Boot.ini</em>文件中第一个入口加载一个Windows XP的局部调试版系统。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>[operating&nbsp;systems]<br><strong>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Partial&nbsp;Checked&nbsp;Build"&nbsp;/fastdetect&nbsp;/kernel=ntoskrnl.chk&nbsp;/hal=halacpi.chk</strong><br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect<br></span>
<p>下面的Bootcfg命令，<strong>/raw</strong> 开关在引导入口中添加字符串<strong>"/kernel=ntoskrnl.chk /hal=halacpi.chk"</strong>。<strong>/A</strong> 开关指示Bootcfg直接在引导入口中加入字符串而不替代任何已有参数。<strong>/ID</strong>指定引导入口号。<span style="FONT-FAMILY: 宋体"> </span>
<p>如果没有加入<strong>/A</strong> ，则指定的参数会覆盖掉第二个引导入口中所有参数，在下面的例子中是为<strong>/fastdetect</strong>。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/raw&nbsp;"/kernel=ntoskrnl.chk&nbsp;/hal=halacpi.chk"&nbsp;/A&nbsp;/id&nbsp;1<br><br></span>
<p>下面的Bootcfg输出显示了该命令在EFI NVRAM中的引导选项结果。命令添加的参数在下面用粗体标识。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Options&nbsp;<br>------------&nbsp;<br>Timeout:&nbsp;30&nbsp;<br>Default:&nbsp;\Device\HarddiskVolume3\WINDOWS<br>CurrentBootEntryID:&nbsp;1<br><br>Boot&nbsp;Entries<br>------------&nbsp;<br>Boot&nbsp;entry&nbsp;ID:&nbsp;1<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Windows&nbsp;Server&nbsp;2003,&nbsp;Enterprise<br>OsLoadOptions:&nbsp;/fastdetect&nbsp;<strong>/kernel=ntoskrnl.chk&nbsp;/hal=halacpi.chk</strong><br>BootFilePath:&nbsp;Device\HarddiskVolume1\EFI\Microsoft\WINNT50\ia64ldr.efi<br>OsFilePath:&nbsp;\Device\HarddiskVolume3\WINDOWS<br><br></span>
<h4>在Windows Vista中配置局部调试版系统<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>要在Windows Vista中配置局部调试版系统，使用<a><strong>BCDedit /set</strong></a><strong> </strong>命令和<strong>kernel </strong>、<strong>hal</strong>选项。
<p>以下命令配置引导入口使用调试版内核和硬件抽象层(HAL)。
<p>查看命令结果，输入<strong>bcdedit /enum</strong>。<strong>/enum</strong>选项列出所有引导入口。 修改为使用调试版内核和HAL的引导入口也被配置来使用串口内核调试。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Windows&nbsp;Boot&nbsp;Loader<br>-------------------<br>identifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}<br>device&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partition=C:<br>path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Windows\system32\winload.exe<br>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PartialCheckedBuild<br>locale&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;en-US<br>inherit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{bootloadersettings}<br>debugtype&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serial<br>debugport&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>baudrate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;115200<br>osdevice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partition=C:<br>systemroot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Windows<br>kernel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ntoskrnl.chk<br>hal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;halacpi.chk<br>resumeobject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{d7094401-2641-11db-baba-00e018e2b8db}<br>nx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OptIn<br>debug&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes </span>
<h1>用于启用EMS重定向的引导参数 </h1>
<p>紧急管理服务(EMS)技术允许当服务器未连接到网络或其他标准远程管理工具时，远程控制服务器的选定组件。EMS在所有基于x86、x64、Itanium的机器上所有版本的Windows Server 2003系统上支持。
<p>更多EMS的信息，可以在<a href="http://go.microsoft.com/fwlink/?linkid=10111">Microsoft TechNet</a> 站点上搜索Emergency Management Services。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;本主题说明如何在运行Windwos Server 2003的计算机上启用EMS。本节中说明的引导参数在Windows Vista中不适用。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">当使用BIOS固件的机器上的引导入口被配置为使用EMS，boot loader会在引导菜单中显示的友好名后面加上中括号括起的后缀[ems enabled]。但是，如果友好名和后缀加起来超过70个字符，则boot loader忽略掉后缀。要显示出来，需要修改短友好名。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">要确认计算机是否有ACPI固件，可以使用设备管理器(devmgmt.msc)。在设备管理器中，展开<strong>计算机</strong>节点。在有ACPI固件的机器上，<strong>计算机</strong>里面包含的节点包含<strong>ACPI</strong>这一条。 </span>
<h4>在运行Windows Server 2008以前的没有ACPI SPCR表的机器上启用EMS </h4>
<p>在拥有BIOS固件但是没有ACPI串口控制台重定向(SPCR)表的机器上启用EMS控制台重定向，需要在<em>Boot.ini</em>文件的[boot loader] 节中添加<strong>redirect=COM</strong><em>x</em> 和<strong>redirectbaudrate= </strong>参数。这些参数设置EMS控制台重定向使用的端口和传输率。使用和BIOS中为OOB(out-of-band)通信设定的端口和传输率。然后再引导入口中添加<a><strong>/redirect</strong></a> 参数。
<p>下面的Bootcfg命令启用列表中第一个引导入口的EMS控制台重定向。设置为使用COM2并且传输速率为115200 bps。这和在BIOS中为OOB端口设置的值一样。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/ems&nbsp;ON&nbsp;/port&nbsp;COM2&nbsp;/baud&nbsp;115200&nbsp;/id&nbsp;1<br><br></span>
<p>下面的Bootcfg输出显示了命令结果。新加入的参数在下面以粗体标识。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Loader&nbsp;Settings<br>--------------------<br>timeout:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<br>default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br><strong>redirect:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COM2</strong><br><strong>redirectbaudrate:&nbsp;115200</strong><br><br>Boot&nbsp;Entries<br>------------<br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;1<br>Friendly&nbsp;Name:&nbsp;&nbsp;&nbsp;"Windows&nbsp;Server&nbsp;2003,&nbsp;Standard&nbsp;with&nbsp;EMS"<br>Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>OS&nbsp;Load&nbsp;Options:&nbsp;/fastdetect&nbsp;<strong>/redirect</strong><br><br></span>
<p>下例显示了在<em>Boot.ini</em>文件中同样命令的结果。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=1<br>default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS<br><strong>redirect=COM2</strong><br><strong>redirectbaudrate=115200</strong><br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="EMS&nbsp;boot"&nbsp;/fastdetect&nbsp;<strong>/redirect</strong><br>multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows&nbsp;Server&nbsp;2003,&nbsp;Standard"&nbsp;/fastdetect<br><br></span>
<h4>在运行Windows Server 200的没有ACPI SPCR表的几起重启用EMS<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在拥有BIOS固件但是没有ACPI串口控制台重定向(SPCR)表的机器上启用EMS控制台重定向，使用<a><strong>BCDEdit /emssettings</strong></a> 命令设置COM端口和波特率。
<p>这些参数设置EMS控制台重定向的全局端口和传输速率。使用和BIOS中为OOB传输指定的同样端口的传输率。
<p>然后，用<a><strong>BCDEdit /ems</strong></a> 命令为引导入口启用EMS。
<p>下面的命令设置全局EMS重定向设置为使用COM2，波特率为115200，并且为指定引导入口启用EMS。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/emssettings&nbsp;EMSPORT:2&nbsp;EMSBAUDRATE:115200<br></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/ems&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;on<br></span>
<h4>在运行Windows Server 2008之前系统的拥有SPCR表的机器上启用EMS<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在拥有ACPI BIOS固件和ACPI SPCR表的机器上启用EMS，可以使用<strong>redirect=USEBIOSSETTINGS</strong> 参数或者<strong>redirect=COM</strong><em>x</em> 和<strong>redirectbaudrate=</strong> 参数。然后在引导入口添加<a><strong>/redirect</strong></a>参数。
<p>下面示例了<strong>redirect=USEBIOSSETTINGS</strong> 参数的使用。下面的Bootcfg命令在引导入口中第一个入口启用EMS控制台重定向。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/ems&nbsp;ON&nbsp;/port&nbsp;BIOSSET&nbsp;/id&nbsp;1<br><br></span>
<p>下面Bootcfg的输出显示了命令结果。新添加的参数用粗体标识。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Loader&nbsp;Settings<br>--------------------<br>timeout:&nbsp;1<br>default:&nbsp;multi(0)disk(0)rdisk(0)partition(2)\WINDOWS<br><strong>redirect:USEBIOSSETTINGS</strong><br><br>Boot&nbsp;Entries<br>------------<br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;1<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;EMS&nbsp;boot<br>Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(2)\WINDOWS<br>OS&nbsp;Load&nbsp;Options:&nbsp;&nbsp;/fastdetect&nbsp;<strong>/redirect</strong><br><br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;2<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Windows&nbsp;Server&nbsp;2003,&nbsp;Standard<br>Path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;multi(0)disk(0)rdisk(0)partition(2)\WINDOWS<br>OS&nbsp;Load&nbsp;Options:&nbsp;&nbsp;/fastdetect<br><br></span>
<p>下例显示同样命令在<em>Boot.ini</em>文件中的结果。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=1<br>default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS<br><strong>redirect=USEBIOSSETTINGS</strong><br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="EMS&nbsp;boot"&nbsp;/fastdetect&nbsp;/redirect<br>multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows&nbsp;Server&nbsp;2003,&nbsp;Standard"&nbsp;/fastdetect<br></span>
<h4>在运行Windows Server 2008的拥有SPCR表的机器上启用EMS<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在拥有ACPI BIOS 固件和ACPI SPCR表的机器上启用EMS，可以使用<a><strong>BCDEdit /emssettings</strong></a> 并指定<strong>BIOS</strong>参数或者<strong>emsport</strong> 和<strong>emsbaudrate</strong> 参数。为引导入口启用EMS，使用<a><strong>BCDEdit /ems</strong></a> 命令。
<p>下例指示如何使用<strong>BIOS</strong>参数。第二个BCDEdit命令为当前引导入口启用EMS控制台重定向。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/emssettings&nbsp;bios<br>bcdedit&nbsp;/ems&nbsp;on&nbsp;<br></span>
<h4>在运行Windows Server 2008之前系统的EFI固件机器上启用EMS<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在EFI固件机器上启用EMS，使用Bootcfg为引导入口添加<a><strong>/redirect</strong></a> 参数。Windows会在固件中读取SPCR表获得OOB端口和它的设置，并应用到EMS控制台重定向中。
<p>下面的Bootcfg命令在一台基于Itanium的机器上启用EMS重定向。使用Bootcfg <strong>/ems</strong>开关和值OM来为引导入口添加<strong>/redirect</strong> 参数。<strong>/id</strong> 开关指定引导入口号。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/ems&nbsp;ON&nbsp;/id&nbsp;1<br><br></span>
<p>下面Bootcfg的输出显示了命令执行后EFI NVRAM中的引导选项结果。第一个引导入口被配置为加载系统并启用EMS控制台重定向。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Options<br>------------<br>Timeout:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30<br>Default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume3\WINDOWS<br>CurrentBootEntryID:&nbsp;&nbsp;1<br><br>Boot&nbsp;Entries<br>------------<br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;1<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Windows&nbsp;Server&nbsp;2003,&nbsp;Enterprise&nbsp;with&nbsp;EMS<br>OsLoadOptions:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/fastdetect&nbsp;/redirect<br>BootFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume1\EFI\Microsoft\WINNT50\ia64ldr.efi<br>OsFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume3\WINDOWS<br><br></span>
<h4>在运行Windows Server 2008并使用EFI固件的机器上启用EMS<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在EFI固件机器上启用EMS，使用<a><strong>BCDEdit /ems</strong></a> 命令并指定一个引导入口。Windows读取SPCR表获得OOB端口和设置，并应用在EMS控制台重定向上。
<p>下面的命令在GUID为{18b123cd-2bf6-11db-bfae-00e018e2b8db}的入口上启用EMS控制台重定向。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/ems&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}&nbsp;on<br></span>
<h4>在运行Windows Server 2008之前系统的使用BIOS固件的机器上修改EMS设置<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在单个引导入口配置EMS时，在<em>Boot.ini</em>文件的[boot loader] 节添加<strong>redirect=</strong> 参数。但是，当在更多的引导入口启用EMS时，不需要再次添加<strong>redirect=</strong> 参数。和[boot loader] 中所有入口一样，<strong>redirect=</strong> (和 <strong>redirectbaudrate=)</strong>应用到机器中的所有引导入口。
<p>下面的Bootcfg命令为第二个引导入口启用EMS。因为端口和波特率已经设置了，所以不需要<strong>/port</strong> 和<strong>/baud</strong>开关。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/ems&nbsp;ON&nbsp;/id&nbsp;2<br><br></span>
<p>要修改端口和波特率设置，使用Bootcfg <strong>/ems</strong> 开关及EDIT 参数。下面的命令将EMS端口修改为COM1，波特率修改为57600 Kbps。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/ems&nbsp;EDIT&nbsp;/port&nbsp;COM1&nbsp;/baud&nbsp;57600<br><br></span>
<p>在引导入口禁用EMS，使用Bootcfg <strong>/ems</strong> 开关和OFF参数。下面的命令在第一个引导入口禁用EMS。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/ems&nbsp;OFF&nbsp;/id&nbsp;1<br><br></span>
<p>如果EMS在任何其他引导入口都没有启用，Bootcfg会删除在<em>Boot.ini</em>文件中[boot loader]节里面设置的EMS端口和波特率。<span style="FONT-FAMILY: 宋体"> </span>
<h4>在运行Windows Server 2008的机器上修改EMS设置 </h4>
<p>在拥有ACPI BIOS固件和ACPI SPCR表的机器的引导入口配置EMS时，可以使用<a><strong>BCDEdit /emssettings</strong></a> 命令并指定<strong>BIOS</strong> 选项或<strong>emsport</strong> 和<strong>emsbaudrate</strong> 选项。如果使用<strong>BIOS</strong>选项，则不要这支<strong>emsport</strong>和 <strong>emsbaudrate</strong>选项。
<p>在EFI固件或没有ACPI SPCR标的ACPI BIOS固件的机器上配置EMS时，可以用<strong>BCDEdit /emssettings</strong> 命令并指定<strong>emsport</strong> 和<strong>emsbaudrate</strong> 选项。
<p><strong>emsport</strong> 和<strong>emsbaudrate</strong> 选项设置EMS控制台重定向的串口和传输速率。这些设置对计算机中所有引导入口起效。要使用<strong>emsbaudrate</strong> ，必须同时设置<strong>emsport</strong> 选项。默认的，传输速率设置为9600(9600 Kbps)。
<p>例如，下面的命令将EMS端口修改为COM2，波特率修改为57600 Kbps。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/emssettings&nbsp;EMSPORT:2&nbsp;EMSBAUDRATE:57600<br></span>
<p>为某个引导入口启用或禁用EMS，使用<a><strong>BCDEdit /ems</strong></a> 命令。<span style="FONT-FAMILY: 宋体"> </span>
<p>例如，下面的命令启用GUID为{173075c9-2cb2-11dc-b426-001558c41f5c}的引导入口的EMS。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/ems&nbsp;{173075c9-2cb2-11dc-b426-001558c41f5c}&nbsp;on<br></span>
<p>禁用当前引导入口的EMS，使用如下命令。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/ems&nbsp;off<br></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;每个引导入口都使用一个GUID作为标识。如果没有指定标识，<strong>BCDEdit</strong>命令都修改当前引导入口。如果指定了标识，引导入口的GUID必须用大括号<strong>{ }</strong>括起来。要查看所有激活的引导入口的GUID，使用<strong>bcdedit /enum</strong>命令。 </span>
<h1>用于配置DEP和PAE的引导参数 </h1>
<p>本主题说明了如何在支持这些特性的系统上使用引导参数启用、禁用和配置数据执行保护(DEP)和物理地址扩展(PAE)。
<p>获取Windows Vista之前的操作系统和DEP有关的引导选项的信息，包括系统支持的和默认的参数，查看 <a><strong>/noexecute</strong></a> 和<a><strong>/execute</strong></a>。关于PAE的类似信息，查看<a><strong>/pae</strong></a> 和 <a><strong>/nopae</strong></a>。
<p>获取Windows Vista上和DEP、PAE有关的引导参数信息，查看<a><strong>BCDEdit /set</strong></a> 命令和<strong>nx</strong> 、<strong>pae</strong> 选项。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>重要&nbsp;&nbsp;DEP</strong>能很打提高系统的安全特性，如果没有特殊原因不要关闭它。默认的DEP和PAE设置在大多数系统上都是最优的。如果它们没有妨碍基本的处理任务，就不要修改默认设置。本节包含如何配置这些特性的内容，但是并不推荐修改这些默认设置。 </span>
<h4>DEP和PAE引导参数 </h4>
<p>在Windows Vista之前的操作系统中，DEP和PAE在引导时就启用，并且有下面四个引导参数配置：
<ul>
    <li><a><strong>/noexecute</strong></a> 启用和配置DEP。
    <li><a><strong>/execute</strong></a> 禁用DEP和PAE。
    <li><a><strong>/pae</strong></a> 启用PAE
    <li><a><strong>/nopae</strong></a> 禁用PAE </li>
</ul>
<p>在Windows Vista上，DEP和PAE在引导时启用，并通过使用<a><strong>BCDEdit /set</strong></a> 命令和<strong>nx</strong> 、<strong>pae</strong> 参数配置。
<p>这些引导参数有些冲突的效果。要配置DEP和PAE，只能按照文档和本主题中对每个参数组合的描述。不要试验这些冲突的参数，特别是在业务使用的系统上。
<h4>DEP和PAE引导参数的交互作用 </h4>
<p>有两种类型的DEP：
<ul>
    <li><em>硬件DEP</em>为内核模式和用户模式进程都启用DEP。必须由处理器和操作系统共同支持。
    <li><em>软件DEP</em>只为用户模式进程启用DEP。必须由操作系统支持。 </li>
</ul>
<p>Windows SP2、Windows Server 2003 SP1 、Windows Vista和之后的Windows版本支持DEP。
<p>在32位Windows中，<em>硬件DEP</em>要求PAE的支持。所有支持DEP的Windows操作系统都支持PAE。当使用支持硬件DEP的处理器的机器上的DEP启用时，Windows自动启用PAE，并跳过所有试图禁用它的引导参数。
<p>在每个Windows操作系统上这些参数的组合在下节中概括描述。
<h4>DEP和PAE参数的结合使用 </h4>
<p>下表说明了用于配置DEP和PAE的参数的组合。
<div>
<table style="BORDER-COLLAPSE: collapse" border=0>
    <colgroup>
    <col style="WIDTH: 216px">
    <col style="WIDTH: 209px">
    <col style="WIDTH: 165px">
    <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" colSpan=2>
            <p>作用</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>Windows Vista之前的系统</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>Windows Vista</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>启用DEP
                <p>(选择一个参数组合)
                <p>当在支持硬件DEP的机器上启用DEP时，这些参数组合也启用PAE</p>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                <p><strong>/noexecute=alwayson<br>/noexecute=optin<br>/noexecute=optout</strong></p>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                <p><strong>/set {ID} nx AlwaysOn</strong><br><br><strong>/set {ID} nx OptIn</strong><br><br><strong>/set {ID} nx OptOut</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>在软件DEP的系统上启用DEP和PAE
                    <p>(选择一个参数组合)
                    <p>在支持硬件DEP的机器上，当DEP启用时，自动启用PAE。</p>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                    <p><strong>/noexecute=alwayson /pae</strong><br><strong>/noexecute=optin /pae</strong><br><strong>/noexecute=optout /pae</strong></p>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                    <p><strong>/set {ID} nx AlwaysOn</strong><br><br><strong>/set {ID} pae default</strong><br><br><strong>/set {ID} nx OptIn</strong><br><br><strong>/set {ID} pae default</strong><br><br><strong>/set {ID} nx OptOut</strong><br><br><strong>/set {ID} pae default</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>禁用DEP，但是启用PAE</p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p><strong>/noexecute=alwaysoff /pae</strong><br><br>(Windows&nbsp;XP SP2)</p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p><strong>/set {ID} nx AlwaysOff</strong><br><br><strong>/set {ID} pae ForceEnable</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" colSpan=2>
                            <p>禁用DEP，但是启用PAE</p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p><strong>/noexecute=alwayoff</strong><br><strong>/noexecute=alwaysoff /pae</strong><br><br>(只在Windows Server&nbsp;2003 SP1上)<br><br>(这些参数组合是等价的。)</p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p><strong>/set {ID} nx AlwaysOff</strong><br><br><strong>/set {ID} pae ForceEnable</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" colSpan=2>
                                <p>同时禁用DEP和PAE</p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p><strong>/noexecute=alwaysoff</strong><br><strong>/noexecute=alwaysoff /nopae</strong><br><br>(Windows&nbsp;XP SP2) <br><br>(这些参数组和是等价的)</p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p><strong>/set {ID} nx AlwaysOff</strong><br><br><strong>/set {ID} pae ForceDisable</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" colSpan=2>
                                    <p>同时禁用DEP和PAE</p>
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                    <p><strong>/execute</strong><br><br>(只在Windows Server&nbsp;2003 SP1上)</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>
                                </tr>
                            </tbody>
                        </table>
                        </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----10&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/43285.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-04-03 17:43 <a href="http://www.cnitblog.com/cc682/articles/43285.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----9</title><link>http://www.cnitblog.com/cc682/articles/43286.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Wed, 02 Apr 2008 07:21:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43286.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43286.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43286.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43286.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: cc682/NetRoc http://netroc682.spaces.live.com/BCD引导选项参考 引导入口参数，又称引导参数，是可选的针对特定系统的配置选项。可以为某个操作系统的引导入口添加引导参数。本节描述在基于x86、x64和Itanium处理器的运行Windows Vista和之后版本的Windows机器上与驱动程序开发、测试和调试相关的引导选项。可以将这些引导...&nbsp;&nbsp;<a href='http://www.cnitblog.com/cc682/articles/43286.html'>阅读全文</a><img src ="http://www.cnitblog.com/cc682/aggbug/43286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-04-02 15:21 <a href="http://www.cnitblog.com/cc682/articles/43286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----8</title><link>http://www.cnitblog.com/cc682/articles/43288.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Mon, 31 Mar 2008 05:54:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43288.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43288.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43288.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43288.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: cc682/NetRoc http://netroc682.spaces.live.com/Boot.ini引导参数参考 引导入口参数又称引导参数，是可选的特定系统的包含配置选项的开关。可以为系统的某个引导入口添加引导参数。本节描述基于x86、x64及Itanium处理器的，运行Windows Server 2003或更早版本基于NT内核的Windows系统和驱动开发、测试、调试相...&nbsp;&nbsp;<a href='http://www.cnitblog.com/cc682/articles/43288.html'>阅读全文</a><img src ="http://www.cnitblog.com/cc682/aggbug/43288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-03-31 13:54 <a href="http://www.cnitblog.com/cc682/articles/43288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----7</title><link>http://www.cnitblog.com/cc682/articles/43289.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Thu, 27 Mar 2008 07:40:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43289.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43289.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43289.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43289.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43289.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>本节是关于如何修改Windos Vista和之后版本Windows、Windows Server 2003、Windows XP及Windows 2000引导选项的实用指南。它建议了关于如何自定义引导选项各个基本元素的详细操作步骤。
<p>对于Windows Server 2003和Windows XP，本节说明了2003和XP中自带的Bootcfg工具的使用方法。
<p>对于Windows Vsita和之后版本的Windows，本节说明了这些系统自带的BCDEdit工具的使用方法。关于BCDEdit命令语法，可以在命令提示符下输入<strong>bcdedit /?</strong>或者<strong>bcdedit /? TOPICS</strong>查看。
<p>查看关于通过编辑引导入口参数来启用或禁用Windows功能的帮助，查看<a>使用引导选项</a>。
<p>修改引导选项中的系统特性：
<ul>
    <li><a>添加引导入口</a>，可以通过复制同一个系统已存在的引导入口实现。
    <li><a>修改友好名</a>，将新创建的入口的名字修改掉，使得能够在引导菜单中识别出来。
    <li><a>在引导入口中增加参数</a>，用于启用和配置Windows特性。 </li>
</ul>
<p>然后，下面的方法可以使得测试更快和更容易：
<ul>
    <li><a>将新的引导入口设置为默认入口</a>。
    <li><a>修改引导菜单超时时间</a>。可以将超时时间改短，使得Windows更快被引导起来。或者可以改长，使得能有充足的时间来选择 合适的引导入口。 </li>
</ul>
<h1>添加引导入口 </h1>
<p>自定义引导选项的第一步就是为某个操作系统添加新的<em>引导入口</em>。<em>引导入口</em>是为操作系统或引导程序定义的一组加载配置。
<p>一个操作系统可以有多个引导入口，每个的参数都可以不同。Windows安装程序在安装系统的时候创建了标准的引导入口，但是还可以通过修改引导选项自己添加新的、自定义的入口。
<p>也可以在Windows 安装程序创建的入口中添加、删除或修改选项。但是最好保持标准入口，而添加一个新的入口来修改。
<p>新建引导入口，可以复制一个已存在的入口再修改它。
<h4>在Windows Vista之前的系统使用Bootcfg </h4>
<p>可以使用Bootcfg <strong>/copy</strong> 命令来复制引导入口，这一操作是和固件无关的。
<p>下面的Bootcfg命令将第二个引导入口复制成新的入口。<strong>/ID</strong> 参数指定被复制的入口的行号，<strong>/d</strong> (说明)命令指定新入口的友好名，友好名必须用引号括起来。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bootcfg&nbsp;/copy&nbsp;/ID&nbsp;2&nbsp;/d&nbsp;"Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional&nbsp;-&nbsp;new"</strong><br><br></span>
<p>如果添加过从来不使用的引导入口，一定要删除它们，特别是在使用有限的EFI NVRAM资源的机器上。使用Bootcfg <strong>/delete</strong> 命令来删除一个不使用的入口。<span style="FONT-FAMILY: 宋体"> </span>
<p>如果一个系统有多个引导入口，一定要将首选的入口设置为默认入口。更多操作说明，查看<a>修改默认引导入口</a>。
<p>查看完整的Bootcfg操作说明，查看帮助和支持。示例可以查看<a>使用引导参数</a>。
<h4>在Windows Vista之前的系统中编辑<em>Boot.ini</em>文件 </h4>
<p>在<em>Boot.ini</em>中添加新入口，可以复制并粘贴某个入口。然后将新入口的友好名修改得在文件和引导菜单中能轻易识别。友好名是在引导入口中被引号括起来的字符串。
<p>例如，下面的<em>Boot.ini</em>文件中，原来的Windows XP入口被复制了一份，并且新入口的友好名被修改了。新创建的入口是用粗体字标识的。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br>default=multi(0)disk(0)rdisk(0)partition(1)\WINNT<br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft&nbsp;Windows&nbsp;2000&nbsp;Professional"&nbsp;/fastdetect&nbsp;<br>multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect&nbsp;<br><strong>multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional&nbsp;-&nbsp;new"&nbsp;/fastdetect</strong><br><br></span>
<h4>在Windows Vista中新建引导入口<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在Windows Vista中使用BCDEdit来修改引导选项。添加新的入口，需要用管理员权限打开一个命令提示符窗口(右键点击<strong>命令提示符</strong>并在快捷菜单中点击<strong>以管理员方式运行</strong>)。
<p>使用BCDEdit和<strong>/copy</strong>参数复制已有的入口。例如，下面的命令中，BCDEdit复制了{current}标识的，最近一次被Windows使用过的引导入口，并创建了新入口。<strong>/d</strong>参数指定新引导入口的名字为DebugEntry。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/copy&nbsp;{current}&nbsp;/d&nbsp;"DebugEntry"<br></span>
<p>如果命令成功，BCDEdit显示类似下面的信息(中文系统上是中文说明。)：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">The&nbsp;entry&nbsp;was&nbsp;successfully&nbsp;copied&nbsp;to&nbsp;{49916baf-0e08-11db-9af4-000bdbd316a0}.<br></span>
<p>复制了引导菜单上的入口之后，新入口会自动被添加到引导菜单末尾。 <span style="FONT-FAMILY: 宋体"></span>
<p>前面的信息中的GUID(大括号(<strong>{}</strong>)中的内容)是新入口的标识。可以用它来在所有BCDEdit命令中指明该入口。
<p>如果该命令失败，确认是否以管理员权限运行命令提示符窗口，以及包括<strong>{current}</strong>两端的大括号在内的所有命令参数都正确拼写了。
<p>也可以使用<strong>/create</strong> 选项新建引导入口。例如下面的命令新建了一个名为"My Windows Vista"的引导入口：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/create&nbsp;/d&nbsp;"My&nbsp;Windows&nbsp;Vista"&nbsp;/application&nbsp;osloader<br></span>
<p>使用<strong>/create</strong> 参数时，新的引导入口不会自动被加入引导菜单。可以用<strong>/displayorder</strong> 选项将新入口添加到引导菜单中。可以以任何顺序排列引导入口。<span style="FONT-FAMILY: 宋体"> </span>
<p>查看关于<strong>/create</strong>命令参数的更多信息，可以在命令提示符窗口键入<strong>bcdedit /? /create</strong> 。
<h4>编辑Windows Vista的引导菜单 </h4>
<p>Windows Vista中，新引导入口不会自动添加到引导菜单，可以以任何顺序排列引导入口。
<p>使用<strong>/displayorder</strong> 选项来设置多重引导菜单中引导管理器显示入口的顺序。该命令语法如下：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/displayorder&nbsp;{ID}&nbsp;{ID}&nbsp;...<br></span>
<p>ID是引导入口的GUID或类似<strong>{current}</strong>这样的保留标识。用空格分开每个标识符，并必须包含大括号({})。<span style="FONT-FAMILY: 宋体"> </span>
<p>For example, to add the DebugEntry boot entry to the boot menu after the <strong>{current} </strong>entry, use the following command:
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/displayorder&nbsp;{current}&nbsp;{49916baf-0e08-11db-9af4-000bdbd316a0}<br></span>
<p>也可以使用<strong>/addlast,</strong> <strong>/addfirst</strong>，和<strong>/remove</strong>选项来 在菜单中排序或删除条目。例如下面的命令将DebugEntry 引导入口设置为菜单的最后一条。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/displayorder&nbsp;{49916baf-0e08-11db-9af4-000bdbd316a0}&nbsp;/addlast&nbsp;<br></span>
<p>想验证显示顺序是否正确，可以使用下面的命令：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit<br></span>
<p>键入<strong>bcdedit</strong> 并不使用其它参数时，BCDEdit按照引导菜单中的顺序显示引导管理器入口和引导入口。 <span style="FONT-FAMILY: 宋体"></span>
<p>Windows引导管理器入口也包含引导菜单显示顺序，如下所示：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><br>Windows&nbsp;Boot&nbsp;Manager<br>--------------------<br>identifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{bootmgr}<br>device&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partition=C:<br>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Windows&nbsp;Boot&nbsp;Manager<br>locale&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;en-US<br>inherit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{globalsettings}<br>default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{current}<br>displayorder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{current}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}<br>toolsdisplayorder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{memdiag}<br>timeout&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30<br><br>Windows&nbsp;Boot&nbsp;Loader<br>-------------------<br>identifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{current}<br>device&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partition=C:<br>path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Windows\system32\winload.exe<br>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Microsoft&nbsp;Windows&nbsp;Vista<br>locale&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;en-US<br>inherit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{bootloadersettings}<br>osdevice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partition=C:<br>systemroot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Windows<br>resumeobject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{d7094401-2641-11db-baba-00e018e2b8db}<br>nx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OptIn<br><br>Windows&nbsp;Boot&nbsp;Loader<br>-------------------<br>identifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{18b123cd-2bf6-11db-bfae-00e018e2b8db}<br>device&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partition=C:<br>path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Windows\system32\winload.exe<br>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Debugger&nbsp;Boot<br>locale&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;en-US<br>inherit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{bootloadersettings}<br>osdevice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partition=C:<br>systemroot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Windows<br>resumeobject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{d7094401-2641-11db-baba-00e018e2b8db}<br>nx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OptIn<br>debug&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes </span>
<h1>修改引导入口的友好名 </h1>
<p>在Windows Server 2003和之前基于NT内核的Windows中，引导管理器通过引导入口来生成引导菜单。菜单中条目是以引导入口的友好名来显示的。在Windows Vista中类似，引导管理器中出现的条目是引导入口的说明。
<p>一般来说，在复制了引导入口之后，会把新入口的友好名修改掉，以和原始入口区分开。
<p>也可以将友好名修改 得更容易理解自定义的引导入口。用适合的说明来描述引导入口可以节省很多时间。
<p>如下的友好名没有什么意义。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">"Windows&nbsp;XP&nbsp;Debug1"<br>"Windows&nbsp;XP&nbsp;Debug2"<br><br></span>
<p>但是，下面这样有意义的名字，使得选择更加容易。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">"Windows&nbsp;XP&nbsp;NullModem"<br>"Windows&nbsp;XP&nbsp;1394"<br><br></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;当引导入口在x86或x64系统上被配置来进行调试(<a><strong>/debug /debugport</strong></a>)或紧急管理服务(Emergency Management Services (EMS)) (<a><strong>/redirect</strong></a>)时 ，boot loader会在引导菜单中显示的友好名后添加一个中括号括起来的后缀([debugger enabled] 或 [ems enabled])。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">但是，boot loader在友好名和后缀合起来超过70个字符时，会省略掉后缀。要想它被显示出来，需要改短友好名。 </span>
<p>修改<em>Boot.ini</em>文件中的引导入口友好名，可以通过Bootcfg或者用记事本编辑<em>Boot.ini</em>。在EFI NVRAM的机器上，使用Bootcfg。
<p>修改Windows Vista或之后版本Windows上的引导入口友好名，使用BCDEdit。
<h4>使用Bootcfg </h4>
<p>使用Bootcfg，可以在复制引导入口的时候就修改友好名。用Bootcfg <strong>/copy</strong> 命令复制入口并修改它的名字。
<p>下面的Bootcfg命令复制第一个入口并创建新入口。<strong>/ID</strong>参数指定新入口复制到的行号。<strong>/d</strong>(说明)参数指定新入口的友好名。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bootcfg&nbsp;/copy&nbsp;/ID&nbsp;1&nbsp;/d&nbsp;"Windows&nbsp;XP&nbsp;Debug"</strong><br><br></span>
<p>Bootcfg的完整操作说明，查看帮助和支持服务。示例可以查看 <a>使用引导参数</a>。<span style="FONT-FAMILY: 宋体"> </span>
<h4>编辑<em>Boot.ini</em>文件 </h4>
<p>在<em>Boot.ini</em>文件中，引导入口的友好名被引号括起来。
<p>例如，下面的<em>Boot.ini</em>示例中将Microsoft Windows XP Professional引导入口复制了一份。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional<strong>"</strong>&nbsp;/fastdetect<br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect<br><br></span>
<p>修改入口的友好名，可以修改掉引号内的字符串。下面的示例中，因为第一个入口将用于调试，所以名字修改为Windows&nbsp;XP Debug。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=<strong>"Windows&nbsp;XP&nbsp;Debug"</strong>&nbsp;/fastdetect<br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=<strong>"</strong>Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional<strong>"</strong>&nbsp;/fastdetect<br><br></span>
<h4>使用BCDEdit<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>修改引导菜单中显示的引导入口说明，<strong>/set </strong><em>ID</em><strong> description</strong>选项。命令语法如下，其中的ID是引导入口的GUID。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bcdedit&nbsp;/set</strong>&nbsp;<em>ID</em>&nbsp;<strong>description</strong>&nbsp;<strong>"</strong><em>The&nbsp;new&nbsp;description</em><strong>"</strong><br></span>
<p>例如：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{802d5e32-0784-11da-bd33-000476eba25f}&nbsp;description&nbsp;"Windows&nbsp;Vista&nbsp;NullModem"<br></span>
<p>也可以在复制入口的时候用<strong>/d</strong>选项修改。 <span style="FONT-FAMILY: 宋体"></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/copy&nbsp;{current}&nbsp;/d&nbsp;"Windows&nbsp;Vista&nbsp;NullModem" </span>
<h1>修改引导参数 </h1>
<p>要起用或配置引导相关的操作系统特性，例如调试，必须在该系统的引导入口中添加引导参数。
<p>在Windows Server 2003及更早的基于NT内核系统中，和驱动程序开发、测试和调试相关的引导参数列表，查看<a>引导参数参考</a>。
<p>在Windows Server 2003及更早的基于NT内核系统中驱动调试和测试的引导入口配置例子，可以查看<a>使用引导参数</a>。
<p>在基于BIOS固件的运行Windows Server 2003及更早的基于NT内核Windows的机器上，可以通过使用Bootcfg或者记事本编辑<em>Boot.ini</em>文件来修改引导参数。在EFI固件的机器上，使用Bootcfg或Nvrboot。
<p>修改Windows Vista或更迟版本Windows 系统的引导参数，使用BCDEdit。
<h4>使用Bootcfg </h4>
<p>Bootcfg在<strong>OS Load Options</strong> 字段(EFI固件机器上标注为<strong>OsLoadOptions</strong>)中显示引导选项。
<p>下面的例子是Bootcfg显示的EFI NVRAM中的引导选项。示例引导入口包含<a><strong>/fastdetect</strong></a> 和 <a><strong>/debug</strong></a>参数，以及<strong>/debugport</strong> 和 <strong>/baudrate</strong>子参数。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;2<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Microsoft&nbsp;Windows&nbsp;XP&nbsp;64-Bit&nbsp;Edition<br><strong>OsLoadOptions:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=115200</strong><br>BootFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume1\EFI\Microsoft\WINNT50C\ia64ldr.efi<br>OsFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume3\WINDOWS.0<br><br></span>
<p>在引导入口中增加引导参数，可以使用特定参数的选项，如<strong>/ems</strong>，<strong>/debug</strong>，和<strong>/dbg1394</strong>或者Bootcfg <strong>/addsw</strong> 或 <strong>/raw</strong>命令。查看Bootcfg参数的完整列表，可以在命令提示符下输入<strong>bootcfg&nbsp;/?</strong>。<span style="FONT-FAMILY: 宋体"> </span>
<p>例如，下面的Bootcfg命令使用了Bootcfg <strong>/addsw</strong> 和<strong>/MM</strong>值为512的命令，在第二个<strong>引导入口</strong>中添加了<a><strong>/maxmem</strong></a>引导参数，并将<strong>/maxmem</strong> 值设置为512(MB)。<strong>/ID</strong> 参数指定修改第二个引导入口(行号为2)。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bootcfg&nbsp;/addsw&nbsp;/MM&nbsp;512&nbsp;/ID&nbsp;2<br><br></span>
<p>修改结果在64位Bootcfg的显示可能如下：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;2<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Microsoft&nbsp;Windows&nbsp;XP&nbsp;64-Bit&nbsp;Edition<br>OsLoadOptions:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=115200&nbsp;<strong>/maxmem=512</strong><br>BootFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume1\EFI\Microsoft\WINNT50C\ia64ldr.efi<br>OsFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume3\WINDOWS.0<br><br></span>
<h4>编辑<em>Boot.ini</em>文件<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在<em>Boot.ini</em>文件中，引导参数紧跟着友好名。
<p>下面的<em>Boot.ini</em>中的一个入口包含<a><strong>/fastdetect</strong></a> 和 <a><strong>/debug</strong></a>参数，以及<strong>/debugport</strong> 和 <strong>/baudrate</strong>子参数。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows&nbsp;XP&nbsp;Debug1"&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=57600<br><br></span>
<p>增加启动参数，需要按照规定的语法输入参数。<span style="FONT-FAMILY: 宋体"> </span>
<p>例如，增加<a><strong>/maxmem</strong></a>选项，需要在入口参数列表中输入<strong>/maxmem</strong> 和以MB为单位的值。这些参数可以以任何顺序出现。下面的示例中，<strong>/maxmem</strong>参数和值512(MB)出现在参数表最后。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows&nbsp;XP&nbsp;Debug1"&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=57600&nbsp;<strong>/maxmem=512</strong><br><br></span>
<h4>使用BCDEdit<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在引导入口中增加引导配置参数，可以用BCDEdit的引导入口选项来修改全局设置，如<strong>/ems</strong>，<strong>/debug</strong>，<strong>/dbgsettings</strong>，或者使用<a><strong>BCDEdit /set</strong></a>选项来设置单个参数。 查看BCDEdit的完整参数列表，可以输入<strong>BCDEdit&nbsp;/?</strong>，也可以用<strong>BCDEdit /?</strong> &lt;<em>命令&gt;</em>查看指定的命令。
<p>例如，下面的命令开启某个引导入口的PAE：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/set&nbsp;{802d5e32-0784-11da-bd33-000476eba25f}&nbsp;pae&nbsp;forceenable<br></span>
<p>启动或禁用内核调试器，按如下语法使用<strong>/debug</strong> 选项。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/debug&nbsp;<em>&lt;ID&gt;</em>&nbsp;[on&nbsp;|&nbsp;off]<br></span>
<p><em>&lt;ID&gt;</em>是要修改的引导入口的GUID。如果不指定<em>&lt;ID&gt;</em>，则命令修改当前运行的系统。下面的命令启用名为DebugEntry的引导入口的内核调试器。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/debug&nbsp;{49916baf-0e08-11db-9af4-000bdbd316a0}&nbsp;on<br></span>
<p>查看当前的所有引导入口，可以在命令提示符键入<strong>bcdedit</strong>。DebugEntry 的引导入口显示内核调试器被起用了。 <span style="FONT-FAMILY: 宋体"></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Windows&nbsp;Boot&nbsp;Loader<br>-------------------<br>identifier&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{49916baf-0e08-11db-9af4-000bdbd316a0}<br>device&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partition=C:<br>path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Windows\system32\winload.exe<br>description&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DebugEntry<br>locale&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;en-US<br>inherit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{bootloadersettings}<br>osdevice&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;partition=C:<br>systemroot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Windows<br>resumeobject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{3e3a9f69-024a-11db-b5fc-a50a1ad8a70e}<br>nx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OptIn<br><strong>pae&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ForceEnable</strong><br><strong>debug&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes</strong> </span>
<h1>修改默认引导入口 </h1>
<p>默认引导入口是引导菜单超时时间到达时，boot loader选择的入口。可以通过修改默认引导入口来使得首选的系统配置能够自动被加载。
<p>在Windows Server 2003或者更早的基于NT内核的Windows中，可以使用Bootcfg或者记事本直接编辑<em>Boot.ini</em>文件来修改默认引导入口。在EFI NVRAM机器上修改，可以使用Bootcfg或者Nvrboot。在所有平台上，Bootcfg都能够提供最简单、安全的指定默认入口的方法。
<p>在Windows Vista或更新版本的Windows中，使用BCDEdit来修改默认引导入口。
<h4>使用Bootcfg </h4>
<p>Bootcfg在所有系统上都提供了最简单的方法来修改默认引导入口。但是Bootcfg在不同系统上显示的信息有少许差异。
<ul>
    <li>在BIOS固件的机器上，Bootcfg按照<em>Boot.ini</em>中的顺序显示引导入口。在这种情况下，默认引导入口是Bootcfg显示的<strong>引导入口</strong>节中默认操作系统的第一个引导入口。
    <li>在EFI固件的机器上，Bootcfg按照引导顺序显示入口。因此第一个列出的引导入口是默认入口。(Bootcfg在显示的时候增加了一个<strong>default</strong> 参数，但是这并不是在EFI NVRAM中保存的。) </li>
</ul>
<p>在两种类型的系统上修改默认引导入口，使用Bootcfg <strong>/default</strong> 命令。下面的命令将第二个引导入口(行号为2)设置为默认。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bootcfg&nbsp;/default&nbsp;/ID&nbsp;2</strong><br><br></span>
<p>Bootcfg <strong>/default</strong> 命令的作用在不同种类机器上有少许差异。BIOS固件的系统上，<strong>/default</strong> 选项修改掉<em>Boot.ini</em>文件中的<strong>default</strong> 参数，为了将选定的引导入口设置为默认，可能重新对引导入口进行排序。在EFI固件的系统上，Bootcfg <strong>/default</strong> 命令修改掉引导顺序。使得选定的引导入口出现在Bootcfg的<strong>Boot Entries</strong> 节第一个。<span style="FONT-FAMILY: 宋体"> </span>
<p>关于Bootcfg的完整操作指令，查看帮助和支持服务。示例查看<a>使用引导参数</a>。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;Bootcfg中的<strong>Boot entry ID</strong> 字段和Nvrboot中的引导入口号并不是EFI引导入口ID。Bootcfg和Nvrboot中的ID只反映了在<strong>Boot Entries</strong> 节中所排的行号，并且重新排序入口的时候就会改变。 </span>
<h4>编辑<em>Boot.ini</em> 文件 </h4>
<p>修改默认引导入口之前，必须识别当前的默认引导入口。下面两个元素决定了哪个引导入口是默认的：
<ul>
    <li><strong>default</strong> 参数的值。
    <li><em>Boot.ini</em>文件[operating systems]节中入口的顺序。 </li>
</ul>
<p>默认引导入口是 [operating systems]节中的默认操作系统的第一个引导入口。
<p>例如，下面的示例<em>Boot.ini</em>文件有两个Windows 2000入口和两个Windows XP入口。<strong>default</strong> 参数指定了磁盘0、分区1中的WINNT目录中的Windows 2000操作系统。默认引导入口名为"Microsoft Windows&nbsp;2000 Professional，在下面以粗体显示。这是[operating systems] 节中用于引导Windows 2000(在磁盘0，分区1的WINNT目录下的操作系统)的第一个入口。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br><strong>default=multi(0)disk(0)rdisk(0)partition(1)\WINNT</strong><br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect&nbsp;<br>multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Windows&nbsp;XP&nbsp;Debug"&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=19200&nbsp;<br><strong>multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft&nbsp;Windows&nbsp;2000&nbsp;Professional"&nbsp;/fastdetect&nbsp;</strong><br>multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft&nbsp;Windows&nbsp;2000&nbsp;Debug"&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=19200&nbsp;<br><br></span>
<p>按如下步骤修改默认引导入口。<span style="FONT-FAMILY: 宋体"> </span>
<p><strong>修改默认引导入口</strong>
<ol>
    <li>复制新的默认入口中的操作系统位置，并将它粘贴到<strong>default</strong> 参数的值中。
    <li>将该入口放到同一个操作系统的其他所有入口之前。 </li>
</ol>
<p>下面的例子说明了修改的结果。在这个修改的<em>Boot.ini</em>文件中，Windows XP是默认操作系统，并且"Windows XP Debug"是默认引导入口。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br><strong>default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS</strong><br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft&nbsp;Windows&nbsp;2000&nbsp;Debug"&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=19200&nbsp;<br>multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft&nbsp;Windows&nbsp;2000&nbsp;Professional"&nbsp;/fastdetect&nbsp;<br><strong>multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Windows&nbsp;XP&nbsp;Debug"&nbsp;/fastdetect&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=19200&nbsp;</strong><br>multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect&nbsp;<br><br></span>
<h4>使用Nvrboot<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>在以EFI NVRAM存储引导选项的系统上，可以使用<strong>nvrboot&nbsp;p</strong> (push)命令。它将一个引导入口放到所有入口列表的顶部，使得它成为<strong>Boot Entries</strong> 节中第一个入口。
<p>和Bootcfg一样，<strong>nvrboot&nbsp;p</strong> 命令重新排序<em>BootOrder</em> 数组中的值，使得指定的引导入口的NVRAM引导ID是这个数组中第一个值。
<h4>使用BCDEdit </h4>
<p>在Windows Vista中，可以用<strong>/default</strong> 选项指定默认入口。指定默认操作系统的语法如下：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/default&nbsp;<em>&lt;ID&gt;</em><br></span>
<p><em>&lt;ID&gt;</em> 是想要设置成默认的操作系统的GUID。必须在GUID两端加上大括号({})，例如：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/default&nbsp;{cbd971bf-b7b8-4885-951a-fa03044f5d71}<br></span>
<p>在多引导机器上要将默认入口修改为早期版本操作系统加载器，可以将<em>&lt;ID&gt;</em> 设置为<strong>{ntldr}</strong>，既为Ntldr保留的GUID名。这样可能会再出现另外一个依赖于<em>Boot.ini</em>文件的菜单。<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/default&nbsp;{ntldr}<br></span>
<h1>修改引导菜单超时 </h1>
<p>引导菜单超时选项决定在加载默认引导入口之前，引导菜单显示的时间。它以秒为单位。
<p>如果想要更多时间用于选择加载哪个操作系统，可以增大这个超时值。或者减小它 以使得默认系统更快的被启动起来。
<p>在Windows Server 2003及更早版本基于NT内核的Windows上，可以通过Bootcfg或者用记事本修改<em>Boot.ini</em>文件中的超时时间。修改保存在EFI NVRAM中的超时时间，必须使用Bootcfg。(Nvrboot只能编辑引导入口)
<p>在Windows Vista中，使用BCDEdit修改默认的引导菜单超时时间。
<h4>使用Bootcfg </h4>
<p>修改引导菜单超时，可以使用Bootcfg <strong>/timeout</strong> 选项。合法的值是从0到999。不能用Bootcfg设置不明确的超时时间。
<p>下面的Bootcfg命令将超时时间设置为2秒：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New"><strong>bootcfg&nbsp;/timeout&nbsp;2</strong><br><br></span>
<p>下面的Bootcfg输出显示了EFI NVRAM中新的超时时间。 <span style="FONT-FAMILY: 宋体"></span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Options<br>------------<br><strong>Timeout:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</strong><br>Default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume3\WINDOWS<br>CurrentBootEntryID:&nbsp;&nbsp;1<br><br></span>
<p>查看Bootcfg完整的操作指令，查看帮助和支持服务。示例可以查看<a>使用引导参数</a>。<span style="FONT-FAMILY: 宋体"> </span>
<h4>编辑<em>Boot.ini</em> 文件 </h4>
<p><em>Boot.ini</em>文件的[boot loader] 节中的<strong>timeout</strong> 参数决定引导菜单的超时时间。合法的值为0到9999或者-1。当<strong>timeout</strong> 设置为-1时，超时值是不确定的，即在引导菜单中明确选定一项之前，操作系统不会启动。
<p>修改<em>Boot.ini</em>文件中的引导菜单超时时间，可以为[boot loader]中的 <strong>timeout</strong> 参数指定新的值。例如下面的Bootcfg显示输出默认超时时间为30秒，既所有版本Windows中的预设值。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br><strong>timeout=30</strong><br>default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS<br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft&nbsp;Windows&nbsp;2000&nbsp;Professional"&nbsp;/fastdetect&nbsp;<br>multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect&nbsp;<br><br></span>
<h4>使用BCDEdit<span style="FONT-FAMILY: 宋体"> </span></h4>
<p>指定引导菜单超时时间，使用<strong>/timeout</strong> 选项。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/timeout&nbsp;<em>&lt;timeout&gt;</em><br></span>
<p>以秒为单位使用<strong>/timeout </strong>选项设置超时值。例如，下面设置超时值为15秒：<span style="FONT-FAMILY: 宋体"> </span>
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">bcdedit&nbsp;/timeout&nbsp;15 </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----7&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/43289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-03-27 15:40 <a href="http://www.cnitblog.com/cc682/articles/43289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----6</title><link>http://www.cnitblog.com/cc682/articles/43290.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Tue, 25 Mar 2008 09:21:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43290.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43290.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43290.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43290.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43290.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>要进行内核调试，必须启用并配置一些在操作系统加载阶段就会确定的特性。这些特性的设置包含在<em>启动选项</em>中，这些启动选项用于决定boot loader如何加载并配置操作系统及其他可引导的程序和设备。
<p>目标机的内核调试设置，也可以在系统引导之后使用KdbgCtrl实用程序修改。
<p>从Windows Vista开始，Windows包含了新的boot loader架构、新的引导选项和新的引导选项编辑器。更多信息，查看<a>Windows Vista引导选项</a>。
<p>本节包含以下内容：
<p><a>引导选项介绍</a>
<p><a>编辑引导选项</a>
<p><a>引导参数参考</a>
<p><a>使用引导参数</a>
<p><a>绕过启动选项</a>
<p><a>禁用1394控制器</a>
<p><a>使用KDbgCtrl</a>
<h1>引导选项介绍 </h1>
<p>所有运行Microsoft Windows的操作系统上，引导选项的概念和内容都是相近的。但是，Windows Vista之前，不同处理器固件的电脑保存引导选项的方式不同，并且在各个系统上需要用不同的工具来查看和编辑这些选项。使用BIOS固件，即使用x86和x64处理器的电脑，在<em>boot.ini</em>中存储引导选项，并且可以使用记事本编辑。主要是使用Itanium处理器的一系列采用EFI固件的电脑，在非挥发性的RAM中存储引导选项，必须使用专用工具修改。
<p>Windows Vista及以后版本的Windows，采用不依赖固件的存储方式和配置系统存储引导选项。Vista也引入了新的引导配置器和系统相关的boot loader。获取更多信息，可以查看<a>Windows Vista引导选项</a>。
<p>本节包含以下内容：
<p><a><em>Boot.ini</em>中的引导选项</a>
<p><a>EFI NVRAM中的引导选项</a>
<p><a>Windows Vista引导选项</a>
<p>本节描述和驱动程序开发测试相关的引导选项。要查看关于基于x86和Itanium系统的启动过程，包括各个系统上标准的启动选项，可以在&nbsp;<a href="http://go.microsoft.com/fwlink/?linkid=10111">Microsoft TechNet</a>站点上查看Microsoft Windows XP Professional资源包文档及Microsoft Windows Server 2003资源包。
<h1><em>Boot.ini</em>文件中的引导选项 </h1>
<p><em>Boot.ini</em>是在系统分区根目录下的一个文本文件，一般为<em>c:\Boot.ini</em>。 <em>Boot.ini</em> 用于存储传统上基于x86和x64的具有BIOS固件系统的引导选项。
<p>在Windows Server 2003及更早版本的基于NT架构Windows系统中，当电脑启动时，Windows boot loader，即Ntldr会读取<em>Boot.ini</em>并为显示引导菜单中所有系统显示入口。然后，Ntldr按照<em>Boot.ini</em>文件中的设置加载被选中的系统。
<p>在NTFS文件系统下，默认情况<em>Boot.ini</em>文件具有<strong>系统</strong>，<strong>隐藏</strong>，<strong>存档</strong>，<strong>只读</strong>属性；但是，管理员组的用户可以修改这些属性。文件属性不会影响boot loader的操作。
<p>下面几节简要描述了<em>Boot.ini</em>文件并具体到使用个人电脑高级技术(Personal Computer Advanced Technology (PC/AT))BIOS固件的机器上来解释引导选项的情况。
<p>本节包含：
<p><a><em>Boot.ini</em>文件概述</a>
<p><a>编辑<em>Boot.ini</em>文件</a>
<p><a>备份<em>Boot.ini</em>文件</a>
<p>本文档描述驱动开发者和测试者关心的<em>Boot.ini</em>文件。查看更全面的基于x86系统<em>Boot.ini</em>文件描述，包括<em>Boot.ini</em>参数列表信息，查看&nbsp;<a href="http://go.microsoft.com/fwlink/?linkid=10004">Microsoft Windows&nbsp;XP Professional 资源包文档</a>中的"检查和纠正x86系统Boot.ini设置"。
<h1><em>Boot.ini</em> 文件概述 </h1>
<p><em>Boot.ini</em>文件是在Windows Vista之前的运行于BIOS固件及基于NT内核系统中用于存储引导选项的文本文件。它一般位于系统分区根目录，如： c:\<em>Boot.ini</em>。
<p>下面是一个典型<em>Boot.ini</em>文件内容的示例：
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br>[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect<br>C:\CMDCONS\BOOTSECT.DAT="Microsoft&nbsp;Windows&nbsp;Recovery&nbsp;Console"&nbsp;/cmdcons<br><br></span>
<p><em>Boot.ini</em>文件有两个主要的部分：<span style="FONT-FAMILY: 宋体"> </span>
<ul>
    <li>
    <div><strong>[boot loader]</strong>节包含影响系统中所有引导入口的选项。这些选项包括<strong>timeout</strong>(引导菜单的超时值)，和<strong>default</strong>(默认操作系统) 。 </div>
    <p>下面是一个<em>Boot.ini</em>的[boot loader] 节示例。
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[boot&nbsp;loader]<br>timeout=30<br>default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br><br></span></p>
    <li>
    <div><strong>[operating systems]</strong> 节为每个操作系统或安装的每个可引导程序包含一个或多个<em>引导入口(boot entrie)</em>。 </div>
    <p><em>引导入口</em>是为操作系统或可引导程序定义的一组加载配置。引导入口指定了一个操作系统或可引导程序以及他们的文件位置。也可以包含配置系统或程序的选项。
    <p>下面的示例显示了一台有两个操作系统的机器上<em>boot.ini</em>文件的[operating systems]节，Microsoft Windows&nbsp;XP 和Microsoft Windows&nbsp;2000。每个操作系统都分别有一个引导入口。
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">[operating&nbsp;systems]<br>multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"&nbsp;/fastdetect<br>multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft&nbsp;Windows&nbsp;2000&nbsp;Professional"&nbsp;/fastdetect<br></span></p>
    </li>
</ul>
<p>每个引导入口都有如下一些元素：<span style="FONT-FAMILY: 宋体"> </span>
<ul>
    <li>
    <div>操作系统位置。Boot.ini文件使用高级RISC计算命名惯例(Advanced RISC Computing (ARC) naming convention)来表明操作系统位于磁盘的哪个分区及哪个目录。例如： </div>
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">multi(0)disk(0)rdisk(0)partition(1)\WINDOWS<br></span></p>
    <li>
    <div>一个更加友好的引导入口名字。这个名字用引号括起来，并会在引导菜单中被显示出来。例如：<span style="FONT-FAMILY: 宋体"> </span></div>
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">"Microsoft&nbsp;Windows&nbsp;XP&nbsp;Professional"<br></span></p>
    <li>
    <div><em>引导入口参数，</em>也称为<em>引导参数</em>或<em>加载参数</em>，可以启用、禁用或配置操作系统特性。引导参数类似于命令行参数，每一个都以斜杠开始，如<a><strong>/debug</strong></a>。可以在每个引导入口中配置0个或多个参数。 <span style="FONT-FAMILY: 宋体"></span></div>
    <p>与驱动测试和调试有关的引导参数列表，可以查看<a>引导参数参考</a>。 </p>
    </li>
</ul>
<p>同一个操作系统也可以有多个引导入口，每个可以有不同的引导参数。安装系统的时候，Windows会创建标准的引导入口，也可以通过编辑<em>Boot.ini</em>文件手动添加新的、自定义的入口。
<h1>编辑<em>Boot.ini</em>文件 </h1>
<p>Windows Vista以前，基于BIOS的计算机将引导选项存放在名为<em>Boot.ini</em>的文本文件中。可以使用Windows XP及Windows Server 2003包含的Bootcfg(vootcfg.exe)工具编辑它，也可以用像记事本一样的文本编辑器来编辑。Bootcfg在Windows 帮助和支持中有文档说明。
<p>也可以在系统的控制面板中修改某些引导选项。在系统信息对话框中的高级选项卡，点击<strong>启动和故障恢复</strong>里面的设置。由于这个功能有所限制，所以本节不会讨论。可以在帮助和支持中心查看关于<strong>启动和故障恢复</strong>对话框的更多信息。
<h4>Bootcfg </h4>
<p>Bootcfg是用于在本地或远程电脑上编辑引导选项的命令行工具。使用Bootcfg命令和程序，可以编辑<em>Boot.ini</em>文件或可扩展固件接口(Extensible Firmware Interface)中的配置，既非挥发性随机访问存储器(EFI NVRAM)。Windows XP和Windows Server 2003的%Systemroot%\System32目录下包含Bootcfg。(Bootcfg的显示在以EFI NVRAM保存引导选项的机器中有少许不同，但是命令是一样的。)
<p>可以使用Bootcfg添加、删除和修改所有引导入口及引导选项；但是不能使用它指定模糊的引导超时时间。也可以在替换或升级操作系统时，用脚本或批处理文件来设置或重置引导选项。不像手动编辑，Bootcfg不能编辑<em>Boot.ini</em>文件中被保护的属性。也可已帮助避免出现可能造成系统无法启动的输入错误。
<p>要使用Bootcfg，必须是Administrators 组的成员。可以在帮助和支持中心查看更多有关Bootcfg的指令信息。
<h4>使用记事本编辑 </h4>
<p>可以使用类似记事本这样的文本编辑器来编辑<em>Boot.ini</em>文件。但是，由于这种方式很容易产生错误，所以应该只在Bootcfg不能使用的时候使用。
<p>编辑<em>Boot.ini</em>文件之前，必须去掉Windows为保护它不被无意中更改而设置的保护属性。当<em>Boot.ini</em>在NTFS文件系统中时，必须是Administrators 组的成员才能修改这些属性。
<p>通过下面一些步骤来使得<em>Boot.ini</em>可被编辑。这些步骤去掉它的系统、隐藏和只读属性。
<p><strong>配置Boot.ini文件属性</strong>
<ol>
    <li>在命令行窗口，转到引导分区的根目录。
    <li>
    <div>输入下面的命令： </div>
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">attrib&nbsp;-s&nbsp;-h&nbsp;-r&nbsp;<em>Boot.ini</em><br></span>
    <p>系统、隐藏和只读属性就去掉了。<span style="FONT-FAMILY: 宋体"> </span></p>
    <li>
    <div>编辑完成后，可以恢复<em>Boot.ini</em>的保护属性。但是，Ntldr可以使用任何文件属性的<em>Boot.ini</em>。在命令行窗口，输入以下命令： </div>
    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">attrib&nbsp;+s&nbsp;+h&nbsp;+r&nbsp;<em>Boot.ini</em><br></span>
    <p>这样就恢复了<em>Boot.ini</em>的保护属性。<span style="FONT-FAMILY: 宋体"> </span></p>
    </li>
</ol>
<h1>备份<em>Boot.ini</em>文件 </h1>
<p>当安装或升级成一个Windows Vista之前的基于NT内核系统时，Windows安装程序会创建新的<em>Boot.ini</em>文件。这个新文件可以保留一部分对旧文件做过的改变，但不是全部。
<p>要保留编辑过的<em>Boot.ini</em>文件，应该在升级或安装新系统之前备份。
<p>升级完成后，可以用备份的文件替换掉新文件。如果是新安装一个系统，可以从备份文件中将自定义的入口复制到新的<em>Boot.ini</em>中。
<p>升级或安装新系统都会恢复<em>Boot.ini</em>文件默认的安全属性，包括只读属性。要编辑它，需要使用Bootcfg或修改掉文件属性。更多信息可以查看<a>编辑<em>Boot.ini</em> 文件</a>。
<h1>EFI NVRAM中的引导选项 </h1>
<p>使用可扩展固件接口(EFI)固件的机器，例如使用Intel Itanium2处理器的，在NVRAM中保存引导选项。NVRAM是一种可写，并且可在关闭电脑后保存数据的存储媒介。
<p>EFI固件和BIOS的作用差不多，但是没有传统BIOS的一些限制。X86平台系统上由BIOS和引导管理器(NTLDR)实现的启动过程，由名为EFI BIOS和EFI引导管理器的组件完成。
<p>要在运行Windows Server 2003和更早版本基于NT内核系统的EFI系统上配置和驱动开发测试相关的特性，必须编辑NVRAM中的引导选项。下面的小节简单描述EFI NVRAM中的引导选项，并说明这些选项如何表现于具体的系统上。
<p>在Windows Vista及之后版本的Windows中，基于BIOS或EFI的机器都将引导选项存储在<em>引导配置数据</em>(<em>Boot Configuration Data</em> (BCD))中。这是一种用于存储引导选项的固件无关的配置和存储系统。更多信息可以查看<a>Windows Vista的引导选项</a>。
<p>要获取更多有关基于Itanium系统引导选项的信息，可以查看EFI规范。可以从<a href="http://go.microsoft.com/fwlink/?linkid=10596">Intel Extensible Firmware Interface</a> 站点上下载到该规范的最新版本。
<p>本节包含：
<p><a>EFI引导选项概述</a>
<p><a>编辑EFI引导选项</a>
<p><a>备份EFI引导选项</a>
<h1>EFI引导选项概述 </h1>
<p>类似基于BIOS固件的系统，EFI NVRAM中的引导选项也有两种类型：
<ul>
    <li>适用于及其中所有可引导设备和可引导程序的<em>全局定义变量(Globally-defined variables)</em>
    <li><em>引导选项变量</em>是适用于某个可引导设备或程序的特定加载配置，例如操作系统。系统特定的变量包含机器上可引导设备或程序每个配置的引导入口。 </li>
</ul>
<p>Bootcfg工具(在<a>编辑EFI引导选项</a>中讨论，并在Windows帮助和支持中描述)可以查看和编辑EFI NVRAM中的引导选项。
<p>下面的例子显示了一个Itanium处理器电脑上Bootcfg的输出。
<p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Options<br>------------<br>Timeout:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;30<br>Default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume3\WINDOWS<br>CurrentBootEntryID:&nbsp;&nbsp;1<br><br>Boot&nbsp;Entries<br>------------<br><br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;1<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Windows&nbsp;Server&nbsp;2003,&nbsp;Enterprise<br>OsLoadOptions:&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=57600<br>BootFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume1\EFI\Microsoft\WINNT50\ia64ldr.efi<br>OsFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume3\WINDOWS<br><br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;2<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;EFI&nbsp;Shell&nbsp;[Built-in]<br><br></span>
<p>下表说明了Bootcfg显示出来的EFI NVRAM中的各项元素。
<div>
<table style="BORDER-COLLAPSE: collapse" border=0>
    <colgroup>
    <col style="WIDTH: 142px">
    <col style="WIDTH: 109px">
    <col style="WIDTH: 340px">
    <tbody vAlign=top>
        <tr style="HEIGHT: 21px">
            <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><span style="FONT-FAMILY: 宋体"><strong>字段</strong></span></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 style="TEXT-ALIGN: center"><span style="FONT-FAMILY: 宋体"><strong>说明</strong></span></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 style="TEXT-ALIGN: center"><span style="FONT-FAMILY: 宋体"><strong>示例</strong></span></p>
            <tr style="HEIGHT: 42px">
                <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><strong>Boot Options</strong></p>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                <p><span style="FONT-FAMILY: 宋体">包含适用于所有引导入口的选项。</span></p>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                <p><span style="FONT-FAMILY: 宋体">(节头)</span></p>
                <tr style="HEIGHT: 48px">
                    <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><strong>Timeout</strong></p>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                    <p><span style="FONT-FAMILY: 宋体">决定引导菜单显示时间，当达到这个时间时，boot loader加载默认系统。</span></p>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Timeout:&nbsp;&nbsp;&nbsp;30</span></p>
                    <tr style="HEIGHT: 21px">
                        <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><strong>Default</strong></p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p><span style="FONT-FAMILY: 宋体">指定默认的操作系统位置</span></p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">\Device\HarddiskVolume3\WINDOWS</span></p>
                        <tr style="HEIGHT: 21px">
                            <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><strong>CurrentBootEntryID</strong></p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p><span style="FONT-FAMILY: 宋体">指示当前操作系统使用的引导入口</span></p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">CurrentBootEntryID:&nbsp;&nbsp;1</span></p>
                            <tr style="HEIGHT: 21px">
                                <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><strong>Boot Entries</strong></p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p><span style="FONT-FAMILY: 宋体">包含特定系统的数据。由每个操作系统或可引导程序的一个或多个<em>引导入口</em>组成</span></p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p><span style="FONT-FAMILY: 宋体">(节头)</span></p>
                                <tr style="HEIGHT: 21px">
                                    <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><strong>Boot entry ID</strong></p>
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                    <p><span style="FONT-FAMILY: 宋体">Bootcfg用于标识引导入口的ID。这个值在重新排序引导入口时会改变。它并不是EFI组件使用的固定的<em>EFI引导入口ID</em>。</span></p>
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;1</span></p>
                                    <tr style="HEIGHT: 21px">
                                        <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><strong>OS Friendly Name</strong></p>
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                        <p><span style="FONT-FAMILY: 宋体">用于引导菜单中显示的入口名字</span></p>
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                        <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Windows&nbsp;Server&nbsp;2003,<br>Enterprise</span></p>
                                        <tr style="HEIGHT: 21px">
                                            <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><strong>OsLoadOptions</strong></p>
                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                            <p><span style="FONT-FAMILY: 宋体">指定入口的<em>引导参数</em>。<em>引导参数</em>是用于启用、禁用和配置系统特性的命令。EFI引导管理器将他们传递给可引导设备或系统来解释和实现。 </span>
                                            <p><span style="FONT-FAMILY: 宋体">查看关于驱动程序调试测试相关的引导参数，查看<a>引导参数参考</a>。</span></p>
                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                            <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">OsLoadOptions:&nbsp;/debug<br>/debugport=COM1&nbsp;/baudrate=57600</span></p>
                                            <tr style="HEIGHT: 21px">
                                                <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><strong>BootFilePath</strong></p>
                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                <p><span style="FONT-FAMILY: 宋体">指定操作系统的EFI boot loader位置。在基于EFI的系统中，每个操作系统或可引导设备都在EFI分区上有自己的boot loader拷贝。 </span>
                                                <p><span style="FONT-FAMILY: 宋体">在EFI NVRAM中，boot loader文件路径被存储为以全局唯一标识符(GUID)标识EFI 分区的二进制EFI设备路径。 </span>
                                                <p><span style="FONT-FAMILY: 宋体">Bootcfg在显示路径的时候使用的是分区的NT设备名。</span></p>
                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">BootFilePath:&nbsp;\Device\HarddiskVolume1<br>\EFI\Microsoft\WINNT50\ia64ldr.efi</span></p>
                                                <tr style="HEIGHT: 21px">
                                                    <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><strong>OsFilePath</strong></p>
                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                    <p><span style="FONT-FAMILY: 宋体">指定操作系统位置。 </span>
                                                    <p><span style="FONT-FAMILY: 宋体">在NVRAM中，这个值被存储为以引导分区GUID和包含操作系统的目录路径组成的EFI设备路径。 </span>
                                                    <p><span style="FONT-FAMILY: 宋体">Bootcfg在显示路径的时候使用的是分区的NT设备名。</span></p>
                                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                    <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">OsFilePath:&nbsp;\Device\HarddiskVolume3<br>\WINDOWS</span></p>
                                                    </td>
                                                </tr>
                                            </tbody>
                                        </table>
                                        </div>
                                        <p>&nbsp;
                                        <p>另外，还有一个很重要的而Bootcfg没有显示的EFI引导入口元素，即<em>EFI引导入口ID</em>。EFI引导入口ID是EFI引导入口的唯一标识。这个标识在引导入口被创建时指派，并且不会再改变。它在几个列表中用于描述引导入口，包括<em>BootOrder</em>数组，并且它是系统在磁盘中用于存储引导入口包括引导入口备份在内的相关数据的目录名。EFI引导入口ID具有Bootxxxx这样的形式，xxxx是一个反映引导入口被创建次序的十六进制数字。
                                        <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;Bootcfg中的<strong>引导入口ID</strong>和Nvrboot中的引导入口号并<em>不是</em>EFI引导入口ID。Bootcfg和Nvrboot中的ID是用于反映在<strong>Boot Entries</strong>节中顺序的线性数字，并且如果重新排序入口的话，会被改变。 </span>
                                        <p>要获取更多有关基于Itanium系统引导选项的信息，可以查看EFI规范。可以从<a href="http://go.microsoft.com/fwlink/?linkid=10596">Intel Extensible Firmware Interface</a> 站点上下载到该规范的最新版本。
                                        <h1>编辑EFI引导选项 </h1>
                                        <p>编辑使用Windows Server 2003或更早基于NT内核Windows并使用EFI NVRAM的系统的引导选项，可以使用Bootcfg(bootcfg.exe)——运行于Windows的工具；或者Nvrboot(nvrboot.efi)——运行于EFI环境下的工具。两个工具都包含在Windows XP 64位版本和之后的64位版本Windows中(Both tools are included in the Windows&nbsp;XP 64-Bit Edition and the 64-bit version。原文有错？根据后面的文档补全了)。
                                        <p>可以在系统的控制面板中修改某些引导选项。在系统信息对话框中的高级选项卡，点击<strong>启动和故障恢复</strong>里面的设置。由于这个功能有所限制，所以本节不会讨论。可以在帮助和支持中心查看关于<strong>启动和故障恢复</strong>对话框的更多信息。
                                        <h4>Bootcfg </h4>
                                        <p>Bootcfg是用于在本地或远程电脑上编辑引导选项的命令行工具。使用Bootcfg命令和程序，可以编辑<em>Boot.ini</em>文件或EFI NVRAM中的配置、非挥发性随机访问存储器(EFI NVRAM)。、Windows XP和Windows Server 2003的%Systemroot%\System32目录下包含Bootcfg。(Bootcfg的显示在以EFI NVRAM保存引导选项的机器中有少许不同，但是命令是一样的。)
                                        <p>可以使用Bootcfg添加、删除和修改所有引导入口及引导选项；但是不能使用它指定模糊的引导超时时间。也可以在替换或升级操作系统时，用脚本或批处理文件来设置或重置引导选项。
                                        <p>在使用EFI NVRAM存储引导选项的系统上，Bootcfg也可以显示引导分区表、为镜像驱动器添加 引导入口或者更新系统分区的GUID。
                                        <p>要使用Bootcfg，必须是Administrators 组的成员。可以在帮助和支持中心查看更多有关Bootcfg的指令信息。
                                        <h4>Nvrboot </h4>
                                        <p>Nvrboot (nvrboot.efi) 是一个基于EFI的引导入口编辑器，Windows XP 64位版本和之后的64位版本Windows都包含它。Nvrboot在EFI环境中运行，不能在操作系统运行的时候运行Nvrboot。
                                        <p>Nvrboot 只能编辑引导入口。不能用它显示或改变引导菜单超时时间，也不能使用<em>push</em>命令(<strong>nvrboot p</strong>)修改默认的引导入口。
                                        <p>Nvrboot 也包含用于备份和恢复NVRAM中引导入口的命令。这个步骤在<a>备份EFI中的引导选项</a>节中讨论。
                                        <p>Nvrboot 采用用户友好的格式显示引导选项。例如，他以分区GUID后接Windows目录路径的方式显示操作系统和boot loader文件的路径。
                                        <p>下面的步骤解释了如何从EFI shell中启动Nvrboot。EFI shell是多数基于Itanium系统提供的工具。由于EFI shell工具有众多制造商，所以本节的这些内容可能不能精确的描述某些特定机器。
                                        <p><strong>运行 Nvrboot</strong>
                                        <ol>
                                            <li>重起计算机。
                                            <li>在引导菜单选择<strong>EFI Shell</strong>。
                                            <li>在shell提示符，键入驱动器名或系统分区的文件系统号码，如C:或<strong>FS</strong><em>n</em>，<em>n</em>是系统分区的文件系统号。
                                            <li>键入<strong>cd msutil</strong> 定位到nvrboot.efi所在的Msutil目录。
                                            <li>键入<strong>nvrboot</strong> 启动Nvrboot。 </li>
                                        </ol>
                                        <p>查找Nvrboot的说明，可以键入<strong>h</strong>。
                                        <h1>备份EFI中的引导选项 </h1>
                                        <p>安装64位Windows的时候，安装程序会自动为安装创建一个引导入口，并为它创建一个备份保存到名为Bootxxxx的二进制文件中，Bootxxxx是这个引导入口的NVRAM ID。安装程序将备份文件和新安装系统的boot loader保存在EFI分区的一个新目录下。默认的，安装目录在\EFI\Microsoft\ subdirectory 中。
                                        <p>但是，系统并不为你创建的引导入口保存备份，也不将编辑过的引导入口保留到备份中。
                                        <p>要保存创建和编辑过的引导入口的备份，或者为安装程序创建的入口保留而外备份，需要使用Nvrboot(nvrboot.efi)。Nvrboot以安装程序和EFI组件使用的二进制格式保存这些入口。如果安装的引导入口丢失或者出错之后，就可以使用Nvrboot的导入命令(<strong>nvrboot i</strong>)将备份导入到NVRAM中。
                                        <p>本节包含：
                                        <p><a>导出和导入EFI中的引导入口</a>
                                        <p><a>为现有的引导入口找出备份文件</a>
                                        <p><a>找出已经删除的引导入口的备份文件</a>
                                        <p><a>识别无用的引导入口备份文件</a>
                                        <h1>导出和导入EFI中的引导入口 </h1>
                                        <p>使用<strong>nvrboot x</strong>(export)命令创建引导入口的备份拷贝。最好设计一个命名和存储的规范，使得当需要这些备份文件时能容易的找到。
                                        <p>使用<strong>nvrboot i</strong>(import)命令从自己导出的或安装程序生成的名为Bootxxxx的备份文件中导入引导入口。
                                        <p>导入的引导入口总会被分配一个新的EFI引导入口ID。例如，导出了一个名为Boot0003的拷贝，然后将它导入NVRAM，新的被导入的入口将获得新的引导入口ID，比如Boot000A。
                                        <h1>为现有的引导入口找到备份文件 </h1>
                                        <p>要使用文件名搜索一个引导入口的备份拷贝，需要使用入口的EFI引导入口ID。但是Bootcfg和Nvrboot都不显示这个ID。
                                        <p>但是，可以通过在EFI分区中搜索在安装的目录中名为Bootxxxx的文件查找引导入口的备份。要找到安装目录，只需要定位操作系统安装的boot loader文件路径。该安装的引导入口备份文件就保存在同一目录下。
                                        <p>使用<strong>nvrboot d</strong>(display)命令或<strong>bootcfg</strong>或<strong>bootcfg query</strong>命令查看系统保存boot loader的目录路径。
                                        <p>在下面的例子中，引导入口的boot loader存储在EFI分区名为\Microsoft\WINNT50的子目录中。该安装的引导入口备份文件名为Bootxxxx也在相同子目录下。
                                        <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;Bootcfg中的<strong>引导入口ID</strong>和Nvrboot中的引导入口号并<em>不是</em>EFI引导入口ID。Bootcfg和Nvrboot中的ID是用于反映在<strong>Boot Entries</strong>节中顺序的线性数字，并且如果重新排序入口的话，会被改变。 </span>
                                        <p>如下Bootcfg示例显示的，boot loader文件路径出现在BootFilePath项中。
                                        <p>Bootcfg以NT设备名的方式显示文件位置中的分区名，后面紧跟boot loader文件的文件系统路径。
                                        <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;Entries<br>------------<br>Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;1<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Windows&nbsp;Server&nbsp;2003,&nbsp;Enterprise<br>OsLoadOptions:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=115200<br><strong>BootFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume1\EFI\Microsoft\WINNT50\ia64ldr.efi</strong><br>OsFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\Device\HarddiskVolume3\WINDOWS<br><br></span>
                                        <p>下面Nvrboot显示的示例，操作系统安装的boot loader文件路径显示在<strong>EFIOSLoaderFilePath</strong> 项中。<span style="FONT-FAMILY: 宋体"> </span>
                                        <p>Nvrboot 以分区GUID后跟boot loader路径的方式显示文件位置。
                                        <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">1.&nbsp;Load&nbsp;identifier&nbsp;=&nbsp;Windows&nbsp;Server&nbsp;2003,&nbsp;Enterprise<br>2.&nbsp;OsLoadOptions&nbsp;=&nbsp;/debug&nbsp;/debugport=COM1&nbsp;/baudrate=115209<br><strong>3.&nbsp;EFIOSLoaderFilePath&nbsp;=&nbsp;006F0073-0066-0074-5C00-570049004E00&nbsp;&nbsp;::&nbsp;&nbsp;\EFI\Microsoft\WINNT50\ia64ldr.efi</strong><br>4.&nbsp;OSLoaderFilePath&nbsp;=&nbsp;04000004-5D18-3F27-0000-0000205C273F&nbsp;&nbsp;::&nbsp;\Windows<br><br></span>
                                        <p>在上面两例中，boot loader文件(和名为Bootxxxx的引导入口备份文件)都在EFI系统分区的WINNT50目录下(EFI\Microsoft\WINNT50)。<span style="FONT-FAMILY: 宋体"> </span>
                                        <h1>找出已删除引导入口的备份文件 </h1>
                                        <p>代表性的，当引导入口被误删之后，需要找到引导入口的备份文件。
                                        <p>如果NVRAM中的引导入口被删除，并且操作系统安装仍然保留，那么这个安装的boot loader和引导入口备份文件仍然保留在EFI分区中该安装的目录下。
                                        <p>要找到被删除入口的引导入口备份文件，需要引导到EFI shell，并使用<strong>dir&nbsp;boot*&nbsp;/s</strong>命令递归的在EFI分区目录中查找备份文件。在结果中排除掉NVRAM中已有引导入口的备份文件。显示存在的引导入口的目录，使用<strong>nvrboot&nbsp;d</strong> (display)命令。
                                        <p>如果存在多个没有关联到已存在的引导入口的Bootxxxx文件，那么可以使用Nvrboot将这些备份文件都导入，然后删除不需要的入口。
                                        <h1>识别无用的引导入口文件 </h1>
                                        <p>不幸的是，引导入口的备份拷贝并不总是有用的。
                                        <p>在EFI环境中，应用程序和驱动通过分区GUID来标识磁盘分区。如果分区GUID由于某些原因改变了，那么引导入口备份中的分区GUID就不再有效，EFI boot loader也不能再用它引导系统。
                                        <p>下面的Bootcfg示例显示了拥有无效分区GUID的引导入口。
                                        <p><span style="COLOR: #660000; FONT-FAMILY: Courier New">Boot&nbsp;entry&nbsp;ID:&nbsp;&nbsp;&nbsp;&nbsp;4<br>OS&nbsp;Friendly&nbsp;Name:&nbsp;Windows&nbsp;Server&nbsp;2003&nbsp;-&nbsp;mydebug<br>OsLoadOptions:&nbsp;&nbsp;&nbsp;&nbsp;/debug&nbsp;/debugport=com1&nbsp;/baudrate=115200<br>BootFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(null)<br>OsFilePath:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(null)<br><br></span>
                                        <p>这种情况下，必须通过复制操作系统安装中的引导入口来创建新的入口，并修改掉参数。 <span style="FONT-FAMILY: 宋体"></span>
                                        <h1>Windows Vista的引导参数 </h1>
                                        <p>Windows Vista引入了新的boot loader架构；新的称为引导配置数据(<em>Boot Configuration Data</em> (BCD))的固件无关的引导配置和存储系统；以及新的引导参数编辑工具BCDEdit(<em>bcdedit.exe</em>)。
                                        <h4>Windows Vista的引导加载架构 </h4>
                                        <p>Windows Vista包含一个新的boot loader组件，使得Windows加载更加快速和安全。传统的Windows NT boot loader——<em>ntldr</em>被三个组件替代：
                                        <ul>
                                            <li>Windows 引导管理器 (<em>Bootmgr.exe</em>)
                                            <li>Windows 操作系统加载器(<em>Winload.exe</em>)
                                            <li>Windows 恢复加载器 (<em>Winresume.exe</em>) </li>
                                        </ul>
                                        <p>在这种架构下，Windows 引导管理器是通用的并且不关心每个操作系统的具体要求，而和特定系统相关的boot loader则专门为被它们加载的系统进行优化。
                                        <p>当计算机具有多个引导入口，并至少有一个Windows Vista入口时，根目录下的Windows引导管理器启动系统并和用户交互。它显示出引导菜单，加载被选中的系统相关的boot loader，并将引导参数传递给boot loader。
                                        <p>Boot loader在每个Windows分区的根目录下都存在。当选定之后，boot loader接管引导过程并加载和引导参数一致的操作系统。
                                        <h4>引导配置数据 </h4>
                                        <p>在Windows Vista和之后版本Windows中，引导选项在基于BIOS和EFI的机器上都存储在引导配置数据(BCD)中。
                                        <p>BCD代替了基于BIOS的系统中传统的<em>boot.ini</em>文件。将引导参数存放在文本文件中的方式太过简单，所以在正常使用情况下也极易遭受恶意攻击。在将引导选项存放在NVRAM的基于EFI的机器中，也可以和基于BIOS的机器一样使用BCD方法编辑引导选项，从而避免直接使用Windows API或者特定工具直接访问NVRAM。
                                        <p>BCD为所有运行Windows Vista的计算机提供了统一的、固件无关的引导配置接口。它比以往的引导选项存储方式都要安全，因为它允许BCD存储具有保密安全装置，并且可以让管理员为引导选项管理指派权限。BCD在系统运行时和安装时的所有阶段都会起效。甚至可以在电源状态转换时调用BCD并且用它来定义系统从休眠之后唤醒时的引导过程。
                                        <p>你可以远程管理BCD，或者从不同于BCD存储媒介的其他媒介上启动系统，然后再管理它。这种特性对于调试和排错是极为重要的，特别是当BCD存储需要在运行CD、基于USB的存储媒介或者远程的启动修复来重建的时候。
                                        <p>最重要的，BCD容易使用。BCD存储和它的对象-元素(object-and-element)架构，是容易使用的。它使用GUID来精确区分引导相关的程序。
                                        <p>BCD新的数据格式使用了新的引导选项集合。大多数老版本Windows中使用的引导选项，例如<strong>/debug</strong>， <strong>/maxmem</strong>，和 <strong>/pae</strong>都保留下来；但是在某些情况下，他们的名字可能被修改得更符合他们的作用。关于这些引导选项的更多信息，查看<a>BCD引导选项参考</a>。
                                        <h4>多重引导过程 </h4>
                                        <p>如果多个系统被安装到计算机中，并且他们中有一个是Windows Vista或之后版本Windows， Windows引导管理器和早前版本Windows的引导模块一起处理用户交互及对选择的系统的启动。
                                        <p>当一个多重启动计算机被启动，会经历下面一些过程：
                                        <ul>
                                            <li>Windows启动管理器显示一个引导入口菜单，包含Windows Vista和更新版本Windows的选项，以及一个<strong>较早版本(Legacy)</strong>选项。
                                            <li>如果选择的是Windows Vista 或更新的Windows，则Windows启动管理器加载这些系统特定的boot loader并把引导入口中它的参数传递给它。特定系统的boot loader使用这些引导参数加载操作系统。
                                            <li>
                                            <div>如果选择<strong>较早版本(Legacy)</strong>,Windows引导管理器启动Vista以前的基于NT内核版本Windows的引导管理器—Ntldr。从这点开始，引导进程就和Windows Vista之前的系统一样了。 </div>
                                            <p>如果机器中安装了数个Vista之前的Windows， Ntldr会显示由Windows Server 2003，Windows XP，Windows2000和Windows NT系统的入口组成。这个引导菜单在基于BIOS的系统上由<em>boot.ini</em>生成，在基于EFI的系统上根据EFI-NVRAM生成。选择了引导入口之后，Ntldr会使用相应的引导参数加载系统。 </p>
                                            </li>
                                        </ul>
                                        <h4>编辑Windows Vista的引导选项 </h4>
                                        <p>编辑Windows Vista及之后版本Windows的引导选项，可以使用BCDEdit(<em>BCDEdit.exe)</em>，一个包含在Vista中的工具。在Vista及之后的Windows中不能再使用Bootcfg或Nvrboot编辑引导选项了，尽管可以继续用他们编辑系统中其他早期Windows系统的选项。
                                        <p>要使用BCDEdit，必须是Administrators 组中的一员。BCDEdit 在Windows帮助和支持中有文档描述。
                                        <p>要编程修改Windows Vista及之后版本Windows的引导选项，可以使用Windows管理工具(WMI)针对引导选项的接口。BCD WMI接口是编程修改引导选项的最好方法。获取更多关于BCD WMI 接口的信息，查看Windows SDK文档中的<a href="http://go.microsoft.com/fwlink/?LinkID=74322">Boot Configuration Data</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----6&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/43290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-03-25 17:21 <a href="http://www.cnitblog.com/cc682/articles/43290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----5</title><link>http://www.cnitblog.com/cc682/articles/43291.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Mon, 24 Mar 2008 06:26:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43291.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43291.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43291.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43291.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43291.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>&nbsp;
<h1>内核调试的硬件配置 </h1>
<p>本节包含以下主题：
<p><a>目标机和主控机</a>
<p><a>设置Null-Modem电缆连接</a>
<p><a>设置1394电缆连接</a>
<p><a>设置USB2.0调试电缆连接</a>
<p><a>测试连接</a>
<h1>目标机和主控机 </h1>
<p>内核模式调试需要一台<a><em>目标机</em></a> 和一台主控机。目标机用于运行内核模式程序，主控机用于运行调试器。
<p>下图显示了用于进行内核调试和系统故障诊断的典型配置。
<p><a href="http://byfiles.storage.live.com/y1pNdwJB91T_s9HAH4MG2yeNzWHMPYari1fnNJQvkX3OcAadXdf6lDvdmqKz126Xhs3Wj3Rn7oEsas"><img height=191 alt=Untitled src="http://byfiles.storage.live.com/y1pNdwJB91T_s9HAH4MG2yeNzWHMPYari1fnNJQvkX3OcAadXdf6lDvdmqKz126Xhs3Wj3Rn7oEsas" width=376></a>
<p>
<p><strong>典型的Windows调试配置</strong>
<p>上图显示了典型的配置。但是，当前版本的KD和WinDbg(和本文档一同安装的)是很灵活的。KD和WinDbg可以做以下一些事情。
<ul>
    <li>调试运行Windows NT 4.0、Windows 2000或更迟版本Windows的目标机。
    <li>调试运行于基于x86、Itanium、x64的目标机。
    <li>可以在运行Windows NT 4.0、Windows 2000或更迟版本Windows的主控上启动。
    <li>可以在基于x86、Itanium、x64的主控机上启动。 </li>
</ul>
<p>目标机和主控机不需要运行在相同的平台和相同版本Windows上。
<p>内核调试没有规定使用发布版或者调试版的固体组合。可以在发布版系统上调试发布版或者调试版系统，也可以从发布版或者调试版系统上调试发布版的系统。然而，一般在主控机上没有理由使用速度较慢的调试版系统。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;如果在Itanium平台的主控机上运行调试器，要确认使用正确版本的可执行文件。关于选择使用哪个版本的调试器包，查看<a>选择32位或64位调试器包</a>。 </span>
<h1>设置Null-Modem电缆连接 </h1>
<p>当主控机和目标机在同一个地方，或者在目标机和远程的主控机之间必须放置一台带有远程访问服务器功能(RAS)的主机时，必须使用调试(null-modem)电缆、<a>IEEE 1394 ("火线") </a>电缆，或者 <a>USB 2.0 </a>调试电缆来连接两台机器。
<p><em>Null-modem 电缆</em> 是配置来用于两个串口之间传输数据的串行电缆。它们在大多电脑商店都能够买到(不要听文档的话，事实是，在国内我从来没在电脑城买到过能用的null-modem线，使用的全部是自己焊的)。注意不要被标准的串口电缆混淆了，标准串行电缆并不是用来连接两个串口的。
<p>如果是通过电话线访问目标机的modem，或者在同一台机器上调试出错的用户模式进程，又或者分析dump文件，则不需要使用null-modem电缆。
<h4>COM端口 </h4>
<p>目标机上默认用于调试输出的是排位最高的端口(一般是COM2)。可以通过设置<strong>debugport</strong> 启动选项来修改默认端口。要获取更多关于改变端口的信息，查看<a>目标机的软件配置</a>。
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;目标机的配置方式在Windows Vista中有所更改。获取更多信息，查看<a>启用调试的启动参数</a>。 </span>
<p>主控机上用于接收调试信息的默认端口是COM1，可以通过设置_NT_DEBUG_PORT 环境变量来修改。查看更多关于修改环境变量的信息，查看<a>主控机的软件配置</a>。
<h4>Null-Modem 电缆的构造 </h4>
<p>如果没有null-modem电缆，或者你更愿意自己定制你的硬件配线，参考下面的信息。
<p>一根标准的，商业上可用的null-modem电缆具有如下配置：
<ul>
    <li>信号输出连接信号输入
    <li>信号输入连接信号输出
    <li>地线连接地线 </li>
</ul>
<p>对于9针和25针D-微型连接器(分别俗称<em>db9</em>和<em>db25</em>)，硬件协议规定电缆必须如下连接：
<ul>
    <li>信号输入(RXD) 连接 信号输出 (TXD)
    <li>TXD to RXD
    <li>地线 (GND) 连接 GND. </li>
</ul>
<p>另外，每一边的电缆都需要将数据准备就绪(DTR)连接数据输入准备(DSR)，发送请求(RTS)连接清除发送(CTS)。
<p>以下一些针脚需要连在一起
<div>
<table style="BORDER-COLLAPSE: collapse" border=0>
    <colgroup>
    <col style="WIDTH: 295px">
    <col style="WIDTH: 295px">
    <tbody vAlign=top>
        <tr>
            <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>9-针连接器</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 style="TEXT-ALIGN: center"><strong>25-针连接器</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>2 (RXD) </p>
                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                <p>2 (TXD) </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>3 (TXD) </p>
                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                    <p>3 (RXD) </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>4 (DTR) </p>
                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                        <p>6 (DSR) </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>5 (GND) </p>
                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                            <p>7 (GND) </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>6 (DSR) </p>
                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                <p>20 (DTR) </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>7 (RTS) </p>
                                    <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                    <p>5 (CTS) </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>8 (CTS) </p>
                                        <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                        <p>4 (RTS)</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>
                            </div>
                            <p>&nbsp;
                            <p>主控机上的调试器并不依赖任何控制脚(例如DTR, DSR, RTS,，或者 CTS)。但是，可能需要在电缆两端连接器设置两跳线，从DTR到DSR，以及从RTS到CTS。如下：
                            <div>
                            <table style="BORDER-COLLAPSE: collapse" border=0>
                                <colgroup>
                                <col style="WIDTH: 295px">
                                <col style="WIDTH: 295px">
                                <tbody vAlign=top>
                                    <tr>
                                        <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 style="TEXT-ALIGN: center"><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 style="TEXT-ALIGN: center"><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">
                                            <p>db9 </p>
                                            <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                            <p>从4针(DTR)到6针(DST)
                                            <p>从7针(RTS)到8针(CTS) </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>db25 </p>
                                                <td style="BORDER-RIGHT: black 0.5pt solid; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: black 0.5pt solid">
                                                <p>从20针(DTR)到6针(DSR)
                                                <p>从5针(RTS)到4针(CTS)</p>
                                                </td>
                                            </tr>
                                        </tbody>
                                    </table>
                                    </div>
                                    <p>&nbsp;
                                    <p>用null-modem将主控机和目标机连接在一起。
                                    <h4>软件设置 </h4>
                                    <p>更多关于在目标机上配置启动选项的信息，查看<a>启用调试的启动参数</a>。更多关于如何启动调试任务的信息，查看 <a>附加到目标机(内核模式)</a>。
                                    <h1>设置1394电缆连接 </h1>
                                    <p>当主控机和目标机在同一个地方，或者在目标机和远程的主控机之间必须放置一台带有远程访问服务器功能(RAS)的主机时，必须使用调试(null-modem)电缆、<a>IEEE 1394 ("火线") </a>电缆，或者 <a>USB 2.0 </a>调试电缆来连接两台机器。
                                    <p>通过1394电缆进行的内核调试并不是在所有系统上都被支持。目标机和主控机必须运行Microsoft Windows XP或者更迟版本的Windows。 (目标机和主控机不需要运行相同版本Windows。)
                                    <p>目标机和主控机都必须具有1394控制器。将1394电缆分别连接到两台机器的任意端口上。端口的选择并不重要，而且不会影响软件配置中使用的频道号。
                                    <h4>软件配置 </h4>
                                    <p>更多关于在目标机上配置启动选项的信息，查看<a>启用调试的启动参数</a>。更多关于如何启动调试任务的信息，查看 <a>附加到目标机(内核模式)</a>。
                                    <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;在使用1394电缆进行内核调试之前，必须对两台机器进行更多软件配置。关于这些配置的详细信息，查看<a>禁用1394控制器</a>和<a>安装1394虚拟驱动程序</a>。 </span>
                                    <h1>设置USB 2.0 调试电缆连接 </h1>
                                    <p>当主控机和目标机在同一个地方，或者在目标机和远程的主控机之间必须放置一台带有远程访问服务器功能(RAS)的主机时，必须使用调试(null-modem)电缆、<a>IEEE 1394 ("火线") </a>电缆，或者 <a>USB 2.0 </a>调试电缆来连接两台机器。
                                    <p>通过USB 2.0调试电缆进行的内核调试并不是在所有系统上都被支持。目标机必须运行Windows Vista或更迟版本的Windows，主控机必须运行Windows 2000或者更迟版本。
                                    <p>进行这种调试，必须使用如下硬件：
                                    <ul>
                                        <li>一根<a href="http://go.microsoft.com/fwlink/?linkid=85605">USB 2.0 调试电缆</a>。这种电缆并不是标准的USB 2.0 电缆，因为他有一些另外的硬件部件用于兼容<a href="http://go.microsoft.com/fwlink/?linkid=85606">USB2调试设备功能规范</a>。
                                        <li>主控机上必须具有兼容EHCI规范的USB 2.0控制器。
                                        <li>目标机上必须具有支持内核调试的USB 2.0控制器。 </li>
                                    </ul>
                                    <h4>软件设置 </h4>
                                    <p>更多关于在目标机上配置启动选项的信息，查看<a>启用调试的启动参数</a>。更多关于如何启动调试任务的信息，查看 <a>附加到目标机(内核模式)</a>。
                                    <p>必须为USB 2.0内核调试安装附加的软件支持才能正常工作。获取关于这些组件的信息，联系<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#98;&#100;&#98;&#103;&#64;&#109;&#105;&#99;&#114;&#111;&#115;&#111;&#102;&#116;&#46;&#99;&#111;&#109;">usbdbg@microsoft.com</a>。
                                    <h1>测试连接 </h1>
                                    <p>启动调试器之前，必须先确认null-modem连接正常。可以使用超级终端(Hyperterminal)程序来验证连接。
                                    <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;在Windows Server 2003和之后版本的Windows ，超级终端并不是默认安装的组件。可以从Windows光盘上安装它。 </span>
                                    <p>要测试null-modem连接，按如下步骤操作：
                                    <ol>
                                        <li>
                                        <div>在主控机上，点击<strong>开始(Start)</strong>，指向<strong>所有程序(All Programs)</strong>，指向<strong>附件(Accessories)</strong>，指向<strong>通讯(Communications)</strong>，点击<strong>超级终端(HyperTerminal)</strong>。 </div>
                                        <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意&nbsp;&nbsp;</strong>如果超级终端没有安装，可以通过控制面板中的<strong>添加/删除程序</strong>从Windows安装光盘中安装。 </span></p>
                                        <li>在<strong>连接描述(Connection Description)</strong>对话框，输入新连接的名字。(名字不重要。)
                                        <li>在<strong>连接到(Connect To)</strong>对话框，<strong>连接时使用(Connect using)</strong>列表，选择当前null-modem电缆在这台机器上连接的COM端口。
                                        <li>在下一个窗口，使用默认的COM端口选项。
                                        <li>在目标机上重复上面1到4的步骤。
                                        <li></li>
                                    </ol>
                                    <p>超级终端已经准备好测试了。在主控机上按一些键。如果null-modem电缆安装正确，并且在超级终端中选择的端口号正确，刚才在主控机上按下的字符会在目标机的超级终端窗口中显示出来。
                                    <p>如果没有在目标机中显示，确认是否已经将电缆插入两台机器。确认电缆是null-modem电缆，而非透传串行电缆。
                                    <p>如果电缆正确，可能是COM端口的问题。在目标机的超级终端中创建一个新的连接并选择不同的COM端口。如果问题还未解决，尝试改变主控机上的COM端口。如果问题还存在，则将目标机选择的COM端口改回最早设置的并重置。最终应该会找到正确的配置并测试成功。
                                    <p>如果忘记了哪台机器用哪个端口，在超级终端的<strong>文件(File)</strong>菜单，点击<strong>属性(Properties) </strong>来查看调试任务所应该使用的正确端口配置。 <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----5&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/43291.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-03-24 14:26 <a href="http://www.cnitblog.com/cc682/articles/43291.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WinDbg 文档翻译----4</title><link>http://www.cnitblog.com/cc682/articles/43292.html</link><dc:creator>NetRoc</dc:creator><author>NetRoc</author><pubDate>Mon, 24 Mar 2008 02:52:00 GMT</pubDate><guid>http://www.cnitblog.com/cc682/articles/43292.html</guid><wfw:comment>http://www.cnitblog.com/cc682/comments/43292.html</wfw:comment><comments>http://www.cnitblog.com/cc682/articles/43292.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/cc682/comments/commentRss/43292.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/cc682/services/trackbacks/43292.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">cc682/NetRoc </span>
<p><span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体">http://netroc682.spaces.live.com/<strong> </strong></span>
<p><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体"><strong>安装和设置 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">本节包含下面一些主题： </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="COLOR: blue; TEXT-DECORATION: underline">调试器安装</span> </span>
<p><a><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; TEXT-DECORATION: underline">内核模式的设置</span></a><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"> </span>
<p><a><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; TEXT-DECORATION: underline">用户模式的设置</span></a><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"> </span>
<p><a><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; TEXT-DECORATION: underline">Windows&nbsp;95, 98, 和 Millennium</span></a><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"> </span>
<p><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体"><strong>调试器安装 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Microsoft调试工具包有三种版本：一个32位软件包和一个64位软件包。你可以从客户支持诊断CD、Microsoft Windows SDK、Windows DriverKit(WDK)或者网页上安装。可以通过各种方式自定义安装。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">本节包含下面的主题： </span>
<p><a><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; TEXT-DECORATION: underline">选择32位或64位调试器包</span></a><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"> </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><span style="COLOR: blue; TEXT-DECORATION: underline">从客户支持诊断CD上安装</span> </span>
<p><a><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; TEXT-DECORATION: underline">从Windows SDK上安装</span></a><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"> </span>
<p><a><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; TEXT-DECORATION: underline">通过Windows DriverKit安装</span></a><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"> </span>
<p><a><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; TEXT-DECORATION: underline">从网页上安装</span></a><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"> </span>
<p><a><span style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 宋体; TEXT-DECORATION: underline">使用自定义安装</span></a><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"> </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">获取更多有关在Windows 95、Windows 98或Windows Millennium Edition上安装调试器的资料，查看<a><span style="COLOR: blue; TEXT-DECORATION: underline">Windows&nbsp;95, 98, 和 Millennium</span></a>。 </span>
<p><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体"><strong>选择32位或64位调试器包 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Windows调试工具包有三个不同版本：32位版本、原生Intel Itanium版本、原生x64版本。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">为了决定使用哪一个版本，需要知道<a><span style="COLOR: blue; TEXT-DECORATION: underline">主控机</span></a>运行在什么处理器上。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>基于x86的主控机 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果主控机使用基于x86的处理器，应该使用32位版本。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>Itanium主控机 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果主控机是基于Itanium的，则适用以下规则： </span>
<ul>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果用于分析dump文件，并且dump文件是由Windows XP及之后的Windows版本生成的，可以使用32位版本或Itanium版本。（不管dump文件是用户模式dump还是内核模式dump，或者是基于x86还是基于Itanium的。） </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果用于分析dump文件，并且dump文件是在Windows NT或者Windows 2000上生成的，则需要使用32位版本。（用户模式或内核模式dump文件都可。） </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果进行动态的内核模式调试，并且目标机运行Windows XP或之后的Windows版本，可以使用32位版本或Itanium版本。(目标机基于x86或者Itanium都适用这种情况。) </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">进行动态内核模式调试，目标机运行于Windows NT或Windows 2000。需要使用32位版本。 </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对于用户模式的动态调试，无论目标是64位应用程序还是32位应用程序，总是应该使用Itanium版本。Itanium版本包含的调试器可以调试任何应用程序和<a><span style="COLOR: blue; TEXT-DECORATION: underline">WOW64</span></a>模拟器。 </span></li>
</ul>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>基于x64的主控机 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">如果主控机使用基于x64的处理器，则适用以下规则： </span>
<ul>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">分析Windows XP及之后版本的Windows生成的dump文件，可以使用32位或x64版本。（无论dump文件是用户模式还是内核模式dump，以及是基于x86或者基于x64架构的dump文件。） </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">用于分析Windows NT或Windows 2000系统生成的dump文件，需要使用32位版本。 (不管是内核模式还是用户模式dump文件。) </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对Windows XP及之后的Windows版本进行动态内核调试，可以使用32位或x64版本。(目标机基于x86或者Itanium都适用这种情况。) </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">进行动态内核模式调试，目标机运行于Windows NT或Windows 2000。需要使用32位版本。 </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">对于用户模式的动态调试，使用x64版本调试64位或32位代码的WOW64（WOW64 with both 64-bit and 32-bit code这里没能理解清楚，WOW64可以with 64-bit code？？）。 </span></li>
</ul>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>Alpha主控机或目标机 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Windows调试工具包不能运行于Alpha(RISC)处理器或者调试Alpha处理器。如果必须要调试基于Alpha并运行Windows NT4.0的机器，应该使用Windows调试工具包2.0.16.0或之前的版本。2.0.16.0版本于2001年1月发布。 </span>
<p><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体"><strong>从用户支持诊断CD上安装 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">从用户支持诊断CD(Customer Support Diagnostics CD)上安装Windows调试工具包，需要将这个CD插入CD驱动器。会自动弹出窗口用于选择安装什么，包括调试器、调试版符号文件、发布版符号文件。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">跟随里面的链接来安装需要的调试器和调试工具。 </span>
<p><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体"><strong>通过Windows SDK安装 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Windows调试工具包是Microsoft Windows SDK的一部分。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">通过Windows SDK来安装，需要使用<strong>Custom Install</strong> 选项，并选中 <strong>Debugging Tools for Windows</strong> 安装项。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">当Windows SDK安装完成，点击<strong>开始(Start)</strong>指向<strong>所有程序(All Programs)</strong>,<strong> </strong>再指向<strong>Microsoft Windows SDK</strong>, 并且点击<strong> Install Debugging Tools for Windows</strong>。然后就会运行Windows调试工具包的安装程序。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">完成安装之后，可以通过点击<strong>开始(Start)</strong>指向<strong>所有程序(All Programs)</strong>,<strong> </strong>再指向<strong>Debugging Tools for Windows</strong> 找到调试器的快捷方式。 </span>
<p><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体"><strong>通过Windows Driver Kit安装 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Windows调试工具包也是Microsoft Windows Driver Kit(WDK)以及它的早前版本Driver Development Kit(DDK)的一部分。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">通过WDK或DDK安装，需要插入WDK或DDK光盘，并在出现的屏幕中找到适当的链接。这个链接可以引导你将调试器安装在选定的位置。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">安装完成后，可以通过点击<strong>开始(Start)</strong>指向<strong>所有程序(All Programs)</strong>,<strong> </strong>再指向<strong>Debugging Tools for Windows</strong> 找到调试器的快捷方式。 </span>
<p><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体"><strong>从网页安装 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">要下载Windows 调试工具包的最新版本，可以访问<a href="http://go.microsoft.com/fwlink/?linkid=8708"><span style="COLOR: blue; TEXT-DECORATION: underline">Windows调试工具</span></a>页面，并根据上面的指示操作。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">Windows调试工具包升级比较频繁，可以通过网页来获得最新调试工具。 </span>
<p><span style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体"><strong>自定义安装 </strong></span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">安装Windows调试工具包时，可以选择<strong>Custom Install</strong> 来控制安装。 </span>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">可以选择如下一些安装选项： </span>
<ul>
    <li>
    <div><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">默认情况下<strong>Debuggers项是选中的。</strong>如果这样，安装会包括调试器(WinDbg、KD、CDB、NTSD)，帮助模块(如DbgHelp)，符号服务器(SymSrv)，源码服务器(SrcSrv)，dump文件工具(ADPlus)，远程工具(DbgSrv)和一些扩展库。 </span></div>
    <p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><strong>注意</strong>&nbsp;&nbsp;在Windows的<em>system32</em>目录下存在另外一个NTSD。本文档的描述是根据Windows调试工具包中的NTSD版本，所以可能和Windows自带的NTSD版本并不完全符合。 </span></p>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">默认的，<strong>Tools</strong>安装项和它的<strong>Helpful Tools</strong> 子项都是选中的。这样，安装将会包括SymStore、SymChk、DbgRpc、Logger、LogViewer、KDbgCtrl、DumpChk、<em>GFlags.exe，TList.exe</em>, <em>Kill.exe</em>, <em>List.exe</em>, <em>Breakin.exe</em>, UMDH 以及远程工具（<em>Remote.exe</em>, DbEngPrx, 和 KdSrv）。 </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">默认的， <strong>Documentation</strong> 安装项和子项 <strong>Debugging Tools</strong> 是选中的。这样，安装会包括Windows调试工具包文档(<em>Debugger.chm</em>)。这就是你当前正在阅读的文档。 </span>
    <li><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">默认情况下，<strong>SDK</strong>安装项和它的子项没有被选中。如果选中它们后安装，将会包含构建调试器扩展的头文件、库文件、调试器扩展示例和其他示例、Debug Help 库(<em>Dbghelp.chm</em>) 文档，以及源码服务器文档(<em>Srcsrv.doc</em>)。 </span></li>
</ul>
<p><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">获得更多关于安装包中所有工具及他们文档的信息，查看<a><span style="COLOR: blue; TEXT-DECORATION: underline">工具和文档列表</span></a>。 </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----4&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/43292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/cc682/" target="_blank">NetRoc</a> 2008-03-24 10:52 <a href="http://www.cnitblog.com/cc682/articles/43292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>