Thứ Năm, 18 tháng 9, 2008

Debug Window Service với .Net 2005

Theo chỉ thị của "cấp trên", hổm rày mày mò ngồi tìm hiểu "Làm sao để debug được service trong VS .Net 2005 ta?". Tới bi giờ có thể nhẹ nhõm báo cáo "sếp" biết rùi!!(mừng húm hi hi). Dưới đây mình sẽ tóm tắt vài bước chấp vá các mảnh:

Điều kiện:
- Môi trường VS .Net 2005 professional edition (bản express ko có cho dính dáng gì đến services cả -> rầu)
- Mặc định là đã có một service với tên là MyDemoService: (Tạo một service như thế nào?)
  1. file name : MyDemoService.cs
  2. class name: MyDemoService
và project đang được mở bằng VS .Net 2005 professional edition (hoặc phiên bản cao hơn)
- Mặc định là build service không lỗi, install service thành công vào hệ thống.

Step 1: Kiểm tra configuration mode của solution phải ở chế độ "Debug". Để thay đổi, bạn chọn menu Build -> Configuration Manager.. tại combobox "Active solution configuration" bạn chọn "Debug" -> Close.
- Tại đây, bạn đã có thể nhấn F5 để chạy Debug thử, bạn vẫn có thể đặt breakpoin ở bất cứ đâu, nhưng VS sẽ chỉ cho phép debug trong phạm vi hàm "Main()" trong file Program.cs thôi. Nếu vẫn cố gắng F5, bạn sẽ nhận được thông báo lỗi:

Step2: Nào ta cùng bắt tay vào công việc chính
- Mở file Program.cs, trong hàm static void Main(..), bạn thêm các dòng code sau:
ServicesToRun = new ServiceBase[] { new Service1() }; #if(DEBUG) System.Diagnostics.Debugger.Launch();
//.. code and code
#endif
ServiceBase.Run(ServicesToRun);
Step3: Build serivce lại, uninstall phiên bản cũ và install service lại.
Đặt breakpoint ở bất cứ đâu bạn muốn, miễn là còn trong vùng code của project.
Step4: Start service của bạn trong của sổ services manager hoặc bằng command. Khi service khởi động, bạn sẽ nhận được một bảng thông báo như sau:

tiếp tục chọn tên service của bạn (1) và nhấn Yes.
!!Oho!!Điều kỳ diệu đã xảy ra, nếu bạn thấy kết quả tương tự như hình sau:

thì bạn đã thành công và tiếp tục nhấn F5 để đến những breakpoint đã đặt trước.

Lưu ý: chỉ có các breakpoint được đặt ở những vị trí code phía sau dòng lệnh "System.Diagnostics.Debugger.Launch();" khả dụng.

Vài ghi chú đầu tiên, chưa có chỉnh sửa hoa mỹ, mong các bạn đọc thông cảm ủng hộ.

Another way: Debug a running process.. (coming soon)

1 nhận xét:

  1. chán "sếp" quá, topic cho "sếp" mà "sếp" ko comment tiếng nào!!

    Trả lờiXóa