2009-03-10 13 views
119

Có cách nào để hiển thị các đường trong dấu vết ngăn xếp cho .NET assembly build/deploy trong chế độ Release không?Hiển thị số dòng trong Stack Trace để lắp ráp .NET ở chế độ Release

UPDATE:

Ứng dụng của tôi được chia thành ba dự án thư viện lớp và một dự án "trang web" ASP.NET. Lỗi tôi đang cố gắng theo dõi là một trong ba dự án thư viện lớp. Tôi chỉ triển khai tệp pdb cho dự án thư viện lớp đang tạo lỗi "Tham chiếu đối tượng không được đặt thành một thể hiện của một đối tượng".

Số dòng vẫn không hiển thị trong theo dõi ngăn xếp. Tôi có cần triển khai các tệp pdb cho tất cả các dự án để lấy số dòng trong ngăn xếp ngăn xếp không?

giải pháp làm việc

Triển khai tập tin pdb cho mỗi ứng dụng khắc phục sự cố số dòng.

Trả lời

119
  • Đi vào cửa sổ Thuộc tính cho dự án nơi bạn muốn xem số dòng theo dõi ngăn xếp.
  • Nhấp vào tab "Xây dựng dọc".
  • Chọn cấu hình "Phát hành". Kiểm tra tham số hằng số DEBUG.
  • Bỏ chọn tham số "Tối ưu hóa mã" để tránh vấn đề theo dõi không thường xuyên với mã nội tuyến (bước này không cần thiết).
  • Nhấn nút Nâng cao ... và chọn Đầu ra -> Thông tin gỡ lỗi -> chỉ pdb.
  • Triển khai tệp .pdb được tạo bằng assembly.

thực hiện với những nhận xét dưới đây:

  • Một điều khác để kiểm tra là trong "Gói/Xuất bản Web" phần đó "Loại trừ những biểu tượng debug tạo" hộp kiểm cũng được đánh dấu
+2

Tôi có phải triển khai tệp pdb cùng với assembly không? –

+7

Có. Đó là nơi các biểu tượng gỡ lỗi và số dòng đang ở. –

+4

Bạn có thể không muốn tiết lộ thông tin này nếu bạn không phải làm như vậy. Sử dụng nó để gỡ rối một vấn đề của khách hàng, vâng. Nhưng bạn không phải lúc nào cũng muốn làm điều đó vì thông tin gỡ lỗi có thể cung cấp dữ liệu nhạy cảm và là một vectơ tấn công. Tùy thuộc vào ứng dụng của bạn. –

3

Bao gồm các biểu tượng gỡ lỗi với gói xây dựng/triển khai của bạn.

1

Trong VS 2008 Express, tôi tìm thấy nó trong Project Properties -> Compile -> Advanced Compile Options.

+0

Bạn tìm thấy gì? Bạn có thể đăng bình luận nếu bạn không muốn đăng câu trả lời hoàn chỉnh. – jumxozizi

7

tôi đã chạy vào vấn đề trong quá khứ, nơi tôi cảm thấy cần phải triển khai các file PDB với một thông cáo xây dựng để theo dõi xuống một lỗi. Lý do là, như bạn đã nói, là ngoại lệ xảy ra trong một phương pháp rất lớn và tôi không thể xác định chính xác nơi nó đang xảy ra.

Đây có thể là dấu hiệu cho thấy phương pháp cần được cấu trúc lại thành các phương thức nhỏ hơn, chi tiết hơn. Không phải là một kích thước phù hợp với tất cả các câu trả lời, nhưng cách tiếp cận này đã phục vụ tôi tốt trong ngắn hạn (tôi thường tìm thấy lỗi trong quá trình tái cấu trúc) và về lâu dài.

Chỉ là một ý nghĩ.

+0

Điều này. Và như bạn đi, ném thử bắt ở những nơi nhiều sơ sài ở một hạt mịn hơn. Và tăng vệ sĩ khi bắt đầu các chức năng này nếu giả định phải được thực hiện. –

+0

Thường nói và rất đúng, tuy nhiên, có di sản, có những lập trình viên viết các phương pháp mới lớn, và đôi khi một phương pháp lớn thực sự là điều tốt nhất để làm (tách nó là khó hiểu hoặc YAGNI). Ngoài ra, ngay cả đối với phương pháp 5 dòng - bạn thu hẹp tìm kiếm 5x - do đó PDBs là một điều cần thiết trong sản xuất trừ khi bạn sử dụng máy chủ biểu tượng – FastAl

15

Trong VS2012, bạn cần phải bỏ chọn "Loại trừ các biểu tượng gỡ lỗi được tạo" trong phần Gói/Xuất bản của thuộc tính.

-3

Tính năng này hoạt động mọi lúc. Bạn chỉ cần xâu chuỗi tin nhắn theo dõi ngăn xếp. Thật dễ dàng! Ngoài ra, trong vb.net bạn cần phải thực hiện "Hiển thị tất cả các tệp" và bao gồm pdb.

'Err is the exception passed to this function 

Dim lineGrab As String = err.StackTrace.Substring(err.StackTrace.Length - 5) 
Dim i As Integer = 0 
While i < lineGrab.Length     
    If (IsNumeric(lineGrab(i))) Then 
     lineNo.Append(lineGrab(i)) 
    End If 
    i += 1 
End While 

'LineNo holds the number as a string 

C# phiên bản:

string lineGrab = error.StackTrace.Substring(error.StackTrace.Length - 5); 

int i = 0; 
int value; 
while (i < lineGrab.Length) 
{ 
    if (int.TryParse(lineGrab[i].ToString(), out value)) 
    { 
     strLineNo.Append(lineGrab[i]); 
    } 
    i++; 
} 
+0

Yeah không định dạng thực sự đẹp .. xin lỗi về điều đó –

-2

try { // your method } catch (Exception ex) { // log-> ex.ToString(); // it will give you whole exception including line number and
// file name }
Cộng Bao gồm tập tin PDB (từ thư mục bin) trong triển khai để có được toàn bộ ngoại lệ khác khôn ngoan nó sẽ chỉ hiển thị tên phương pháp nơi ngoại lệ xảy ra.