除非知道程序是什麼,並且知道附加到程序或可能取消程序所帶來的後果,否則不要附加到程序。例如,如果附加到 winlogon 程序,然後停止除錯,系統就會暫停,因為沒有 winlogon,系統無法執行。
只能將偵錯程式附加到正在執行的服務。附加程序會中斷服務的當前執行;它並不真正終止或暫停服務的處理。也就是說,如果開始除錯時服務正在執行,則在進行除錯時,該服務從技術上說仍處於「已啟動」狀態,但它的處理已掛起。
附加到服務的程序使您能夠除錯大多數服務**,但並非全部;例如,由於服務已經啟動,因此不能用這種方法除錯服務的 onstart 方法中的**,或除錯用於載入服務的 main 方法中的**。解決此問題的乙個方法是:在唯一作用是幫助除錯的服務應用程式中建立乙個臨時服務。可以將兩個服務都安裝上,然後啟動此「虛擬」服務載入服務程序。臨時服務啟動了程序後,就可以使用 visual studio 中的「除錯」選單來附加到服務程序。
當附加該程序之後,可以設定斷點並使用這些斷點來除錯**。當退出用於附加到該程序的對話方塊時,實際上已處於除錯模式。您可以使用「服務控制管理器」開始、停止、暫停和繼續您的服務,因此命中已設定的斷點。除錯成功後,移除此「虛擬」服務。
除錯onstart方法可能比較困難,因為 windows 服務管理器將所有嘗試啟動服務的時間限制在 30 秒內。有關更多資訊,請參見疑難解答:除錯 windows 服務。
安裝您的服務。有關更多資訊,請參見如何:安裝和解除安裝服務。
可從「服務控制管理器」、「伺服器資源管理器」或**啟動服務。有關更多資訊,請參見如何:啟動服務。
在 visual studio 中,從「除錯」選單中選擇「程序」。
即會出現「程序」對話方塊。
單擊「顯示系統程序」。
在「可用程序」區域內單擊服務的程序,然後單擊「附加」。
該程序將與服務的可執行檔案同名。
出現「附加到程序」對話方塊。
選擇任意適當的選項,然後單擊「確定」關閉對話方塊。
現在您處於除錯模式。
設定要在**中使用的任意斷點。
訪問「服務控制管理器」並操縱您的服務,並傳送停止、暫停和繼續命令以命中您的斷點。有關執行「服務控制管理器」的更多資訊,請參見如何:啟動服務。
Windows服務程式的除錯
摘自 msdn 1.由於服務必須從服務控制管理器的上下文中執行,而不是從 visual studio 中執行,因此除錯服務不像除錯其他 visual studio 應用程式型別那樣簡單。若要除錯服務,必須首先啟動服務,然後將乙個偵錯程式附加到正在執行服務的程序中 attachtoprocess 附加...
Windows服務除錯小結(附Demo)
有時候不可避免的要建些windows服務。既然寫 就需要除錯,由於這個東西搞的人不多,每個人除錯的方法也不全,所以在下在這裡小結一下除錯方法。一 建立乙個window service 檔案 新建專案 windows 服務。然後我們直接執行試試,然後提示如下 這樣我們的環境就基本搭建好了,然後就是服務...
Windows服務除錯小結(附Demo)
有時候不可避免的要建些windows服務。既然寫 就需要除錯,由於這個東西搞的人不多,每個人除錯的方法也不全,所以在下在這裡小結一下除錯方法。一 建立乙個window service 檔案 新建專案 windows 服務。然後我們直接執行試試,然後提示如下 這樣我們的環境就基本搭建好了,然後就是服務...