2010-03-09 225 views
1

我有一個Windows服務,我想看看它在啓動時的功能。通常要完成這樣的事情,我會將Thread.Sleep硬編碼爲10秒,以便給我足夠的時間來連接調試器。這是有效的,但是很煩人,因爲我需要重新編譯一次,以便當我(希望記住)停下來時再次停頓。我知道我可以替代硬編碼中斷命令,但這也需要我重新編譯我的解決方案。我可以預先將調試器附加到服務上嗎?

我知道我也可以將我的服務的邏輯分成一個單獨的項目,可以在Visual Studio中運行,我可以在大多數情況下使用它,但有時候我希望看到我的服務在運行時的確切功能,一項服務。

有沒有一種方法可以讓我的調試器連接到我的服務,以便我可以在啓動時看到它正在執行的操作,而無需編寫任何硬編碼和重新編譯任何東西?

回答

2

有這給你一個機會,一個調試器,一旦它被創建附加到該進程的註冊表鍵值。

保存下面的代碼段爲* .reg文件,並導入到註冊表:

Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\services.exe] 
"Debugger"="c:\\Program Files\\Debugging Tool For Windows\\windbg.exe" 

記得改「Services.exe的」實際服務的可執行文件名。

您也可以使用gflag工具來促進工作。詳細信息請查詢KB 824344: How to debug Windows services

0

查看附加到Visual Studio中工具菜單上的過程。您可以在代碼中放置一個斷點,然後啓動該流程並調試該服務。你可能不得不放置一個thread.sleep()來給你足夠的時間做出反應。

您必須啓動服務,而不是附加到Visual Studio中的進程。 thread.sleep()會給你時間來執行附加操作,而不會受到啓動代碼的影響。

相關問題