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 -d -G -g winmine 可以编写为 cdb -odGg winmine

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

参数

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

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

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

-2
如果目标应用程序是 控制台应用程序,则此选项会导致它位于新的控制台窗口中。 (默认为目标控制台应用程序与 CDB 或 NTSD.) 共享窗口

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

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

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

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

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

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

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

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

-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_SYMBOLS

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

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

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

-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 调试User-Mode进程

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

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

-noshell
禁止所有 .shell 命令。 只要调试器正在运行,此禁令就会持续,即使启动新的调试会话也是如此。 有关详细信息,以及禁用 .shell 命令的其他方法,请参阅 使用 Shell 命令

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

-o
调试目标应用程序启动的所有进程, (子进程) 。 默认情况下,由要调试的进程会像通常一样运行。 有关控制此操作的其他方法,请参阅 使用 CDB 调试User-Mode进程

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

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

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

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

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

-pr
导致调试器在附加到目标进程时启动运行的目标进程。 如果应用程序已暂停,并且希望应用程序恢复执行,这非常有用。

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

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

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

-pvr
工作方式类似于 -pv ,但目标进程未暂停。

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

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

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

“值” 返回的常量 含义

0

不要中断任何错误。

1

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

不显示任何错误。

1

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 指定的用户模式调试器。 在睡眠模式下,必须在目标计算机上发出此命令。 有关详细信息,请参阅 从内核调试器控制User-Mode调试器

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

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

-x
禁用访问冲突异常的第一次中断。 访问冲突的第二个匹配项将中断到调试器中。 这与 -xd av 相同。

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

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

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

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

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

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

cdb myexe arg1arg2