【转】Windows服务调试技巧
關(guān)于調(diào)試windows service, 其實(shí)這是一個(gè)老生常談的問(wèn)題了.
通常的處理辦法是, 在service運(yùn)行后, 在調(diào)試器中選擇attach to process.
然而這種做法也有一定的局限性, 例如在service啟動(dòng)時(shí)的OnStart事件中的代碼, 基本上很難調(diào)試. 往往當(dāng)attach到我們的service的時(shí)候, 這部分代碼已經(jīng)執(zhí)行過(guò)了. 于是, 有人提出, 可以另寫一個(gè)project來(lái)調(diào)用這個(gè)OnStart方法, 或?qū)?/span>OnStart方法中的代碼搬到另一個(gè)project中測(cè)試. 不過(guò), 這些方法終究不是以windows服務(wù)的方式調(diào)試的, 不能夠最真實(shí)的反應(yīng)service運(yùn)行時(shí)的執(zhí)行狀況(如權(quán)限問(wèn)題等環(huán)境問(wèn)題).
我的做法是, 在OnStart方法的最開始部分加上"Debugger.Launch()"的調(diào)用, 當(dāng)service運(yùn)行到此處時(shí), 將會(huì)彈出一個(gè)選擇調(diào)試器的對(duì)話框, 同時(shí)暫停在當(dāng)前位置. 這樣, 我們就做到了在代碼中手動(dòng)的啟動(dòng)調(diào)試器.
示例代碼如下:
1 public partial class MyService : ServiceBase
2 {
3 public MyService()
4 {
5 InitializeComponent();
6 }
7 protected override void OnStart(string[] args)
8 {
9 #if DEBUG
10 Debugger.Launch(); //Launches and attaches a debugger to the process.
11 ? #endif
12 // TODO: add your initialize code here.
13 ? }
14 protected override void OnStop()
15 {
16 }
17 }
轉(zhuǎn)載于:https://www.cnblogs.com/fast-michael/archive/2011/05/26/2057949.html
總結(jié)
以上是生活随笔為你收集整理的【转】Windows服务调试技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 接视频Java 数据库
- 下一篇: oracle数据库实验讲义-读书笔记(一