CDB Command-Line 選項

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.) 共用視窗

--
偵錯 Client Server Run-Time 子系統 (CSRSS) 。 如需詳細資訊,請參閱 偵錯 CSRSS

-a擴充功能
設定預設延伸模組 DLL。 預設值為 userexts。 「a」 之後不能有空格,而且不能包含 .dll 延伸模組。 如需此預設值設定的詳細資料和其他方法,請參閱 載入偵錯工具擴充功能 DLL

-bonc
如果指定此選項,偵錯工具會在會話開始時立即中斷目標。 當連線到目前可能未中斷至目標的偵錯伺服器時,這特別有用。

-c 「command
指定要在啟動時執行的初始偵錯工具命令。 此命令必須以引號括住。 您可以使用分號分隔多個命令。 (如果您有長命令清單,將它們放在腳本中可能會比較容易,然後使用 -c 選項搭配 $ < 、$、$、$ ><>< $ >< (執行腳本檔案) command.)

如果您要啟動偵錯用戶端,此命令必須適用于偵錯伺服器。 不允許用戶端特定的命令,例如 .lsrcpath

-cf 「filename
指定腳本檔案的路徑和名稱。 此腳本檔案會在偵錯工具啟動時立即執行。 如果 filename 包含空格,則必須以引號括住。 如果省略路徑,則會假設目前目錄。 如果未使用 -cf 選項,則會使用目前目錄中 ntsd.ini 檔案做為腳本檔案。 如果檔案不存在,則不會發生錯誤。 如需詳細資訊,請參閱 使用腳本檔案

-cfr 「filename
指定腳本檔案的路徑和名稱。 此腳本檔案會在偵錯工具啟動時立即執行,且每當重新開機目標時。 如果 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的效果相同。 如需詳細資訊,請參閱 控制例外狀況和事件

-高清
指定不應該使用偵錯堆積。 如需詳細資訊,請參閱 使用 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 (切換來源行支援) 命令,才能允許來源偵錯。 如需控制此作業的其他方法,請參閱 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 命令的其他方式,請參閱 使用殼層命令

-nosqm
停用遙測資料收集和上傳。

-o
偵錯目標應用程式所啟動的所有進程, (子進程) 。 根據預設,您所偵錯的進程會如正常執行一樣執行。 如需控制此作業的其他方法,請參閱 使用 CDB 對 User-Mode 進程進行偵錯。

-pPID
指定要偵錯的十進位進程識別碼。 這是用來偵錯已經執行的進程。 如需詳細資訊,請參閱 使用 CDB 對 User-Mode 進程進行偵錯。

-鉛
防止偵錯工具在附加至目標進程時要求初始中斷。 如果應用程式已暫停,或您想要避免在目標中建立中斷線程,這非常有用。

-Pd
導致目標應用程式不會在偵錯會話結束時終止。 如需詳細資訊 ,請參閱在 CDB 中結束偵錯會話

-體育
表示目標應用程式已經偵錯。 如需詳細資訊 ,請參閱重新附加至目標應用程式

-pn名稱
指定要偵錯的進程名稱。 (此名稱必須是唯一的。) 這是用來偵錯已經執行的進程。

-公關
讓偵錯工具在附加至它時啟動執行的目標進程。 如果應用程式已暫停,而且您想要繼續執行,這非常有用。

-psnServiceName
指定要偵錯之進程中包含的服務名稱。 這是用來偵錯已經執行的進程。

-ptSeconds
指定中斷逾時,以秒為單位。 預設值是 30。 如需詳細資訊 ,請參閱控制目標

-光伏
指定偵錯工具應該以非vasive 方式附加至目標進程。 如需詳細資訊,請參閱 非vavasive 偵錯 (使用者模式)

-Pvr
運作方式類似 -pv ,但目標進程並未暫停。

-QR伺服器
列出在指定網路伺服器上執行的所有偵錯伺服器。 雙反斜線 (\) 是選擇性 。 如需詳細資訊,請參閱 搜尋偵錯伺服器

-QR參數不能與任何其他參數搭配使用。 此命令實際上不會啟動 CDB。

-rBreakErrorLevel
指定會導致目標中斷至偵錯工具的錯誤層級。 這是等於 0、1、2 或 3 的十進位數。 可能值如下所示:

常數 意義

0

請勿中斷任何錯誤。

1

ERROR

在 ERROR 層級偵錯事件上中斷。

2

MINORERROR

在 MINORERROR 和 ERROR 層級偵錯事件上中斷。

3

WARNING

在 WARNING、MINORERROR 和 ERROR 層級偵錯事件上中斷。

此錯誤層級只有在已檢查的 Microsoft Windows 組建中才有意義。 預設值為 1。 在舊版 Windows 上,Windows 10 1803 版之前,已檢查的組建可供使用。

-robp
這可讓 CDB 在唯讀記憶體頁面上設定中斷點。 (預設為讓這類作業失敗。)

-s
停用延遲符號載入。 這會讓進程啟動變慢。 如需詳細資料和控制這項功能的其他方法,請參閱 SYMOPT_DEFERRED_LOADS

