CDB 命令行选项

第一次使用 CDB 或 NTSD 的用户应该从使用 CDB 和 NTSD 进行调试一节开始。

CDB 命令行使用以下语法:

cdb  [ -server ServerTransport | -remote ClientTransport ] 
[ -premote SmartClientTransport ] [-log{a|au|o|ou} LogFile]
[-2] [-d] [-ddefer] [-g] [-G] [-hd] [-lines] [-myob] [-bonc] 
[-n] [-o] [-s] [-v] [-w] [-cf "filename"] [-cfr "filename"] [-c "command"] 
[-robp] [-r BreakErrorLevel]  [-t PrintErrorLevel] 
[ -x{e|d|n|i} Exception ] [-x] [-clines lines] 
[-i ImagePath]  [-y SymbolPath] [-srcpath SourcePath] 
[-aExtension] [-failinc] [-noio] [-noinh] [-noshell] [-nosqm]
[-sdce] [-ses] [-sicv] [-sins] [-snc] [-snul] [-zp PageFile] 
[-sup] [-sflags 0xNumber] [-ee {masm|c++}]
[-e Event] [-pb] [-pd] [-pe] [-pr] [-pt Seconds] [-pv] 
[ -- | -p PID | -pn Name | -psn ServiceName | -z DumpFile | executable ] 
[-cimp] [-isd] [-kqm] [-pvr] [-version] [-vf] [-vf:<opts>] [-netsyms:{yes|no}]

cdb -iae 

cdb -iaec KeyString 

cdb -iu KeyString

cdb -QR Server 

cdb -wake pid 

cdb -?

NTSD 命令行语法与 CDB 的语法相同:

ntsd  [ -server ServerTransport | -remote ClientTransport ] 
[ -premote SmartClientTransport ] [-log{a|au|o|ou} LogFile]
[-2] [-d] [-ddefer] [-g] [-G] [-hd] [-lines] [-myob] [-bonc] 
[-n] [-o] [-s] [-v] [-w] [-cf "filename"] [-cfr "filename"] [-c "command"] 
[-robp] [-r BreakErrorLevel]  [-t PrintErrorLevel] 
[ -x{e|d|n|i} Exception ] [-x] [-clines lines] 
[-i ImagePath]  [-y SymbolPath] [-srcpath SourcePath] 
[-aExtension] [-failinc] [-noio] [-noinh] [-noshell] [-nosqm]
[-sdce] [-ses] [-sicv] [-sins] [-snc] [-snul] [-zp PageFile] 
[-sup] [-sflags 0xNumber] [-ee {masm|c++}] 
[-e Event] [-pb] [-pd] [-pe] [-pr] [-pt Seconds] [-pv] 
[ -- | -p PID | -pn Name | -psn ServiceName | -z DumpFile | executable ] 
[-cimp] [-isd] [-kqm] [-pvr] [-version] [-vf] [-vf:<opts>] [-netsyms:{yes|no}]

ntsd -iae 

ntsd -iaec KeyString 

ntsd -iu KeyString

ntsd -QR Server 

ntsd -wake PID 

ntsd -?

NTSD 和 CDB 之间的唯一区别是,NTSD 生成一个新的控制台窗口,而 CDB 继承调用它的窗口。 由于 start 命令还可用于生成新的控制台窗口,因此以下两个构造将给出相同的结果:

start cdb [parameters]
ntsd [parameters]

以下是 CDB 和 NTSD 命令行选项的说明。 只有 -remote-server-g-G 选项区分大小写。 初始连字符可以替换为正斜杠 (/)。 不采用任何其他参数的选项可以连接,因此 cdb -o -d -G -g winmine 可以编写为 cdb -odGg winmine

如果使用 -remote-server 选项,则该选项必须出现在命令行上的任何其他选项之前。 如果指定了可执行文件,则它必须最后出现在命令行上;可执行文件名称之后的任何文本都将作为其自己的命令行参数传递给可执行程序。

