2009-01-29 26 views
7

Khi ngoại lệ được ném vào trang web Asp.Net, thông báo lỗi được hiển thị với dấu vết ngăn xếp hoàn chỉnh.Thông báo lỗi ngoại lệ với số dòng không chính xác

Ví dụ dưới đây:

Stack Trace:
IndexOutOfRangeException: Index lại vượt ra ngoài giới hạn của mảng.

MyNameSpace.SPAPP.ViewDetailsCodeBehind.LoadView() 5112 MyNameSpace.SPAPP.ViewDetailsCodeBehind.Page_Load (Object sender, EventArgs e) 67
System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Object o , Object t, EventArgs e) 13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback (Object sender, EventArgs e) +43
System.Web.UI.Control.OnLoad (EventArgs e) 98
.. . ...

Vấn đề là số hiệu của tuyến đường yed không tương ứng với dòng trong mã của tôi có nguồn gốc ngoại lệ.
Trong ví dụ trên, ngăn xếp hiển thị số dòng 5111, nhưng mã của tôi phía sau tệp .cs chỉ có 250 dòng!

Trang aspx được lưu trữ trong trang SharePoint và Assembly với mã phía sau đã được triển khai cho GAC. Ngoài ra, tôi đã biên dịch trong chế độ Debug.

Với các cài đặt ở trên, làm cách nào tôi có thể tìm ra dòng nào trong mã của tôi đã gây ra Ngoại lệ?



Làm rõ như chỉ ra bởi strelokstrelok:

Trong chế độ Release số ở phía trước của ngoại lệ là KHÔNG dòng mã. Thay vào đó nó là một bù đắp cho mã được biên dịch tự nhiên, không có bất kỳ ý nghĩa nào đối với con người. Thông tin thêm về điều này tại đây: http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx

Trong chế độ gỡ lỗi tệp PDB sẽ tự động ánh xạ mã gốc vào dòng .cs của bạn và mã được hiển thị SILL là dòng tương ứng trong mã.

+1

..tất nhiên khi nó là một số dòng nó nói rõ ràng như vậy: ..... \ Areas \ Store \ Models \ CheckoutModel.cs: dòng 158 –

Trả lời

10

Những số này KHÔNG phải là số dòng. Trong chế độ Phát hành, dấu vết ngăn xếp chứa các offset vào mã được biên dịch gốc thay vì số dòng. Bạn có thể đọc thêm một số thông tin tại đây: http://odetocode.com/Blogs/scott/archive/2005/01/24/963.aspx

Cách duy nhất để nhận số dòng trong ngăn xếp ngăn xếp là nếu bạn đã xây dựng mã ở chế độ gỡ lỗi với các tệp PDB có sẵn.

4

Mã của bạn phía sau tệp không phải là lớp hoàn chỉnh, nó chỉ là một phần được sử dụng khi toàn bộ lớp được biên soạn bởi ASP.NET. Để tìm những gì thực sự trên dòng đó, hãy xem lớp/assembly đã biên dịch bằng cách sử dụng một công cụ như Reflector.

+0

Tôi có thể sai ở đây nhưng AFAIK, trong ASP.Net ngăn xếp luôn mang đến cho bạn dòng chính xác, tuy nhiên, trong Asp.Net + SharePoint này dường như không phải là trường hợp. Dù sao, tôi sử dụng red-gate .Net phản xạ nhưng tôi không thể tìm thấy bất cứ điều gì mà có thể giúp tôi xác định dòng mã gây ra ngoại lệ. –

+0

Điều này không đúng. Những con số này KHÔNG phải là số dòng và thậm chí không nằm ngoài IL. – Strelok

1

Có thể mã đang chạy không phải là những gì bạn thấy trên màn hình của mình. Một số bạn đời có thể đã tái cấu trúc nó cho bạn. :)

+0

nhớ lấy mã mới nhất từ ​​điều khiển nguồn nếu bạn đang ở trong môi trường nhóm +1 – Dean

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