2010-02-09 33 views
8

Được rồi; giả sử mã này đang chạy trong chế độ gỡ lỗi -Tại sao tôi không nhận được số dòng từ ngăn xếp ngăn xếp được tạo từ Ngoại lệ?

static StackFrame GetTopFrameWithLineNumber(Exception e) 
{ 
    StackTrace trace = new StackTrace(e); 
    foreach (StackFrame frame in trace.GetFrames()) 
    { 
     if (frame.GetFileLineNumber() != 0) 
     { 
      return frame; 
     } 
    } 
    return null; 
} 

Tôi luôn luôn trả về giá trị rỗng. Tại sao các khung ngăn xếp không có số dòng khi tôi kiểm tra chuỗi Exception.StackTrace, nó rõ ràng có chúng cho bất kỳ mã không phải khung không? Có một số vấn đề với việc xây dựng một dấu vết stack từ một ngoại lệ mà tôi không biết?

CHỈNH SỬA CHO CLARITY: Trong trường hợp ngoại lệ được ném, tôi có thể thấy số dòng trong thuộc tính StackTrace. Tôi cho rằng điều đó có nghĩa là tôi có mọi thứ khác mà tôi cần.

Trả lời

16

Theo số documentation on the StackTrace constructor overload that takes an exception bạn không thể mong đợi số dòng khi tạo StackTrace theo cách đó.

Các StackTrace được tạo ra với chủ đề hiện hành người gọi, và không chứa tên file, số dòng, hoặc các thông tin cột .

Để nhận số dòng, bạn cần sử dụng the overload that takes a bool as well as the exception.

Bạn cũng cần tệp biểu tượng (pdb) cho số dòng. Tệp biểu tượng có sẵn cho cả hai gỡ lỗi và phát hành bản dựng.

+0

Vì tôi có thể thấy các số dòng trong chuỗi exception.stacktrace mặc dù không có nghĩa là tôi có pdb? – Stimul8d

+0

Tôi không nghĩ đây là trường hợp thiếu pdb vì anh ta có thể thấy số dòng. –

+0

ahh, do đó, nó có; gọi tốt. – Stimul8d

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