如何偵錯 Windows 服務

文章翻譯 文章翻譯
文章編號: 824344 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將逐步告訴您,如何偵錯一個 Windows 服務藉由使用 WinDbg 偵錯工具 (windbg.exe)。若要偵錯 Windows 服務,您可以將 WinDbg 偵錯工具附加至處理序主控服務後啟動服務,或者,您可以設定服務啟動與 [WinDbg 偵錯工具附加,讓您可以疑難排解服務啟動相關的問題。本文將告訴您,這兩種方法。

需求

本文假設您已熟悉下列主題:
  • Windows 服務
  • WinDbg 偵錯工具

WinDbg 偵錯工具附加至服務,服務啟動之後

這個方法很類似您可用來偵錯工具附加至處理序和偵錯處理序的方法。

使用主控您要偵錯服務處理程序的處理程序識別碼

  1. 如果要判斷處理序識別碼 (PID) 裝載服務,您要偵錯程序的使用下列方法之一。
    • 方法 1: 使用工作管理員
      1. 在工作列上按一下滑鼠右鍵,然後按一下 [工作管理員]。[Windows 工作管理員] 對話方塊隨即出現。
      2. 按一下 [Windows 工作管理員] 對話方塊的 [處理程序] 索引標籤。
      3. 影像名稱,] 下按一下 [裝載服務,您要偵錯程序的影像名稱]。請注意這項程序所指定的相對應的 [PID] 欄位的值的處理序 ID。
    • 方法 2: 使用工作清單] 公用程式 (tlist.exe)
      1. 按一下 [開始],然後按一下 [執行]。[執行] 對話方塊隨即出現。
      2. 在 [開啟] 方塊中輸入 cmd,再按 [確定]
      3. 在命令提示字元下,變更目錄路徑,以反映 tlist.exe 檔案在您的電腦上的位置。

        附註tlist.exe 檔通常位於下列目錄: C:\Program Files\Debugging 工具 Windows 的
      4. 在的命令提示字元輸入 [tlist 若要列出影像名稱和處理的目前在您的電腦執行的所有處理序的識別碼]。

        附註記下裝載服務,您要偵錯程序的處理序 ID。
  2. 在命令提示字元下,變更目錄路徑,以反映 windbg.exe 檔案在您的電腦上的位置。

    附註如果不開啟命令提示字元,請依照下列步驟將和 b 方法 1。windbg.exe 檔通常位於下列目錄: C:\Program Files\Debugging 工具的 Windows。
  3. 在的命令提示字元輸入 [windbg –p ProcessID ProcessID/g 將 WinDbg 偵錯工具附加至處理序主控您要偵錯的服務]。

    附註ProcessID 是裝載服務,您要偵錯程序的處理序 ID 預留位置。

使用主控您要偵錯服務處理程序的影像名稱

只有在剛好有一個執行的處理序主控您要執行的服務執行個體,您可以使用這個方法。要這麼做,請您執行下列步驟:
  1. 按一下 [開始],然後按一下 [執行]。[執行] 對話方塊隨即出現。
  2. 在 [開啟] 方塊輸入 cmd,],然後再按一下 [確定] 以開啟命令提示字元]。
  3. 在命令提示字元下,變更目錄路徑,以反映 windbg.exe 檔案在您的電腦上的位置。

    附註windbg.exe 檔通常位於下列目錄: C:\Program Files\Debugging 工具的 Windows。
  4. 在的命令提示字元輸入 [windbg –pn ImageName ImageName/g 將 WinDbg 偵錯工具附加至處理序主控您要偵錯的服務]。

    附註ImageName 是影像名稱主控您要偵錯服務處理程序的預留位置。在"-pn 」 命令列選項指定 ImageName 命令列引數是一個處理程序的影像名稱。

