2009-09-14 20 views
7

Đôi khi chúng tôi nhận được dấu vết ngăn xếp từ khách hàng của chúng tôi với số dòng sai. Nó xảy ra không thường xuyên như vậy, nhưng đôi khi nó giải đố chúng ta.Số dòng sai trong dấu vết ngăn xếp (bản phát hành)

Khách hàng có bản phát hành có tối ưu hóa và có thông tin gỡ lỗi "pdb only".

Và có, chúng tôi so sánh số dòng với chính xác cùng một phiên bản mã mà khách hàng có.

Và có, khách hàng có tệp pdb phù hợp.

Và không, sự khác biệt này trong số dòng không thể giải thích được bằng phương pháp nội tuyến (tối ưu hóa trình biên dịch).

Và không, chúng tôi không sử dụng bất kỳ công cụ AOP nào, như PostSharp.

Mọi ý tưởng tại sao điều đó lại xảy ra?

+0

Bạn có thể sử dụng PostSharp hoặc công cụ AOP tương tự không? –

+1

Xem liệu sự trợ giúp này có bị trùng lặp hay không: http://stackoverflow.com/questions/492201/exception-error-message-with-incorrect-line-number – Kobi

Trả lời

7

Không phải chuyên gia .net, nhưng ít nhất bằng các ngôn ngữ khác, khi tối ưu hóa trình biên dịch cao được chọn, trình biên dịch có thể làm cho sắp xếp lại mã đáng kể. Điều này có thể và thường làm cho nó rất khó khăn để ghim nguồn của một lỗi xuống một dòng cụ thể. Nếu trình biên dịch có thể thực hiện tối ưu hóa trên các khối cơ bản, thì hiệu ứng này có thể rất quan trọng, đặt vị trí dòng rõ ràng trong một phần hoàn toàn khác của tệp nguồn.

2

Nếu bạn sử dụng nhiều tối ưu hóa compil, trình biên dịch có thể di chuyển các phần mã của bạn mà tôi đoán.

Cách tốt nhất để gỡ lỗi, là sử dụng Trình phản chiếu trên dll mà ứng dụng của bạn thực sự sử dụng. Sử dụng số dòng của stacktrace, bạn sẽ tìm thấy chính xác những dòng mã được gọi khi ứng dụng gặp sự cố.

+1

Phản xạ có thể giúp tôi như thế nào? Nó không hiển thị số dòng, và nó không bảo toàn định dạng của khóa học. Và Trình phản chiếu cho thấy mã không được thay đổi đáng kể ở vị trí xảy ra ngoại lệ. – xoposhiy

+1

Oh ... Vì vậy, bạn đang hơi say tôi đoán. Lấy làm tiếc :/ –

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