2009-07-15 33 views
91

tôi lo ngại câu hỏi với Visual Studio 2008, mặc dù tôi cho rằng nó nên được rằng cùng trong VS2005Làm thế nào để gỡ lỗi một dll tham chiếu (có pdb)

Tôi có hai giải pháp trong không gian làm việc của tôi, nói A và B.

Giải pháp A là một dự án cũ hơn mà tôi đã hoàn thành mã hóa một số thời gian trước đây. Trong giải pháp B, tôi cần sử dụng một số lớp từ Giải pháp A. Để làm như vậy, tôi thêm tham chiếu đến dll của một trong các dự án trong giải pháp A.

Vấn đề là khi tôi cố gỡ lỗi. Tôi cũng muốn có thể bước vào mã của A. Visual studio không thể tải mã cho các lớp này ("Không có sẵn mã nguồn cho vị trí hiện tại.") Và tôi chỉ có thể xem việc tháo gỡ, không hữu ích.

Cách duy nhất mà tôi biết để lớp debug từ dung dịch A là bằng cách chạy giải pháp B, tách tất cả các quá trình (trong mục menu Debug) và đính kèm quá trình từ giải pháp A.

Tuy nhiên, điều này rất bất tiện và Tôi chỉ có thể gỡ lỗi A OR B cùng một lúc.

Có cách nào để cho phép bước vào mã của các dll được tham chiếu (mà tôi có mã nguồn) không?


Giải pháp: sai lầm của tôi là tôi nghĩ rằng một dự án chỉ có thể là một phần của một giải pháp duy nhất. Trong thực tế, một dự án có thể là một phần của bất kỳ số lượng giải pháp nào.
Khi bạn cần tham khảo dự án cũ, bạn chỉ cần thêm dự án vào giải pháp. Điều này được thực hiện bằng cách kích chuột phải vào giải pháp mới trong Solution Explorer> Add> Existing Project.
Sau đó, bạn sẽ có thể thêm tham chiếu dự án. Như những người khác đã viết, bạn có lẽ nên hoàn toàn tránh sử dụng tài liệu tham khảo dll để mã của riêng bạn (hoặc mã khác mà bạn có thể cần phải thay đổi và gỡ lỗi).

Tham chiếu rất tốt về cách thiết kế các giải pháp có thể được tìm thấy trong MSDN.

+0

Đó MSDN liên kết là một cuốn sách phải đọc cho devs .net (không phụ thuộc vào kiểm soát nguồn họ sử dụng). Tôi ngạc nhiên là tôi đã không nhìn thấy nó trước đó. Cảm ơn! – Pat

Trả lời

82

Nếu bạn có tham chiếu dự án, nó sẽ hoạt động ngay lập tức.

Nếu đó là tài liệu tham khảo (dll), bạn cần các biểu tượng gỡ lỗi (tệp "pdb") nằm trong cùng thư mục với dll. Kiểm tra xem các dự án của bạn đang tạo ra các biểu tượng gỡ lỗi (thuộc tính project => Build => Advanced => Output/Debug Info = full); và nếu bạn đã sao chép thì hãy đặt pdb với nó.

Bạn cũng có thể tải các biểu tượng trực tiếp trong IDE nếu bạn không muốn sao chép bất kỳ tệp nào, nhưng nó hoạt động nhiều hơn.

Tùy chọn dễ nhất là sử dụng tham chiếu dự án!

+3

Unfurtunately, tôi nghĩ rằng nó không phải là có thể thêm tài liệu tham khảo dự án đối với dự án từ một giải pháp (chính xác cho tôi nếu tôi sai!). – Elad

+0

Có, bạn có thể. Tôi sử dụng tất cả các tiem khi chỉ có một phần của một thư viện được sử dụng trong một giải pháp mới. – Wilhelm

+0

Bạn có thể giải thích như thế nào không? Khi tôi nhấp vào "thêm tham chiếu", tab Dự án chỉ hiển thị các dự án từ cùng một giải pháp. – Elad

0

Nó phải hoạt động. Tôi sử dụng để gỡ lỗi một tập tin exe và một dll cùng một lúc! Những gì tôi đề xuất là 1) Bao gồm đường dẫn của dll trong dự án B của bạn, 2) Sau đó biên dịch gỡ lỗi dự án A của bạn 3) Kiểm soát đường dẫn trên tệp dll và de pdb .... 4) Sau đó bạn bắt đầu gỡ lỗi dự án B và nếu tất cả là ok, bạn sẽ có thể gỡ lỗi trong cả hai dự án!

7

Một điểm khác cần lưu ý, hãy đảm bảo các tệp tham chiếu không được cài đặt trong GAC. Sau khi thử nghiệm, tôi đã cài đặt các dll của mình vào GAC để kiểm tra mức hệ thống. Sau đó, khi tôi đã phải gỡ lỗi mã của tôi một lần nữa, tôi không thể bước vào hội đồng tham chiếu cho đến khi tôi xóa chúng khỏi GAC.