啟動 WinDbg 偵錯工具,並將附加至處理序主控您要偵錯的服務

  1. 啟動 Windows 檔案總管]。
  2. 尋找 windbg.exe 檔案在您的電腦上。

    附註windbg.exe 檔通常位於下列目錄: C:\Program Files\Debugging 工具 Windows 的
  3. 執行 windbg.exe 檔一起搭配 使用/g 命令列參數,以啟動 [WinDbg 偵錯工具。/ g 命令列參數可讓追蹤的程序繼續執行後中斷點設定。
  4. 在 [檔案] 功能表上按一下 [附加至處理程序 至顯示 [附加至處理序] 對話方塊]。
  5. 按一下以選取對應到處理程序該主機服務,您要偵錯的節點,然後按一下 [確定]
  6. 在出現該對話方塊,按一下 [是] 儲存基底的工作區資訊。請注意您現在可以進行偵錯 disassembled 的程式碼,您的服務。

要設定服務以 [WinDbg 開始偵錯工具附加

您可以使用這個方法來偵錯服務,如果您想要疑難排解服務啟動相關的問題。
  1. 設定影像檔案執行選項。如果要執行此動作使用其中一個下列方法:
    • 方法 1: 使用全域旗標編輯器 (gflags.exe)
      1. 啟動 Windows 檔案總管]。
      2. 尋找 gflags.exe 檔案在您的電腦上。

        附註gflags.exe 檔通常位於下列目錄: C:\Program Files\Debugging 工具的 Windows。
      3. 執行 gflags.exe 檔案啟動全域旗標編輯器。
      4. 影像檔案名稱] 文字方塊中輸入裝載服務,您要偵錯處理序影像名稱。比方說如果您想有 MyService.exe 做為影像名稱的程序所裝載的服務進行偵錯,輸入 MyService.exe
      5. 在 [目的地,按一下以選取 [映像檔案選項] 選項。
      6. 在 [影像偵錯工具選項,按一下以選取 [偵錯工具] 核取方塊。
      7. 在 [偵錯工具] 文字方塊中鍵入 [您想要使用偵錯工具的完整路徑]。比方說如果想使用 WinDbg 偵錯工具來對服務進行偵錯您可以輸入類似下列的完整路徑: Windows\windbg.exe 的 C:\Program Files\Debugging 工具
      8. 按一下 [套用],然後再按一下 [確定],結束全域旗標編輯程式 」。
    • 方法 2: 使用 「 登錄編輯程式 」
      1. 按一下 [開始],然後按一下 [執行]。[執行] 對話方塊隨即出現。
      2. 在 [開啟] 方塊中輸入 regedit,然後按一下 [以啟動 [登錄編輯程式] 中的 [確定]
      3. 重要這個區段、 方法或任務包含告訴您如何修改登錄的步驟。然而,如果您不當修改登錄,可能會發生嚴重的問題。因此,執行這些步驟時請務必小心。為加強保護,修改登錄之前,請務必將它備份起來。以後您就可以在發生問題時還原登錄。如需有關如何備份和還原登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
        322756如何備份和還原在 Windows 登錄


        在 [登錄編輯程式] 中,找出,並用滑鼠右鍵按一下下列登錄子機碼:
        HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
      4. 指向 [新增],然後再按一下 [索引鍵。在左窗格的 「 登錄編輯程式中中, 請注意 新機碼 # 1 (新的登錄子機碼名稱) 已被選取供編輯]。
      5. 鍵入 ImageName 以取代 新機碼 # 1,並按下 ENTER。

        附註ImageName 是影像名稱主控您要偵錯服務處理程序的預留位置。比方說如果您想有 MyService.exe 做為影像名稱的程序所裝載的服務進行偵錯,輸入 MyService.exe
      6. 用滑鼠右鍵按一下您在步驟 e 建立該登錄子機碼]。
      7. 指向 [新增],然後再按一下 [字串值。在右窗格的 「 登錄編輯程式中中, 請注意 新數值 # 1,新的登錄項目的名稱已被選取用於編輯]。
      8. 新數值 # 1 取代 偵錯工具,並按下 ENTER。
      9. 您在步驟 h 中建立 偵錯工具 登錄項目上按一下滑鼠右鍵,然後按一下 [修改]。[編輯字串] 對話方塊隨即出現。
      10. 在 [數值資料] 文字方塊中輸入 DebuggerPath,],然後再按一下 [確定]]。

        附註DebuggerPath 是您想要使用偵錯工具的完整路徑的預留位置。比方說如果想使用 WinDbg 偵錯工具來對服務進行偵錯您可以輸入類似下列的完整路徑:
        C:\Progra~1\Debugg~1\windbg.exe
  2. 偵錯工具視窗會出現在您的桌面,並與偵錯工具互動為了讓您的服務互動。如果您不要進行您的服務互動,偵錯工具將會啟動,但您無法檢視它,無法發出命令。若要讓您的服務互動,使用下列方法之一:
    • 方法 1: 使用 [服務] 主控台
      1. 按一下 [開始],然後再指向 [程式集
      2. 在 [程式集] 功能表上指向 [系統管理工具,然後按一下 [服務]。會顯示 [服務] 主控台。
      3. 在右窗格的 服務 中主控台、 ServiceName 上, 按一下滑鼠右鍵,然後按一下 [內容]

        附註ServiceName 是服務的您要偵錯名稱預留位置。
      4. [登入] 索引標籤上,按一下以選取 [允許服務與桌面互動] 核取方塊,以 本機系統帳戶,然後再按一下 [確定]
    • 方法 2: 使用 「 登錄編輯程式 」
      1. 在 [登錄編輯程式] 中,找出,並按一下下列登錄子機碼:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceName
        附註ServiceName 取代為您要偵錯服務的名稱。比方說如果要偵錯服務,名為 MyService 找出並按一下下列登錄機碼:
        HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MyService
      2. 在右窗格的 「 登錄編輯程式中的 [名稱] 欄位下 類型,] 上按一下滑鼠右鍵,然後按一下 [修改]。[編輯 DWORD 值] 對話方塊隨即出現。
      3. 數值資料 中的文字變更文字方塊以二進位的 OR 運算的結果,以二進位值目前的文字和二進位值做為兩個運算元的 0x00000100。二進位值,0x00000100,對應至 SERVICE_INTERACTIVE_PROCESS 常數定義於 WinNT.h 標頭檔,在您的電腦上。這個常數會指定服務是互動式在本質。
  3. 當服務啟動時,服務會通訊至服務控制管理員多久服務必須要有開始 (服務在逾時期間)。如果 「 服務控制管理員 」 不會收到 「 服務已啟動 」 請注意從服務這個逾時期限內,服務控制管理員會結束處理序主控服務。這個逾時期間通常是少於 30 秒。如果您不要調整這個逾時期間,服務控制管理員結束程序,並附加偵錯工具嘗試偵錯時。若要調整此逾時期間,請依照下列步驟執行:
    1. 在 [登錄編輯程式] 中,找出,並用滑鼠右鍵按一下下列登錄子機碼:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
    2. 指向 [新增],然後再按一下 [DWORD 值。在右窗格的 「 登錄編輯程式中中, 請注意 新數值 # 1 (新的登錄項目的名稱) 已被選取用於編輯]。
    3. 鍵入 ServicesPipeTimeout 以取代 新數值 # 1,並按下 ENTER。
    4. 以滑鼠右鍵按一下 ServicesPipeTimeout 登錄項目您在步驟 c 中建立,然後按一下 [修改]。[編輯 DWORD 值] 對話方塊隨即出現。
    5. 在 [數值資料] 文字方塊中輸入 TimeoutPeriod,],然後再按一下 [確定]

      附註TimeoutPeriod 是您想要設定服務的逾時期間 (以毫秒為單位) 的值預留位置。比方說如果您想將逾時期間設為 24 小時 (86400000 毫秒),輸入 86400000
    6. 重新啟動電腦。您必須重新啟動電腦的服務控制管理員 」 來套用這個變更。
  4. 啟動您的 Windows 服務。要這麼做,請您執行下列步驟:
    1. 按一下 [開始],然後再指向 [程式集
    2. 在 [程式集] 功能表上指向 [系統管理工具,然後按一下 [服務]。會顯示 [服務] 主控台。
    3. 在右窗格的 服務 中主控台、 ServiceName 上, 按一下滑鼠右鍵,然後按一下 [開始]

      附註ServiceName 是服務的您要偵錯名稱預留位置。

疑難排解

您嘗試透過網路,對服務進行偵錯前請確定符號與服務會使用來源檔案是可以從執行服務的電腦存取。如果要執行此動作使用其中一個下列方法:
  • 包含符號] 和 [來源檔案,則服務會使用您電腦上資料夾的所有人都給予至少讀取存取權限。
  • 將這些符號和服務使用的原始程式檔複製到電腦會執行服務。

?考

如果要下載該工具和公用程式,本文所提,請造訪下列 Microsoft 網站 (英文):
Windows 的偵錯工具: 概觀
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
如需詳細資訊,請造訪下列 Microsoft 開發人員網路 MSDN 網站:
WinDbg 偵錯工具
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx
服務
http://msdn2.microsoft.com/en-us/library/ms685141.aspx
使用全域旗標公用程式
http://msdn2.microsoft.com/en-us/library/ms792858.aspx

屬性

文章編號: 824344 - 上次校閱: 2007年5月16日 - 版次: 6.5
這篇文章中的資訊適用於:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Datacenter Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows XP Home Edition (家用版)
  • Microsoft Windows XP Home Edition SP1
  • Microsoft Windows XP Home Edition SP1a
  • Microsoft Windows XP Home Edition SP2
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Professional SP1
  • Microsoft Windows XP Professional SP1a
  • Microsoft Windows XP Professional SP2
關鍵字:?
kbmt kbimghlp kbregistry kbservice kbdebug kbmisctools kbhowtomaster KB824344 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:824344
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com