使用 WinDbg 傳統對 User-Mode 進程進行偵錯

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

附加至執行中的進程

有數種方式可讓您使用 WinDbg 附加至執行中的進程。 不論您選擇的方法為何,您都需要進程識別碼或進程名稱。 進程識別碼是由作業系統指派的數位。 如需如何判斷進程識別碼和進程名稱的詳細資訊,請參閱 尋找進程識別碼

WinDbg 功能表

當 WinDbg 處於睡眠模式時,您可以從 [檔案] 功能表選擇 [附加至進程] 或按F6,以附加至執行中的進程。

在 [ 附加至進程 ] 對話方塊中,選取您要偵錯的進程,然後選取 [ 確定]。

命令提示字元

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

  • windbg -pProcessID
  • windbg -pnProcessName

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

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

偵錯工具命令視窗

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

除非部分執行緒已凍結或暫停,否則偵錯工具一律會同時啟動多個目標進程。

如果 .attach 命令成功,偵錯工具會在下次偵錯工具發出執行命令時附加至指定的進程。 如果您在資料列中使用此命令數次,則偵錯工具必須要求執行多次,才能使用此命令。

附加至執行中的進程非不具資料性

如果您想要對執行中的進程進行偵錯,並只干擾其執行中,您應該 以非干擾方式對進程進行偵錯。

WinDbg 功能表

當 WinDbg 處於睡眠模式時,您可以選擇 [從 [檔案] 功能表選擇 [附加至進程] 或按F6,以非經常性地偵錯執行中的進程。

當 [ 附加至進程 ] 對話方塊出現時,請選取 [非vasive] 核取方塊。 然後,選取包含您想要之進程識別碼和名稱的行。 (您也可以在 [ 進程 識別碼] 方塊中輸入進程識別碼。) 最後,選取 [ 確定]。

命令提示字元

在 [命令提示字元] 視窗中,您可以在啟動 WinDbg 時,以非vasive方式附加至執行中的進程。 使用下列其中一個命令:

  • windbg -pv -pProcessID
  • windbg -pv -pnProcessName

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

偵錯工具命令視窗

如果偵錯工具已在使用中,您可以使用 [偵錯工具命令] 視窗中.attach -v ([附加至進程) ] 命令,以非不主動地對執行中的進程進行偵錯。

如果偵錯工具已經以入侵方式偵錯一或多個進程,您可以使用 .attach 命令。 如果 WinDbg 處於休眠狀態,則無法使用此命令。

如果 .attach -v 命令成功,偵錯工具會在下次偵錯工具發出執行命令時偵錯指定的進程。 由於在非vasive 偵錯期間不允許執行,因此偵錯工具一次無法進行多個進程偵錯。 這項限制也表示使用 .attach -v 命令可能會讓現有的入侵偵錯會話變得較不實用。

繁衍新進程

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

偵錯工具所建立的進程 (也稱為繁衍進程,) 的行為與偵錯工具不會建立的進程稍有不同。

偵錯工具所建立的進程會使用特殊的偵錯堆積,而不是使用標準堆積。 您可以使用_NO_DEBUG_HEAP 環境變數-hd 命令列選項,強制繁衍的進程使用標準堆積,而不是偵錯堆積。

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

WinDbg 功能表

當 WinDbg 處於睡眠模式時,您可以從 [檔案] 功能表選擇 [開啟可執行檔] 或按 CTRL+E 來繁衍新的進程。

當 [開啟可執行檔] 對話方塊出現時,請在 [ 檔案名 ] 方塊中輸入可執行檔的完整路徑,或使用 [查看 ] 清單來選取您想要的路徑和檔案名。

如果您想要搭配使用者模式應用程式使用任何命令列參數,請在 [ 引數 ] 方塊中輸入它們。 如果您想要從預設目錄變更起始目錄,請在 [ 開始 目錄] 方塊中輸入目錄路徑。 如果您想要 WinDbg 附加至子進程,請選取 [偵錯子進程] 核取方塊

進行選取之後,請選取 [ 開啟]。

命令提示字元

在 [命令提示字元] 視窗中,您可以在啟動 WinDbg 時繁衍新的程式。 使用下列命令:

windbg [-o]ProgramName[Arguments]

-o選項會使偵錯工具附加至子進程。 有數個其他實用的命令列選項。 如需命令列語法的詳細資訊,請參閱 WinDbg Command-Line Options

偵錯工具命令視窗

如果 WinDbg 已經偵錯一或多個進程,您可以使用 [偵錯工具命令] 視窗中.create (Create Process) 命令來建立新的進程。

除非部分執行緒已凍結或暫停,否則偵錯工具一律會同時啟動多個目標進程。

如果 .create 命令成功,偵錯工具會在下次偵錯工具發出執行命令時建立指定的進程。 如果您在資料列中使用此命令數次,則偵錯工具必須要求執行多次,才能使用此命令。

您可以在.create之前,使用.createdir (Set Created Process Directory) 命令來控制應用程式的起始目錄。 您可以使用 .createdir -I 命令或 -noinh 命令列選項來控制目標應用程式是否繼承偵錯工具的控制碼。

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

重新附加至進程

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