2011-10-05 32 views
9

Tôi có một số mã trong ứng dụng ASP.NET của tôi trong C# đó là trong tệp mã Global.asax.cs. Trong Application_Start, Session_StartApplication_Begin Request Tôi đã đặt một số điểm ngắt. Tuy nhiên không ai trong số này là bao giờ trúng. Tôi đang làm việc trên máy địa phương của tôi với VS8.global.asax breakpoint không trúng

Đây là những gì tôi đã cố gắng:

  • Ngưng ASP Dev server
  • xóa tất cả các file Temporary ASP.NET
  • Tạo mới Global.asax
  • Đóng VS và mở cửa trở lại
  • Dự án làm sạch và xây dựng lại

Khi cố gắng của tôi sau này, các điểm ngắt sẽ không trúng.

Mọi ý tưởng tại sao điều này có thể là?

+0

tại sao bạn không cố gắng đưa một số System.Diagnostics.Debug.WriteLine (...); trong mỗi sự kiện đó và kiểm tra cửa sổ đầu ra trong khi chạy giải pháp từ Visual Studio? Bạn có thấy gì không? –

+2

Xem [câu trả lời này] (http://stackoverflow.com/questions/1960651/it-is-possible-to-debug-global-asax/4809464#4809464) - có trợ giúp trong trường hợp của bạn không? –

+0

Bạn có thể dán các khai báo thực tế của các phương thức này không? Có thể bạn đã tuyên bố chúng không chính xác. –

Trả lời

24

Tôi đã gặp phải sự cố tương tự này. Tôi giả sử bạn đang sử dụng IIS cục bộ của bạn thay vì máy chủ phát triển VS. Nếu đây là trường hợp, bạn sẽ không thể gỡ rối/Bước qua mã này trong tệp Global.asax.cs bởi vì vào thời điểm trình gỡ lỗi đã đính kèm, mã này đã được thực thi trong IIS. Tuy nhiên, nếu bạn sử dụng máy chủ Dev, bạn có khả năng truy cập vào mã này vì trình gỡ lỗi sẽ được đính kèm.

Vì vậy, hãy thay đổi máy chủ trong thuộc tính dự án của bạn để sử dụng Visual Studio Development Server.

Điều này có thể được tìm thấy bằng cách nhấp chuột phải vào dự án của bạn trong Visual Studio>Project Properties>Web tab>Use Visual Studio Development Server.

+0

Điều này làm việc tuyệt vời cho tôi. Nếu là câu trả lời được chấp nhận – Kevin

+4

Trong VS 2013 Visual Studio Development Server bị thiếu, câu trả lời @Ofiris không giúp được lỗi –

4

gì đã giúp tôi đã thêm:

System.Diagnostics.Debugger.Break(); với phương pháp Application_Start().

+0

Có lỗi AppPool. – QMaster

2

Trên một dự án tôi đang làm việc trên, "Start chương trình bên ngoài" tùy chọn được chọn trong tab:

Visual Studio> Project Properties> Web

này đã gây ra breakpoint để không bị đánh trúng.

Thay đổi "Bắt đầu tác vụ" thành "Trang hiện tại" đã khắc phục sự cố này cho tôi.

0

Khi được đo trong câu trả lời khác, mã Global.asax sẽ chạy trước khi trình gỡ lỗi có cơ hội đính kèm. Để có được xung quanh mà bạn có thể bắt đầu gỡ lỗi, sau đó đi vào IIS và Stop/Bắt đầu ứng dụng mà sau đó sẽ có trình gỡ rối nhận khởi động lại.

0

Tôi gặp sự cố này hai lần. Dự án đầu tiên này đã xảy ra với tôi, tôi đã đi đến Project Properties-> Build-> Advanced ... và chọn "full" từ menu thả xuống Debug Info.

Lần thứ hai, các điểm ngắt trong global.asax của chúng tôi, chúng tôi không bị tấn công nhưng nó đã đưa ra cảnh báo này nếu tôi di chuột qua điểm ngắt: "Mã nguồn khác với phiên bản gốc."

Cuối cùng tôi đã tìm ra rằng trong trường hợp này, tôi đã tạo một bản sao dự phòng của dự án này để bảo toàn mã và đang làm việc với bản sao. Mặc dù nó nằm trong một thư mục khác, nó vẫn đang sử dụng dll cho thư mục ảo của bản gốc: http://localhost:4952/

Vì vậy, tôi đã thay đổi trong dự án Properties-> Web-> Project URL tôi chỉ cần thay đổi các cổng để http://localhost:49523/ và nó làm việc

nó nhắc tôi để tạo ra các thư mục ảo.. , Tôi nói có và không có bất kỳ vấn đề nào với điểm ngắt kể từ đó.

1

Nếu y Bạn không muốn sử dụng Visual Studio Development Server và sử dụng IIS, bạn có thể làm như sau (được thử nghiệm trong VS2015 Professional)

1) Hồ bơi ứng dụng ở trạng thái đang chạy - đảm bảo sử dụng Hồ bơi ứng dụng đang chạy một trang từ ứng dụng web của bạn (nó có thể bị ngừng do một thời gian chờ nhàn rỗi).

2) Đính kèm vào quá trình - Ctrl-Alt-P hoặc Debug -> Attach to Process -> tra cứu quy trình w3wp tương ứng với đơn đăng ký của bạn.

Đính kèm quy trình có thể tăng tốc đáng kể bằng cách sử dụng ReAttach extension tạo lối tắt cho các quy trình được đính kèm gần đây.

3) Tái sử dụng hồ bơi - đảm bảo rằng hồ bơi ứng dụng tái chế bằng cách nhập IIS và tái chế nó hoặc thậm chí nhanh hơn, bằng cách nhập web.config, thực hiện thay đổi không có hiệu lực (đặt một số trống bên ngoài thẻ) và lưu nó

4) Bắt đầu gỡ lỗi - Thực hiện yêu cầu đến bất kỳ trang nào từ ứng dụng web của bạn để bắt đầu khởi động. Bạn sẽ có thể đặt và nhấn breakpoint từ bất kỳ phương pháp khởi động trong Global.asax

protected void Application_Start() 
void Application_BeginRequest(Object sender, EventArgs e) 
protected void Session_Start(object sender, EventArgs e) 
+0

Không hoàn hảo nhưng hữu ích: nhập web.config, thực hiện thay đổi không có hiệu lực (đặt một số trống bên ngoài thẻ) và lưu nó. Xứng đáng +1 :) – QMaster

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