調試服務
-
在調試配置中生成你的服務。
-
安裝你的服務。
-
從 “服務控制管理器”、“服務器資源管理器”或代碼啟動服務。
-
使用管理憑據啟動 Visual Studio,那么你就能附加到系統進程。
-
(可選)在 Visual Studio 菜單欄上,選擇“工具”、“選項” 。 在“選項”對話框中,選擇“調試”、“符號”,選擇“Microsoft 符號服務器”復選框,然后選擇“確定”按鈕 。
-
在菜單欄上,從“調試” 或“工具” 菜單選擇“附加到進程” 。 (鍵盤:Ctrl+Alt+P)
這將顯示“進程” 對話框。
-
選擇“顯示所有用戶的進程”復選框 。
-
在“可用進程” 部分,為服務選擇進程,然后選擇“附加” 。
提示
該進程的名稱將與你的服務的可執行文件相同。
出現 “附加到進程” 對話框。
-
選擇相應的選項,然后選擇“確定” 以關閉對話框。
備注
你現在處於調試模式。
-
設置任意你想要在代碼中使用的斷點。
-
訪問服務控制管理器並操作你的服務,發送停止、暫停和繼續命令以命中你的斷點。 有關運行服務控制管理器的詳細信息,請參閱如何:啟動服務。 請參見疑難解答:調試 Windows 服務。
Windows 服務的調試提示
附加到服務的進程使你可調試該服務的大多數代碼,但不是全部。 例如,由於服務已經啟動,你無法調試服務的 OnStart 方法中的代碼或 Main
方法中用於在此處加載服務的代碼。 避免這種限制的一種方法是在你的僅用於輔助調試的服務應用程序中創建一個臨時輔助服務。 你可以安裝兩個服務,然后啟動該虛擬服務來加載服務進程。 臨時服務啟動進程后,可以使用 Visual Studio 中的 “調試”菜單來附加到服務進程。
嘗試添加對 Sleep 方法的調用延遲操作,直到你能夠附加到該進程。
嘗試更改常規控制台應用程序的程序。 為此,請按如下所示重寫 Main
方法,這樣它可以作為 Windows 服務和控制台應用程序運行,具體取決於啟動方式。
如何:將 Windows 服務作為控制台應用運行
-
向你運行 OnStart 和 OnStop 方法的服務添加一個方法:
C#internal void TestStartupAndStop(string[] args) { this.OnStart(args); Console.ReadLine(); this.OnStop(); }
-
按如下所示重寫
Main
方法:C#static void Main(string[] args) { if (Environment.UserInteractive) { MyNewService service1 = new MyNewService(args); service1.TestStartupAndStop(args); } else { // Put the body of your old Main method here. } }
-
在項目屬性的“應用程序” 選項卡中,將“輸出類型” 設置為“控制台應用程序” 。
-
選擇“啟動調試” (F5)。
-
若要將該程序再次作為 Windows 服務運行,請安裝它並像通常啟動 Windows 服務一樣啟動它。 不必恢復這些更改。
在某些情況下,你必須使用 Windows 調試器,比如當你想要調試僅在系統啟動時發生的問題時。 下載 Windows 驅動程序工具包 (WDK),並查看如何調試 Windows 服務。