参数

-serverServerTransport
创建可由其他调试器访问的调试服务器。 有关可能的 ServerTransport 值的说明,请参阅激活调试服务器。 使用此参数时,它必须是命令行上的第一个参数。

-remoteClientTransport
创建调试客户端,并连接到已在运行的调试服务器。 有关可能的 ClientTransport 值的说明,请参阅激活调试客户端。 使用此参数时,它必须是命令行上的第一个参数。

-premoteSmartClientTransport
创建智能客户端,并连接到已在运行的进程服务器。 有关可能的 SmartClientTransport 值的说明,请参阅激活智能客户端

-2
如果目标应用程序是控制台应用程序,则此选项会使其位于新的控制台窗口中。 (默认情况下,目标控制台应用程序与 CDB 或 NTSD 共享窗口。)

--
调试客户端服务器运行时子系统 (CSRSS)。 有关详细信息,请参阅调试 CSRSS

-aExtension
设置默认扩展 DLL。 默认值为 userexts。 “a”后面不能有空格,并且不得包含 .dll 扩展名。 有关详细信息以及设置此默认值的其他方法,请参阅加载调试器扩展 DLL

-bonc
如果指定了此选项,则调试器将在会话开始后立即进入目标。 当连接到当前可能未进入到目标的调试服务器时,这一点尤其有用。

-c "command"
指定要在启动时运行的初始调试器命令。 此命令必须用引号括起来。 多个命令可以用分号分隔。 (如果你有一个长命令列表,则将它们放在脚本中可能更容易,然后将 -c 选项与 $<、 $><、$><、$$><(运行脚本文件)命令一起使用。)

如果要启动调试客户端,此命令必须适用于调试服务器。 不允许使用特定于客户端的命令,如 .lsrcpath

-cf "filename"
指定脚本文件的路径和名称。 调试器一启动,就会立即执行此脚本文件。 如果 filename 包含空格,则必须用引号将其引起来。 如果省略路径,则假定为当前目录。 如果不使用 -cf 选项,则当前目录中的文件 ntsd.ini 将用作脚本文件。 如果文件不存在,则不会发生错误。 有关详细信息,请参阅使用脚本文件

-cfr "filename"
指定脚本文件的路径和名称。 调试器一启动,以及目标重新启动时,都会立即执行此脚本文件。 如果 filename 包含空格,则必须用引号将其引起来。 如果省略路径,则假定为当前目录。 如果文件不存在,则不会发生错误。 有关详细信息,请参阅使用脚本文件

-cimp
指示 CDB/NTSD 从 DbgSrv 隐式命令行开始,而不是从要运行的显式进程开始。 此选项是 dbgsrv -pc 的客户端。

-clineslines
设置在远程调试期间可以访问的命令历史记录中的大致命令数。 有关详细信息以及更改此数字的其他方法,请参阅使用调试器命令

-d
将此调试器的控制权传递给内核调试器。 如果正在调试 CSRSS,则此控件重定向始终处于活动状态,即使未指定 -d 也是如此。 (在远程调试期间不能使用此选项,请改用 -ddefer。)有关详细信息,请参阅从内核调试器控制用户模式调试器。 此选项不能与 -ddefer 选项或 -noio 选项结合使用。

注意 如果使用 WinDbg 作为内核调试器,那么在这种情况下,WinDbg 的许多熟悉功能都不可用。 例如,不能使用“局部变量”窗口、“反汇编”窗口或“调用堆栈”窗口,也不能单步执行源代码。 这是因为 WinDbg 仅充当目标计算机上运行的调试器(NTSD 或 CDB)的查看器。

-ddefer
将此调试器的控制权传递给内核调试器,除非调试客户端已连接。 (这是 -d 的变体,可从调试服务器使用。)有关详细信息,请参阅从内核调试器控制用户模式调试器。 此选项不能与 -d 选项或 -noio 选项结合使用。

