使用 WinDbg 傳統對使用者模式進程進行偵錯

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

附加至執行中的進程

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

WinDbg 功能表

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

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

命令提示字元

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

  • windbg -p ProcessID
  • windbg -pn ProcessName

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

如需命令行語法的詳細資訊,請參閱 WinDbg 命令行選項

調試程式命令視窗

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

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

如果 .attach 命令成功,調試程式會在下次調試程式發出執行命令時附加至指定的進程。 如果您在一個數據列中使用此命令數次,則調試程式必須要求執行多次,才能使用此命令。

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

如果您想要對執行中的進程進行偵錯,而且只干擾其執行中,您應該不具侵入性地對進程進行偵錯。

WinDbg 功能表

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

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

命令提示字元

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

  • windbg -pv -p ProcessID
  • windbg -pv -pn ProcessName

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

調試程式命令視窗

如果調試程式已經作用中,您可以在 [調試程式命令] 視窗中,使用 .attach -v (附加至進程)命令,以非侵入方式偵錯執行中的進程。

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

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

繁衍新進程

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

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

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

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

WinDbg 功能表

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

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

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

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

命令提示字元

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

windbg [-o] ProgramName [Arguments]

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

調試程式命令視窗

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

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

如果 .create 命令成功,調試程式會在下次調試程式發出執行命令時建立指定的進程。 如果您在一個數據列中使用此命令數次,則調試程式必須要求執行多次,才能使用此命令。

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

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

重新附加至進程

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