2012-03-08 40 views
12

Giả sử tôi có một chức năng ném một ngoại lệ. Giả sử hàm này được gọi bởi một DLL của bên thứ ba và DLL của bên thứ ba sẽ xử lý ngoại lệ mà tôi đã ném.Visual Studio xem xét "Mã người dùng" là gì?

Nếu Visual Studio quyết định rằng bên thứ ba DLL không phải là "mã người dùng" (như được thấy trong hình bên dưới) thì nó sẽ dừng mặc định của tôi, mặc dù nó được xử lý sau. Nó không chính xác là sai để làm như vậy; giải thích rõ ràng rằng ngoại lệ đã bị hủy theo mã người dùng. Nhưng điều gì làm cho Visual Studio gọi một số "mã người dùng" DLL và những người khác thì không?

enter image description here

Tôi đã có một giả thuyết cho rằng điều này xảy ra vì những biểu tượng không được nạp, nhưng có những module trong danh sách mà đã nạp những biểu tượng nhưng vẫn không được coi là "mã người sử dụng".

+0

Đối với những người khác cửa sổ Mô-đun được tìm thấy trên menu Gỡ lỗi, chọn Windows, rồi bấm Mô-đun. Một màn hình hữu ích để theo dõi xuống chỉ là những gì .dll đang được sử dụng (mã của tôi sẽ không gỡ lỗi vì nó đã được sử dụng một bản sao của lib trong GAC chứ không phải là đầu ra từ dự án tham chiếu), cảm ơn cho chỉ nó ra. – RyanfaeScotland

Trả lời

12

Có, không có tệp .pdb trình gỡ lỗi không thể cho biết đó là mã người dùng hay không. Điều này được giải thích một cách hợp lý trong số MSDN article:

Để phân biệt mã người dùng với mã không phải người dùng, Chỉ cần mã của tôi xem xét ba điều sau: Tệp DBG, tệp PDB và tối ưu hóa.

Trong bản dựng Gỡ lỗi chuẩn, tối ưu hóa bị tắt và các biểu tượng gỡ lỗi được tạo cho tất cả các mô-đun. Khi bạn chạy bản dựng gỡ lỗi, các mô-đun đó được coi là mã người dùng. Nếu tôi gọi một hàm thư viện được tối ưu hóa và không có các biểu tượng gỡ lỗi, tuy nhiên, nó không phải là mã người dùng. Code của tôi chỉ ngăn chặn việc thực thi dừng lại ở các điểm ngắt trong mã thư viện, mà thường không phải là mã mà bạn muốn gỡ lỗi. Trong cửa sổ Breakpoints, các điểm ngắt đó sẽ xuất hiện với biểu tượng Disabled Breakpoint.

+0

Điều này thật hoàn hảo. Với điều này trong tâm trí, tôi đã đăng một câu trả lời cho [ngăn chặn trình gỡ lỗi dừng lại trên tất cả các ngoại lệ trong một thư viện] (http://stackoverflow.com/a/9616890/33080) và thêm [cách giải quyết khác cho NUnit 'Assert.Throws 'tạm dừng] (http://stackoverflow.com/a/9609494/33080). Tốt đẹp! –

+0

Điều này vẫn còn mơ hồ. Tôi nghĩ rằng nó an toàn để nói "Mã người dùng = Không tối ưu hóa + biểu tượng gỡ lỗi"? –

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