-eEvent
向调试器发出指定事件已发生的信号。 此选项仅在以编程方式启动调试器时使用。

-ee {masm|c++}
设置默认表达式计算器。 如果指定 masm,将使用 MASM 表达式语法。 如果指定 c++,将使用 C++ 表达式语法。 如果省略 -ee 选项,则 MASM 表达式语法将用作默认值。 有关详细信息,请参阅计算表达式

-failinc
使调试器忽略任何可疑的符号。 在调试用户模式或内核模式的小型转储文件时,此选项还将阻止调试器加载任何映像无法映射的模块。 有关详细信息和其他控制方法,请参阅 SYMOPT_EXACT_SYMBOLS

-g
忽略目标应用程序中的初始断点。 此选项将导致目标应用程序在启动或 CDB 连接到它之后继续运行,除非设置了另一个断点。 有关详细信息,请参阅初始断点

-G
忽略进程终止时的最后一个断点。 默认情况下,CDB 在映像运行过程中停止。 此选项将导致 CDB 在子级终止时立即退出。 这与输入命令 sxd epr 的效果相同。 有关详细信息,请参阅控制异常和事件

-hd
指定不应使用调试堆。 有关详细信息,请参阅使用 CDB 调试用户模式进程

-iImagePath
指定生成错误的可执行文件的位置。 如果路径包含空格,则应将其括在引号中。

-iae
安装 CDB 作为事后调试器。 有关详细信息,请参阅启用事后调试

如果此操作成功,则不显示任何消息;如果失败,将显示一条错误消息。

-iae 参数不得用于任何其他参数。 此命令实际上不会启动 CDB。

-iaecKeyString
安装 CDB 作为事后调试器。 KeyString 的内容将追加到 AeDebug 注册表项的末尾。 如果 KeyString 包含空格,则必须用引号将其引起来。 有关详细信息,请参阅启用事后调试

如果此操作成功,则不显示任何消息;如果失败,将显示一条错误消息。

-iaec 参数不得用于任何其他参数。 此命令实际上不会启动 CDB。

-isd
为任何进程创建打开 CREATE_IGNORE_SYSTEM_DEFAULT 标志。

-iuKeyString
将调试器远程处理注册为 URL 类型,以便用户可以使用 URL 自动启动调试器远程客户端。 KeyString 格式为 remdbgeng://RemotingOptionRemotingOption 是一个字符串,用于定义激活调试客户端主题中定义的传输协议。 如果此操作成功,则不显示任何消息;如果失败,将显示一条错误消息。

-iu 参数不得用于任何其他参数。 此命令实际上不会启动 CDB。

-kqm
以静默模式启动 CDB/NTSD。

-lines
启用源行调试。 如果省略此选项,则必须使用 .lines(切换源行支持)命令,然后才能允许进行源调试。 有关控制此操作的其他方法,请参阅 SYMOPT_LOAD_LINES

-log{a|au|o|ou} LogFile
开始将信息记录到日志文件。 如果指定的文件已存在,如果使用 -logo,它将被覆盖;如果使用 -loga,输出将附加到文件中。 -logau-logou 选项分别运行类似于 -loga-logo,只是日志文件是 Unicode 文件。 有关详细信息,请参阅在 CDB 中保留日志文件

-myob
如果 dbghelp.dll 的版本不匹配,调试器将继续运行。 (如果没有 -myob 开关,这将被视为严重错误。)

-n
干扰符号加载:启用符号处理程序的详细输出。 有关详细信息和其他控制方法,请参阅 SYMOPT_DEBUG

-netsyms {yes|no}
允许或禁止从网络路径加载符号。

-noinh
防止调试器创建的进程从调试器继承句柄。 有关其他控制方法,请参阅使用 CDB 调试用户模式进程

-noio
阻止调试服务器用于输入或输出。 仅接受调试客户端的输入(以及 -c 命令行选项指定的任何初始命令或命令脚本)。

