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 cdb [parameters]
ntsd [parameters]

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

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

参数

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

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

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

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

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

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

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

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

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

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

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

-cimp
指示 CDB/NTSD 以 DbgSrv 的隐式命令行(而不是要运行的显式进程)开头。 此选项是 dbgsrv 的客户端。

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

-d
将此调试器的控制权传递给内核调试器。 如果正在调试 CSRSS,此控件重定向始终处于活动状态,即使未指定 -d 也是如此。 (在远程调试过程中不能使用此选项--请改用 ddefer 。 ) 参见 从内核调试器控制 User-Mode 调试器 以获取详细信息。 此选项不能与 -ddefer 选项或 -noio 选项一起使用。

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

-ddefer
将此调试器的控制权传递给内核调试器,除非连接了调试客户端。 (这是可以从调试服务器使用的 -d 的变体。 ) 参见 从内核调试器控制 User-Mode 调试器 以获取详细信息。 此选项不能与 -d 选项或 -noio 选项一起使用。

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

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

-failinc
导致调试器忽略任何有问题的符号。 调试用户模式或内核模式小型转储文件时,此选项还会阻止调试器加载其图像无法映射的任何模块。 有关详细信息和控制此方法的其他方法,请参阅 SYMOPT _ EXACT _ 符号

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

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

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

-i ImagePath
指定生成错误的可执行文件的位置。 如果路径包含空格,则应该用引号将其引起来。

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

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

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

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

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

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

-isd
为任何进程创建启用 "创建 _ 忽略 _ 系统 _ 默认值" 标志。

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

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

-kqm
在安静模式下启动 CDB/NTSD。

-线条
启用源代码行调试。 如果省略此选项,则在允许进行源调试之前,将必须使用 (开关源行支持) 命令。 有关控制此情况的其他方法,请参阅 SYMOPT _ LOAD _ LINES

-log{a | au | o | ou} 日志 文件
开始将信息记录到日志文件。 如果指定的文件已存在,则会在使用 -徽标 时覆盖该文件,如果使用-loga,则输出将追加到该文件。 -Logau-logou 选项分别与 -loga-徽标 分别操作,只不过日志文件是 Unicode 文件。 有关更多详细信息,请参阅 在 CDB 中保留日志文件

-myob
如果 dbghelp.dll 存在版本不匹配的情况,则调试器将继续运行。 (没有 -myob 开关,此错误被视为错误。 )

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

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

-noinh
阻止调试器创建的进程从调试器继承句柄。 有关控制此操作的其他方法,请参阅 使用 CDB 调试 User-Mode 进程

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

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

-noshell
禁止全部 shell 命令。 即使启动了新的调试会话,此禁止仍将在调试器运行的时间结束。 有关详细信息,以及其他禁用 shell 命令的方法,请参阅 使用 shell 命令

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

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

-p PID
指定要调试的十进制进程 ID。 这用于调试已经在运行的进程。 有关详细信息,请参阅 使用 CDB 调试 User-Mode 进程

-pb
阻止调试器在附加到目标进程时请求初始中断。 如果应用程序已挂起,或者您想要避免在目标中创建一个中断线程,这会很有用。

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

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

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

-pr
导致调试器在附加到目标进程时启动该进程。 这在应用程序已挂起且你希望它恢复执行时非常有用。

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

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

-pv
指定调试器应附加到目标进程 noninvasively。 有关详细信息,请参阅 Noninvasive 调试 (用户模式)

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

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

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

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

“值” 返回的常量 含义

0

请勿在任何错误时中断。

1

ERROR

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

2

MINORERROR

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

3

WARNING

警告、MINORERROR 和错误级别调试事件时中断。

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

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

-s
禁用延迟符号加载。 这会减慢进程启动速度。 有关详细信息以及控制此情况的其他方法,请参阅 SYMOPT _ DEFERRED _ LOADS

-sdce
使调试器在符号 加载过程中 显示"文件访问错误"对话框。 有关详细信息和用于控制此情况的其他方法,请参阅 SYMOPT _ FAIL _ CRITICAL _ ERRORS

-ses
使调试器执行所有符号文件的严格计算,并忽略任何可提问的符号。 有关详细信息以及控制此内容的其他方法,请参阅 SYMOPT _ _ EXACT SYMBOLS

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

-sicv
使符号处理程序忽略 CV 记录。 有关详细信息以及控制此内容的其他方法,请参阅 SYMOPT _ IGNORE _ CVREC

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

-snc
使调试器关闭 C++ 转换。 有关详细信息以及控制此内容的其他方法,请参阅 SYMOPT _ NO _ CPP

-snul
禁用非限定名称的自动符号加载。 有关详细信息以及控制此内容的其他方法,请参阅 SYMOPT _ NO _ UNQUALIFIED _ LOADS

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

-sup
使符号处理程序每次搜索符号期间都搜索公共符号表。 有关详细信息以及控制此内容的其他方法,请参阅 SYMOPT _ AUTO _ PUBLICS

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

“值” 返回的常量 含义

0

不显示任何错误。

1

ERROR

显示 ERROR 级别调试事件。

2

MINORERROR

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

3

WARNING

显示警告、MINORERROR 和错误级别调试事件。

此错误级别仅对已检查的 Microsoft Windows。 在版本 1803 之前,已检查Windows版本Windows 10版本。 默认值为 1。

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

-version
打印调试器版本字符串。

-vf
启用默认 ApplicationVerifier 设置。

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

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

-wake PID
导致用户模式调试器(其进程 ID 由 PID 指定)的睡眠 模式结束。 必须在睡眠模式期间在目标计算机上发出此命令。 有关详细信息 ,请参阅User-Mode内核调试器控制 调试器。

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

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

-x
在访问冲突异常时禁用第一机会中断。 第二次出现访问冲突会进入调试器。 这与 -xd av 相同

-y SymbolPath
指定符号搜索路径。 使用分号分隔多个路径; (;) 。 如果路径包含空格,则应当用引号引起来。 有关详细信息以及更改此路径的其他方法,请参阅 符号路径

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

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

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

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

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

cdb myexe arg1arg2