2012-09-05 36 views
20

Visual Studio 2010 SP1, ứng dụng WCF đã biên soạn, đặt nó trên máy chủ và tất nhiên nó gặp lỗi trong lần chạy đầu tiên (có gì mới), đã xuất ra Stack Trace để ghi nhật ký tệp.Tại sao Dấu vết ngăn xếp hiển thị đường dẫn tệp phát triển của tôi?

Đó là đường dẫn đến môi trường phát triển của tôi. Tại sao? Có phải vì tôi đã triển khai nó như là Debug so với Release hay là có cái gì khác, hoặc tôi sẽ cẩn thận hơn về việc xuất ra Stack Traces bất kể?

04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.Logging.LogMessageToFile(String msg, Boolean isUsingClickOnceApp) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\Logging.cs:line 63 
    at App1.App1Main.ConnectWebService(String description) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\International.cs:line 40 
04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.App1Main.UpdateActivityLog(String data, String userName, Boolean deleteData, Int64 firstId, Int64 lastId, String changeType) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\App1Main.cs:line 641 

Cảm ơn, -rob

+1

"Có phải vì tôi đã triển khai nó dưới dạng Debug" –

+0

như Amiram đã nói, bạn đang thấy đường dẫn gỡ lỗi vì nó được biên dịch trong gỡ lỗi ... – Chris

+1

có thể trùng lặp của [Đường dẫn bảo quản thông tin Stacktrace của nguồn gốc] (http://stackoverflow.com/questions/388470/stacktrace-information-preserving-paths-of-original-source) – Cocowalla

Trả lời

38

Đó là vì bạn đã sao chép tệp .pdb cũng như tệp thi hành. CLR sẽ tìm kiếm chúng khi nó tạo ra một dấu vết ngăn xếp để cố gắng cung cấp càng nhiều thông tin càng tốt về các khung ngăn xếp trong dấu vết. .pdb lưu trữ tên tệp và số dòng.

Bạn có nghĩa vụ triển khai Bản dựng mã của bạn. Điều đó cho phép tối ưu hóa có thể làm cho mã của bạn chạy nhanh hơn rất nhiều. Bạn vẫn có thể sao chép các tệp .pdb cho bản dựng đó, chúng thường có thông tin gỡ lỗi bị tước. Project + Properties, chuyển sang cài đặt Release build, Build, Advanced, "Debug Info". Cài đặt bình thường ở đây cho bản phát hành bản phát hành là "pdb-only" thay vì "full". Điều này ngụ ý rằng tệp nguồn và số dòng không được bao gồm. Điều này có ý nghĩa, các dấu vết ngăn xếp có xu hướng không đáng tin cậy một chút sau khi jitter đã tối ưu hóa mã.

+0

@Cocowalla - cả hai câu trả lời tuyệt vời. Cảm ơn các bạn vì đã giải thích chi tiết. Tôi nhận ra rằng tôi phải sử dụng bản phát hành Bản phát hành nhưng nếu bạn không sử dụng TFS hoặc vòng đời phát triển nhất định, bạn có thể quên thực tế nhỏ đó. ;-) –

3

Nó là bình thường đối với các đường dẫn tập tin nguồn gốc phải được lưu trữ trong PDB (program database) tập tin khi triển khai trong chế độ gỡ lỗi.

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