程式扎記: [Windows 技巧] 如何偵錯 Windows 服務 (Service)

標籤

2011年6月16日 星期四

[Windows 技巧] 如何偵錯 Windows 服務 (Service)

參考自 這裡 
前言 : 
本文將逐步告訴您,如何偵錯一個 Windows 服務藉由使用 WinDbg 偵錯工具 (windbg.exe). 若要偵錯 Windows 服務,您可以將 WinDbg 偵錯工具附加至處理序主控服務後啟動服務,或者,您可以設定服務啟動WinDbg 偵錯工具附加. 這裡將介紹這兩種方法. 

WinDbg 偵錯工具附加至服務 (服務啟動之後) : 
這個方法很類似您可用來偵錯工具附加至處理序和偵錯處理序的方法. 底下為對應步驟 : 
Step1 : 判斷處理程序/服務的識別碼 (PID) > 打開工作管理員, 並檢查你要檢查服務或程序的 PID 
 

Step2 : 在命令提示字元下,變更目錄路徑,以反映 windbg.exe 檔案在您的電腦上的位置 (或設定環境變數 PATH, 讓命令列找得到 windbg.exe) 

Step3 : 在的命令提示字元輸 windbg –p ProcessID(/g) 將 WinDbg 偵錯工具附加至您要偵錯的服務或處理程序. (ProcessID 為你要偵錯的服務或程序的PID) 
Ps. 

如果是已知 Process Name 時, 也可以透過下面命令進行偵錯 : (ImageName=Process Name)
windbg –pn ImageName or windbg –pn ImageName/g

接著我們來示範剛剛介紹的步驟, 首先我使用 Process Explorer 檢視要偵錯的 Process ID : 
 

我們得到了我們要的 PID, 下一步便是進入 Windbg 的執行目錄並用上面介紹的命令 : 
 

接著你便可以開啟 windbg gui 並開始偵錯 : 
 

設定開始服務後以 WinDbg 偵錯工具進行 Attach (服務啟動之前) : 
你可以在服務一開始時, 並自動使用 WinDbg 或其他 偵錯工具(如 Ollydbg) 自動 Attach 該服務. 這裡我們將使用註冊表與 Ollydbg 當作範例, 請參考下面步驟 : 
Step1 : 請找到下面機碼位置, 並新增機碼名稱, 取名為打算偵錯的 Process Name (Image Name), 如 上個例子的 DSRSvc.exe : 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

Step2 : 請在剛剛建立的機碼內新建字串值, 字串名為 "Debugger", 並給定內容為你 Debugger 工具執行的路徑 : 
- 使用 Windbg 
 
- 使用 Ollydbg 
 

Step3 : 請找到下面機碼位置, 並新增 DWORD 類型, 鍵名為 "ServicesPipeTimeout", 並設定值為十進位的 "864000" : 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control

 

Step4 : 再次重啟電腦便可以發現欲偵錯的服務/程序 會以剛剛設定的 Debug 工具開啟 : 
- 使用 Windbg 
 
- 使用 Ollydbg 

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!