日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows服务程序的调试

發布時間:2024/4/17 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows服务程序的调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘自:MSDN

??? 1.由于服務必須從服務控制管理器的上下文中運行,而不是從 Visual Studio 中運行,因此調試服務不像調試其他 Visual Studio 應用程序類型那樣簡單。若要調試服務,必須首先啟動服務,然后將一個調試器附加到正在運行服務的進程中(AttachToProcess)。

???? 附加到服務的進程使您能夠調試大多數服務代碼,但并非全部;例如,由于服務已經啟動,因此不能用這種方法調試服務的 OnStart 方法中的代碼,或調試用于加載服務的 Main 方法中的代碼。(不斷循環的那塊代碼當然可以調試,只是不能調試初始化 服務運行環境的 線程的代碼,和服務線程中初始化部分代碼(初始化代碼往往比較短,當然這里可以設置sleep實現增加執行時間的目的); )

?? 2.解決此問題的一個方法是:在唯一作用是幫助調試的服務應用程序中創建一個臨時服務??梢詫蓚€服務都安裝上,然后啟動此“虛擬”服務加載服務進程。臨時服務啟動了進程后,就可以使用 Visual Studio 中的“調試”菜單來附加到服務進程。當附加該進程之后,可以設置斷點并使用這些斷點來調試代碼。當退出用于附加到該進程的對話框時,實際上已處于調試模式。您可以使用“服務控制管理器”開始、停止、暫停和繼續您的服務,因此命中已設置的斷點。調試成功后,移除此“虛擬”服務。 (剛開始看的時間一直沒看明白,現在初步理解了,就是在一個Solution里面創建再創建一個臨時服務項目,將這個項目與要調試的項目一同編譯安裝到系統服務中(此時有了連個服務A和B),然后先啟動臨時服務A,并附加到該服務A的進程,此時VS整個Solution進入調試狀態了,這就是臨時服務的目的了.現在狀態下其實VS不僅在監視著服務A進程,而且在此時啟動服務B的進程的話VS也會自動地附加上,因此我們可以自由地在任何地方設置斷點了,哈哈 ;其實并非一定要是個臨時服務項目,只要是個不停執行不會自動結束的項目應該都是可以的,目的就是讓VS進入Debug狀態,能夠自動附加上進程B就可以了 )

??? 3.DbgBreakPoint 或者 DebugBreak(在x86機器上加入一條int 3匯編指令)(相當于在編譯后的程序中增加了調試異常,在程序到達斷點時會自動跳出即時調試窗口,和普通程序出錯時的窗口相似,只要選擇調試并選擇打開了源碼VS進行調試即可,有點像以前開發JS及動態網站用的調試方法,本人認為這種方法最簡單可行了,推薦一下 )

?? 注意了:調試 OnStart 方法可能比較困難,因為 Windows 服務管理器將所有嘗試啟動服務的時間限制在 30 秒內。(這點是Windows固定的時間,估計應該有地方能夠修改該限制,不過本人沒有找到,有同學找到了告訴俺哈,:-),現在我們做的最好是把初始化服務運行環境的代碼盡可能簡化,把與服務實際相關的信息初始化,放在服務主函數中執行好了 .否則那你只會有30秒鐘時間看前面代碼的運行了,如果有自信那么快完成調試的話也可以寫前面了,本人能力是不是很足了,囧 )

轉載于:https://www.cnblogs.com/dongzhiquan/archive/2010/07/30/1994584.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Windows服务程序的调试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。