+2

CẢM ƠN BẠN! Đây là vấn đề của tôi. Tôi không thể tin rằng tôi đã không tìm ra điều này: -/Tôi nghĩ thiết lập tham chiếu dự án bằng cách nào đó sẽ ghi đè lên những gì đã được cài đặt trong GAC. – SnookerC

+0

Tuyệt đối! Đây là một điểm rất tốt. Ngay cả khi bạn có cùng phiên bản .NET Framework, nếu bạn có mã trong GAC khi bạn cố gỡ lỗi nó sẽ không nhấn điểm ngắt nếu tệp .PDB trong GAC khác với tệp trong thư mục dự án của bạn. Một giải pháp cho điều này là Un-GAC DLL, xây dựng, sau đó lại GAC lắp ráp. –

0

Tôi không muốn đưa dự án thư viện lớp bên ngoài vào một số giải pháp của mình, vì vậy tôi bước vào các hội đồng mà tôi tiêu thụ theo một cách khác.

Giải pháp của tôi có thư mục "Common Assemblies" chứa các tệp DLL của riêng tôi từ các dự án khác. Các DLL mà tôi tham chiếu cũng có các tệp PDB đi kèm của họ để gỡ lỗi. Để sửa lỗi và thiết lập các điểm ngắt, tôi thiết lập một điểm ngắt trong nguồn của ứng dụng tiêu thụ, nơi tôi đang gọi một phương thức hoặc hàm tạo từ assembly và sau đó gọi INTO (F11) gọi phương thức/khởi tạo.

Trình gỡ lỗi sẽ tải tệp nguồn của hội đồng trong VS và các điểm ngắt mới bên trong của hội đồng có thể được đặt tại điểm đó.

Không thẳng về phía trước nhưng hoạt động nếu bạn không muốn bao gồm tham chiếu dự án mới và chỉ muốn tham khảo một hội đồng được chia sẻ thay thế.

21

Tôi gặp vấn đề tương tự. Ông là những gì tôi tìm thấy:

1) đảm bảo tất cả các dự án đang sử dụng Framework cùng (điều này là rất quan trọng)

2) trong Tools/Options> Debugging> chung đảm bảo "Enable Just My Mã (Managed Chỉ) không được chọn

3) trong Công cụ/Tùy chọn> Gỡ lỗi> Ký hiệu xóa mọi ký hiệu được lưu trong bộ nhớ cache, xóa và xóa tất cả vị trí thư mục trong hộp "Vị trí tệp (.pdb)" ngoại trừ "Máy chủ biểu tượng Microsoft" mặc định Ngoài ra, hãy xóa mọi đường dẫn tĩnh trong hộp văn bản "Cache symbols in this directory". Nhấp vào nút "Empty Symbols Cache". Cuối cùng, hãy chắc chắn rằng nút radio "Only specified modules" được chọn là

4) trong trình đơn Trình quản lý xây dựng/cấu hình cho tất cả các dự án đảm bảo cấu hình ở chế độ Gỡ lỗi.

+2

Vấn đề của tôi là hai dự án của tôi sử dụng các khung Net khác nhau: 4.0 và 4.5. Tx! – user627283

+1

Điều này làm việc cho tôi. –

2

Khi bạn muốn đặt điểm ngắt trong mã nguồn của một dll được tham chiếu, trước tiên hãy đảm bảo rằng bạn có tệp pdb có sẵn cho nó. Sau đó, bạn chỉ có thể mở tệp mã nguồn có liên quan và đặt điểm ngắt trên đó. Tệp nguồn không cần phải là một phần của giải pháp của bạn. Như được giải thích trong How can I set a breakpoint in referenced code in Visual Studio?

Bạn có thể xem lại điểm ngắt thông qua cửa sổ điểm ngắt, có sẵn qua Debug -> Windows -> Điểm ngắt.

Cách tiếp cận này có lợi ích là bạn không bắt buộc phải thêm dự án hiện có vào giải pháp của bạn chỉ vì mục đích gỡ lỗi khi rời khỏi nó đã giúp tôi tiết kiệm rất nhiều thời gian xây dựng. Rõ ràng, việc xây dựng một giải pháp chỉ với một dự án trong nó nhanh hơn nhiều so với việc xây dựng một giải pháp với nhiều giải pháp.

+0

Điều này chỉ hoạt động nếu tệp bên ngoài nơi bạn đặt điểm ngắt phù hợp với đường dẫn chính xác trong PDB. (Ví dụ: chỉ hoạt động nếu bạn đã xây dựng DLL trên máy của mình). –

1

Bước 1: Đến Tools -> Option -> Debugging

Bước 2: Bỏ chọn Enable Just My Mã

Bước 3: Bỏ chọn Yêu cầu file nguồn chính xác khớp với Phiên bản gốc

Bước 4: Bỏ chọn Bước qua thuộc tính và nhà khai thác

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