所有输出都将定向到调试客户端。 如果将 NTSD 用于服务器,则根本不会创建控制台窗口。 有关详细信息,请参阅激活调试服务器。 此选项不能与 -d 选项或 -ddefer 选项结合使用。

-noshell
禁止所有 .shell 命令。 只要调试器正在运行,即使新的调试会话已经开始,这种禁止也将持续。 有关详细信息,以及禁用 .shell 命令的其他方法,请参阅使用 Shell 命令

-nosqm
禁用遥测数据收集和上传。

-o
调试目标应用程序启动的所有进程(子进程)。 默认情况下,由正在调试的进程创建的进程将正常运行。 有关其他控制方法,请参阅使用 CDB 调试用户模式进程

-pPID
指定要调试的十进制进程 ID。 这用于调试已在运行的进程。 有关详细信息,请参阅使用 CDB 调试用户模式进程

-pb
防止调试器在附加到目标进程时请求初始进入。 如果应用程序已挂起,或者想要避免在目标中创建进入线程,这非常有用。

-pd
使目标应用程序在调试会话结束时不终止。 有关详细信息,请参阅在 CDB 中结束调试会话

-pe
指示目标应用程序已经在调试中。 有关详细信息,请参阅重新附加到目标应用程序

-pnName
指定要调试的进程的名称。 (此名称必须唯一。)用于调试已在运行的进程。

-pr
促使调试器在附加到目标进程时开始运行目标进程。 如果应用程序已挂起,并且希望应用程序恢复执行,这非常有用。

-psnServiceName
指定要调试的进程中包含的服务的名称。 这用于调试已在运行的进程。

-ptSeconds
指定中断超时值(以秒为单位)。 默认为 30。 有关详细信息,请参阅控制目标

-pv
指定调试器应无干扰地附加到目标进程。 有关详细信息,请参阅非侵入性调试(用户模式)

-pvr
工作方式类似于 -pv,只是目标进程未挂起。

-QRServer
列出在指定网络服务器上运行的所有调试服务器。 Server 前面的双反斜杠 (\) 为可选。 有关详细信息,请参阅搜索调试服务器

-QR 参数不能用于任何其他参数。 此命令实际上不会启动 CDB。

-rBreakErrorLevel
指定将导致目标进入到调试器的错误级别。 这是一个十进制数,等于 0、1、2 或 3。 可能的值如下所示:

返回的常量 含义

0

NONE

不要因任何错误而中断。

1

ERROR

在 ERROR 级别的调试事件时中断。

2

MINORERROR

在 MINORERROR 和 ERROR 级别的调试事件时中断。

3

WARNING

在 WARNING、MINORERROR 和 ERROR 级别调试事件时中断。

此错误级别仅在 Microsoft Windows 的已检查版本中有意义。 默认值为 1。 Windows 10 版本 1803 之前的旧版 Windows 上提供已检查的版本。

-robp
这允许 CDB 在只读内存页上设置断点。 (默认情况下,这样的操作会失败。)

-s
禁用延迟符号加载。 这会减慢进程启动速度。 有关详细信息和其他控制方法,请参阅 SYMOPT_DEFERRED_LOADS

-sdce
使调试器在符号加载期间显示文件访问错误对话框。 有关详细信息以及其他控制方法,请参阅 SYMOPT_FAIL_CRITICAL_ERRORS

-ses
使调试器对所有符号文件执行严格评估,并忽略任何有问题的符号。 有关详细信息和其他控制方法,请参阅 SYMOPT_EXACT_SYMBOLS

-sflags 0xNumber
一次设置所有符号处理程序选项。 数字应是以 0x 为前缀的十六进制数字,允许使用不带 0x 的十进制,但符号选项是二进制标志,因此建议使用十六进制。 应谨慎使用此选项,因为它将覆盖所有符号处理程序的默认值。 有关详细信息,请参阅设置符号选项