-sdce
導致偵錯工具在符號載入期間顯示 [檔案存取錯誤 ] 對話方塊。 如需控制此動作的詳細資料和其他方法,請參閱 SYMOPT_FAIL_CRITICAL_ERRORS

-ses
讓偵錯工具對所有符號檔執行嚴格的評估,並忽略任何可疑的符號。 如需詳細資料和控制這項功能的其他方法,請參閱 SYMOPT_EXACT_SYMBOLS

-sflags 0xNumber
一次設定所有符號處理常式選項。 數位 應該是前面加上 0x 的十六進位數位 -- 允許不含 0x 的十進位數位,但符號選項是二進位旗標,因此建議使用十六進位。 此選項應該小心使用,因為它會覆寫所有符號處理常式預設值。 如需詳細資訊,請參閱 設定符號選項

-sicv
讓符號處理常式忽略 CV 記錄。 如需詳細資料和控制這項功能的其他方法,請參閱 SYMOPT_IGNORE_CVREC

-罪
讓偵錯工具忽略符號路徑和可執行檔映射路徑環境變數。 如需詳細資訊,請參閱 SYMOPT_IGNORE_NT_SYMPATH

-Snc
讓偵錯工具關閉 C++ 轉譯。 如需詳細資料和控制這項功能的其他方法,請參閱 SYMOPT_NO_CPP

-snul
停用未限定名稱的自動符號載入。 如需詳細資料和控制這項功能的其他方法,請參閱 SYMOPT_NO_UNQUALIFIED_LOADS

-srcpathSourcePath
指定原始程式檔搜尋路徑。 以分號分隔多個路徑 (;) 。 如果路徑包含空格,它應該以引號括住。 如需詳細資訊,以及變更此路徑的其他方式,請參閱 來源路徑

-支援
讓符號處理常式在每個符號搜尋期間搜尋公用符號表。 如需詳細資料和控制這項功能的其他方法,請參閱 SYMOPT_AUTO_PUBLICS

-tPrintErrorLevel
指定會導致偵錯工具顯示錯誤訊息的錯誤層級。 這是等於 0、1、2 或 3 的十進位數。 可能值如下所示:

常數 意義

0

不顯示任何錯誤。

1

ERROR

顯示 ERROR 層級偵錯事件。

2

MINORERROR

顯示 MINORERROR 和 ERROR 層級偵錯事件。

3

WARNING

顯示 WARNING、MINORERROR 和 ERROR 層級偵錯事件。

此錯誤層級只有在已檢查的 Microsoft Windows 組建中才有意義。 在舊版 Windows 上,Windows 10 1803 版之前,已檢查的組建可供使用。 預設值為 1。

-V
啟用偵錯工具的詳細資訊輸出。

-版本
列印偵錯工具版本字串。

-Vf
啟用預設的 ApplicationVerifier 設定。

-vf:< opts >
啟用指定的 ApplicationVerifier 設定。

-w
指定在個別 VDM 中偵錯 16 位應用程式。

-wakePID
造成使用者模式偵錯工具的睡眠模式結束,其進程識別碼是由 PID所指定。 此命令必須在睡眠模式期間于目的電腦上發出。 如需詳細資訊 ,請參閱從核心偵錯工具控制 User-Mode 偵錯工具

-wake參數不應與任何其他參數搭配使用。 此命令實際上不會啟動 CDB。

-x{e|d|n|i}例外狀況
控制發生指定事件時的偵錯工具行為。 例外狀況可以是例外狀況號碼或事件代碼。 您可以多次指定此選項來控制不同的事件。 如需控制這些設定的詳細資料和其他方法,請參閱 控制例外狀況和事件

-X
停用存取違規例外狀況的第一次中斷。 第二次發生存取違規會中斷至偵錯工具。 這與 -xd av相同。

-ySymbolPath
指定符號搜尋路徑。 以分號分隔多個路徑 (;) 。 如果路徑包含空格,它應該以引號括住。 如需詳細資訊,以及變更此路徑的其他方式,請參閱 符號路徑

-zDumpFile
指定要偵錯之損毀傾印檔案的名稱。 如果路徑和檔案名包含空格,則必須以引號括住。 可以一次開啟數個傾印檔案,方法是包含多個 -z 選項,每個選項後面接著不同的 DumpFile 值。 如需詳細資訊,請參閱 分析 User-Mode 傾印檔案

-zpPageFile
指定修改的分頁檔名。 如果您要偵錯傾印檔案,而且想要使用 .pagein (記憶體中的頁面) 命令,這會很有用。 您無法搭配標準 Windows 頁面檔案使用 -zp -- 只能使用特別修改的頁面檔案。

可執行
指定可執行進程的命令列。 這會用來啟動新的進程並進行偵錯。 這必須是命令列的最後一個專案。 可執行檔名稱之後的所有文字都會當做其引數字串傳遞至可執行檔。

-?
顯示命令列解說文字。

當您從 [開始] 啟動偵錯工具時 |在 [命令提示字元] 視窗中執行 或 ,在應用程式的檔案名之後指定目標應用程式的引數。 例如:

cdb myexe arg1arg2