2009-12-25 44 views
45

Tôi không thể gỡ lỗi tệp global.asax!Có thể gỡ lỗi Global.asax không?

Tôi có một số mã trong phương thức Application_Start() nhưng khi tôi đặt điểm ngắt trong phương thức, nó bị bỏ qua!

Điều này có bình thường không?

Trả lời

5

Có lẽ bạn nên thử:

  • dừng máy chủ phát triển trong thanh tác vụ
  • chuyển đổi cấu hình từ bản phát hành để gỡ lỗi
+5

Rất tiếc là điều này đã được đánh dấu là câu trả lời chưa có xếp hạng -2 ... –

+0

Nó có xếp hạng âm vì nó sai. Bạn cần phải sửa lỗi (nếu không bạn không có tệp pdb) và bạn cần phải nắm bắt máy chủ khi nó bắt đầu (vì đây là khi mã đó được chạy) nhưng bạn sẽ không thể để đính kèm vào quy trình. Bạn cần một tiến trình đang chạy để đính kèm trình gỡ rối, mã global.asax được chạy trong vài miliseconds đầu tiên của quá trình này bắt đầu vì vậy nó không thể (không sử dụng [câu trả lời đúng dưới đây] (https://stackoverflow.com/a/ 4809464/542251)) để đính kèm vào quá trình khi nó chạy mã này – Liam

5

Có, điều đó là bình thường.

Application_Start() được xử lý bởi IIS.

Nhưng tất cả các phương pháp khác, ví dụ Session_Start và tất cả các phương pháp khác, ngoại trừ Application_Start() có thể được gỡ lỗi bình thường.

9

Application_Start() được gọi một lần cho mỗi AppDomain. Nếu bạn không chạm vào điểm ngắt, điều đó có nghĩa là AppDomain đã được tạo, hãy thực hiện như sau:

  • Trong thanh khởi động nhanh, có biểu tượng cho máy chủ web VS "Máy chủ cục bộ một số cổng"). Nhấp chuột phải và chọn "Dừng" hoặc "Đóng". Điều này sẽ giết AppDomain.
    • Nếu bạn đang sử dụng IIS, bạn cần phải khởi động lại trang web theo cách thủ công.
    • Ngoài ra, việc sửa đổi cấu hình web hoặc tệp Global.asax thường đủ để khởi động lại AppDomain.
  • Khởi động lại quá trình gỡ lỗi, bạn nên nhấn điểm ngắt của mình ngay bây giờ.
7

Kiểm tra xem ứng dụng web của bạn đang ở chế độ debug (<compilation debug="true"> trong web.config).

Nếu bạn đang sử dụng IIS của nhà phát triển bắt đầu bằng VS, chỉ cần khởi động lại hoặc xây dựng lại ứng dụng.

Nếu bạn đang ở trên IIS bình thường bạn có hai lựa chọn:

  1. Đối với trang web được cấu hình để làm việc với thư mục phát triển (nơi bạn VS dự án web được triển khai), bạn chỉ cần khởi động lại ứng dụng hồ bơi bộ cho trang web đó và bắt đầu gỡ lỗi trước khi yêu cầu đầu tiên đến máy chủ (bạn luôn có thể khởi động lại ứng dụng trong khi gỡ lỗi).
  2. Đối với trang web hoạt động trên một thư mục khác hoặc thậm chí trên máy chủ từ xa bạn phải đính kèm vào quy trình. Để thực hiện điều này, bạn cần trình gỡ rối từ xa được cài đặt trên máy từ xa hoặc của riêng bạn (phụ thuộc vào vị trí máy chủ web) và sử dụng menu Debug - Attach to process, nhập tên máy tính và sau đó chọn một quy trình để gỡ lỗi. Nó thường là một w3wp.exe làm việc trong kiểu chế độ quản lý.
+0

cảm ơn bạn đã trả lời. tôi sử dụng IIS qua VS. – mahdiahmadirad

82

Cách đơn giản để đột nhập trong Application_Start() là sử dụng lớp System.Diagnostics.Debugger. Bạn có thể buộc ứng dụng phá vỡ bằng cách chèn System.Diagnostics.Debugger.Break() nơi bạn muốn trình gỡ lỗi phá vỡ.

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Break(); 

    // ... 
} 
2

Xóa global.asax và thêm mã mới. Trong giải pháp của tôi, đã có global.asaxglobal.asax.cs.

Tất cả các phương pháp (Session_Start, Application_Start, ...) đã có trong tệp bot, nhưng chỉ những tệp trong số global.asax mới được xem xét. Vì vậy, phá vỡ các điểm và mã trong cs không làm bất cứ điều gì.
Chỉ sau khi tạo lại tệp, global.asax.cs có các phương thức thích hợp và chúng chạy.

+0

Tôi đã làm theo hướng dẫn tại đây: http://rossnelson.blogspot.ca/2005/11/fixing-globalasax-in-aspnet-20.html. Về cơ bản, xóa global.asax và thêm một lớp ứng dụng toàn cầu tạo lại dấu phẩy với một mã phía sau tệp mà sau đó tôi có thể bước vào. Tôi đang chạy trên IIS và nó hoạt động tốt. – cbeuker

53
  1. Đính kèm trình gỡ lỗi vào quá trình IIS.
  2. Mở tệp global.asax và đặt vào điểm ngắt.
  3. Thêm dấu cách vào tệp web.config và lưu tệp (điều này khiến ứng dụng web hiện tại đặt lại);
  4. Làm mới/goto một trang web trên trang web.
  5. xem trong sự ngạc nhiên khi trình gỡ lỗi dừng tại điểm ngắt của bạn. :)
+1

Điều này còn được gọi là 'Chạm vào web.config' và có thể được sử dụng cho một số trường hợp khi bạn cần làm mới trang web của mình mà không cần chạm vào IIS. Không thể tin rằng nó không xảy ra với tôi. Cảm ơn. – HockeyJ

+0

Tôi ước điều đó thật đơn giản. Nhưng đối với tôi? "máy tính nói không" – Justin

3

Một lựa chọn khác để chấp nhận System.Diagnostics.Debugger.Break(); sẽ

void Application_Start(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debugger.Launch(); 
    //... 
} 

mà không nên phá vỡ các mã và nên bắt đầu gỡ rối ngay cả khi dịch vụ đã được bắt đầu với các quyền khác nhau.

+0

này là tốt đẹp tôi đã cố gắng và nó đã làm việc cho tôi cũng ... cảm ơn –

0

Đừng mong đợi hàm Application_Start() sẽ được gọi ngay lập tức bằng cách nhấn f5. Application_Start() chỉ được gọi vào thời điểm yêu cầu đầu tiên của ứng dụng được thực hiện. Lạ nhưng đúng.

0

Trong trường hợp tất cả các câu trả lời không làm việc, hãy thử:

<compilation debug="true" ... /> 

trong web.config. ;)

Các vấn đề liên quan