-sicv
使符号处理程序忽略 CV 记录。 有关详细信息和其他控制方法,请参阅 SYMOPT_IGNORE_CVREC

-sins
使调试器忽略符号路径和可执行映像路径环境变量。 有关详细信息,请参阅 SYMOPT_IGNORE_NT_SYMPATH

-snc
使调试器关闭 C++ 转换。 有关详细信息和其他控制方法,请参阅 SYMOPT_NO_CPP

-snul
禁用非限定名称的自动符号加载。 有关详细信息和其他控制方法,请参阅 SYMOPT_NO_UNQUALIFIED_LOADS

-srcpathSourcePath
指定源文件搜索路径。 用分号 (;) 分隔多个路径。 如果路径包含空格,则应将其括在引号中。 有关详细信息以及更改此路径的其他方法,请参阅源路径

-sup
使符号处理程序在每次符号搜索期间搜索公共符号表。 有关详细信息和其他控制方法,请参阅 SYMOPT_AUTO_PUBLICS

-tPrintErrorLevel
指定将导致调试器显示错误消息的错误级别。 这是一个十进制数,等于 0、1、2 或 3。 可能的值如下所示:

返回的常量 含义

0

NONE

不显示任何错误。

1

ERROR

显示 ERROR 级别调试事件。

2

MINORERROR

显示 MINORERROR 和 ERROR 级别调试事件。

3

WARNING

显示 WARNING、MINORERROR 和 ERROR 级别调试事件。

此错误级别仅在 Microsoft Windows 的已检查版本中有意义。 Windows 10 版本 1803 之前的旧版 Windows 上提供已检查的版本。 默认值为 1。

-v
启用调试器的详细输出。

-version
输出调试器版本字符串。

-vf
启用默认 ApplicationVerifier 设置。

-vf:<opts>
启用给定的 ApplicationVerifier 设置。

-w
指定在单独的 VDM 中调试 16 位应用程序。

-wakePID
使进程 ID 由 PID 指定的用户模式调试器的睡眠模式结束。 在睡眠模式下,必须在目标计算机上发出此命令。 有关详细信息,请参阅从内核调试器控制用户模式调试器

-wake 参数不应与任何其他参数一起使用。 此命令实际上不会启动 CDB。

-x{e|d|n|i} Exception
控制指定事件发生时调试器的行为。 Exception 可以是异常编号或事件代码。 可以多次指定此选项来控制不同的事件。 有关详细信息以及控制这些设置的其他方法,请参阅控制异常和事件

-x
禁用访问冲突异常时第一次中断。 第二次发生访问冲突将中断调试器。 此设置与 -xd av 相同。

-ySymbolPath
指定符号搜索路径。 用分号 (;) 分隔多个路径。 如果路径包含空格,则应将其括在引号中。 有关更改此路径的详细信息和其他方法,请参阅符号路径

-zDumpFile
指定要调试的崩溃转储文件的名称。 如果路径和文件名包含空格,则必须用引号括起来。 通过包含多个 -z 选项,可以同时打开多个转储文件,每个选项后面都有一个不同的 DumpFile 值。 有关详细信息,请参阅分析用户模式转储文件

-zpPageFile
指定修改后的页面文件的名称。 如果要调试转储文件,并且想要使用 .pagein(内存页)命令,这非常有用。 不能将 -zp 与标准 Windows 页面文件一起使用,只能使用经过特殊修改的页面文件。

executable
指定可执行进程的命令行。 这用于启动新进程并对其进行调试。 这必须是命令行上的最后一项。 可执行文件名称之后的所有文本都作为其参数字符串传递给可执行文件。

-?
显示命令行帮助文本。

当从开始 | 运行或从命令提示符窗口启动调试器时,请在应用程序的文件名后指定目标应用程序的参数。 例如:

cdb myexe arg1arg2