2009-04-20 38 views
21

Nếu tôi có một DLL (được xây dựng trong chế độ phát hành) và tệp PDB tương ứng, có thể gỡ rối các lớp/phương thức gỡ lỗi (bước vào) DLL đó?Gỡ lỗi phiên bản phát hành của một tệp DLL (có tệp PDB)

Nếu có, các bước/cấu hình bắt buộc (ví dụ: nơi đặt tệp PDB)?

Edit:

Nếu có tập tin PDB trong cùng một vị trí như các DLL (trong thư mục bin/debug của một ứng dụng thử nghiệm giao diện điều khiển đơn giản). Tôi có thể thấy rằng các biểu tượng cho các DLL được nạp (trong cửa sổ Output và cũng trong cửa sổ Modules), nhưng tôi vẫn không thể bước vào các phương thức của DLL đó.

Đây có phải là kết quả tối ưu hóa trình biên dịch (như được mô tả bởi Michael trong câu trả lời của anh) không?

Trả lời

5

Cuối cùng tôi đã tìm thấy nguyên nhân gây ra sự cố khi gỡ lỗi một DLL được xây dựng trong cấu hình phát hành:

Trước hết, về cơ bản nó hoạt động như mong đợi. Có nghĩa là, nếu tôi có một DLL được xây dựng trong bản phát hành cấu hình cộng với các tập tin PDB tương ứng, sau đó tôi có thể gỡ lỗi các lớp/phương pháp chứa trong DLL đó.

Khi lần đầu tiên tôi thử điều này, tôi không may đã cố gắng bước vào các phương thức của lớp học có DebuggerStepThroughAttribute, e.g:

[System.Diagnostics.DebuggerStepThrough] 
public class MyClass { 
    public void Test() { ... } 
} 

Trong trường hợp đó, tất nhiên là không thể bước vào phương thức từ trình gỡ rối (như mong đợi/dự định).

Vì vậy, mọi thứ hoạt động như dự định. Cảm ơn rất nhiều câu trả lời của bạn.

14

Pdb thường (ít nhất là đối với tôi) được phát hiện nếu nó nằm bên cạnh dll (như với tệp xml intellisense).

Cách khác; bạn sẽ cần một điểm ngắt sau khi mô-đun đã tải ...

Tại điểm ngắt, hiển thị cửa sổ "Mô-đun" (Ctrl + D, M - hoặc Debug-> Windows-> Mô-đun). Nhấp chuột phải vào dll của bạn "Tải biểu tượng từ", "Đường dẫn biểu tượng", v.v.

+2

PDB là bên cạnh DLL, các biểu tượng được tải, nhưng tôi vẫn không thể bước vào các phương pháp. Bất kỳ ý tưởng? – M4N

5

Có, bạn có thể gỡ lỗi mã phát hành bằng PDB. Tuy nhiên, có một số cạm bẫy với mã gỡ lỗi được tối ưu hóa, thông tin thêm herehere.

PDB của bạn chỉ cần ở một nơi mà trình gỡ lỗi có thể tìm thấy nó - cho thư mục gỡ lỗi cục bộ giống như dll thường dễ nhất. Nếu không, hãy đặt nó ở một nơi nào đó mà trình gỡ lỗi có thể tìm thấy nó và trỏ trình gỡ lỗi đến vị trí đó bằng đường dẫn biểu tượng.

2

Gỡ lỗi xây dựng bản phát hành thường khó khăn hơn nhiều khi gỡ lỗi phiên bản gỡ lỗi. Nói chung, bạn sẽ cần một số hiểu biết về x86 assembler và bạn sẽ có thể dành một chút thời gian nhìn vào cửa sổ tháo gỡ. Điều này có xu hướng là cách duy nhất để tìm ra những dòng mã bạn đang thực sự kể từ trong một bản phát hành xây dựng với tối ưu hóa trên trình biên dịch có thể làm nội tuyến quan trọng và hướng dẫn sắp xếp lại. Ngoài ra, tôi thấy trình gỡ rối thường xuyên không báo cáo chính xác giá trị của các biến. Nếu bạn cần biết giá trị của biến và bạn không chắc chắn trình sửa lỗi là chính xác, hãy vào cửa sổ tháo gỡ và tìm vị trí bộ nhớ hoặc đăng ký nó ở.

Tệp pdb có thể được lưu trữ trong Máy chủ Biểu tượng. Hãy xem Setting up a Symbol Server để có hướng dẫn tốt. Mỗi sản phẩm chúng tôi xây dựng trên một máy xây dựng sẽ xuất bản các biểu tượng cho máy chủ biểu tượng của chúng tôi, vì vậy chúng tôi luôn có thể gỡ lỗi mọi bãi lỗi mà chúng tôi nhận được từ WinQual.

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