共用方式為


使用CDB對 User-Mode 進程進行偵錯

您可以使用CDB附加至執行中的進程,或繁衍並附加至新進程。

附加至執行中的進程

命令提示符

在命令提示字元視窗中,您可以在啟動 CDB 時附加至執行中的進程。 使用下列其中一個指令:

  • cdb -pProcessID
  • cdb -pnProcessName

其中 ProcessID 是執行中進程的進程標識碼,ProcessName 是執行中進程的名稱。

如需命令行語法的詳細資訊,請參閱 CDB Command-Line Options

CDB 命令視窗

如果調試程式已經偵錯一或多個進程,您可以使用 .attach (附加至進程) 命令附加至執行中的進程。

除非部分線程已凍結或暫停,否則調試程式一律會同時啟動多個目標進程。

如果 .attach 命令成功,調試程式會在下次調試程式發出執行命令時附加至指定的進程。 如果您連續多次使用此命令,調試程式必須每次都請求執行。

非侵入性地附加至執行中的進程

如果您要對正在執行的程序進行偵錯,而僅對其執行造成最小干擾,您應該非侵入性地偵錯進程

命令提示符

若要從CDB命令行對執行中的進程進行非侵入性偵錯,請在下列語法中指定 -pv 選項、 -p 選項和進程標識元。

cdb -pv -pProcessID

或者,若要指定進程名稱,以非侵入性地偵錯執行中的進程,請改用下列語法。

cdb -pv -pnProcessName

還有數個其他實用的命令行選項。 如需命令行語法的詳細資訊,請參閱 CDB Command-Line Options

CDB 命令視窗

如果調試程式已經作用中,您可以輸入 .attach -v (附加至進程) 命令,以非侵入性地偵錯執行中的進程。

如果調試程式已經以侵入性方式偵錯一或多個進程,您可以使用 .attach 命令。

如果 .attach -v 命令成功,調試程式會在下次調試程式發出執行命令時偵錯指定的進程。 由於在非侵入式偵錯期間不允許執行,調試程式一次無法對多個進程進行非侵入性偵錯。 這項限制也表示使用 .attach -v 命令可能會使現有的侵入式偵錯會話不太有用。

啟動新進程

CDB 可以啟動使用者模式應用程式,然後對應用程式進行偵錯。 應用程式是以名稱指定。 調試程式也可以自動附加至子進程(原始目標進程啟動的其他進程)。

調試程式所建立的進程(也稱為繁衍進程)的行為與調試程式未建立的進程稍有不同。

調試程式所建立的進程不使用標準堆積 API,而是使用特殊的偵錯堆積。 您可以使用_NO_DEBUG_HEAP 环境变量-hd 命令行選項,強制繁衍進程使用標準堆積,而不是偵錯堆積。

此外,因為目標應用程式是調試程式的子進程,所以它會繼承調試程序的許可權。 此許可權可能會讓目標應用程式執行無法執行的特定動作。 例如,目標應用程式可能會影響受保護的進程。

在 [命令提示字元] 視窗中,您可以在啟動 CDB 時繁衍新的進程。 輸入下列命令。

cdb [-o]ProgramName[Arguments]

-o 選項會導致調試程式附加至子進程。 還有數個其他實用的命令行選項。 如需命令行語法的詳細資訊,請參閱 CDB Command-Line Options

如果調試程式已經偵錯一或多個進程,您可以輸入 .create (Create Process) 命令來建立新的進程。

除非部分線程已凍結或暫停,否則調試程式一律會同時啟動多個目標進程。

如果 .create 命令成功,調試程式會在下次調試程序發出執行命令時建立指定的進程。 如果您連續多次使用此命令,調試程式必須每次都請求執行。

您可以在 .create之前,使用 .createdir(設置創建過程目錄) 命令來控制應用程式的起始目錄。 您可以使用 .createdir -I 命令或 -noinh 命令行選項來控制目標應用程式是否繼承調試程式的句柄。

您可以使用 .childdbg(偵錯子進程) 命令來啟動或停用子進程的偵錯。

重新附加至進程

如果調試程式停止響應或凍結,您可以將新的調試程式附加至目標進程。 如需如何在這種情況中附加除錯程式的詳細資訊,請參閱 重新附加至目標應用程式