Làm thế nào để gỡ lỗi các dự án thư viện lớp bên ngoài trong studio hình ảnh?


136

Tôi có một dự án (A) tham chiếu một tập hợp từ thư viện lớp dự án bên ngoài (B) nằm trong một giải pháp khác so với giải pháp.

Tôi vẫn chưa hiểu làm thế nào tôi có thể gỡ lỗi thư viện lớp từ B một cách hiệu quả trong khi chạy chương trình từ dự án A. Có thứ gì tôi phải kích hoạt trên dự án B như thông tin gỡ lỗi, v.v. để tôi có thể bước vào thời gian gỡ lỗi từ A không?

Cảm ơn trước.

Câu trả lời:


202

Hãy thử vô hiệu hóa Mã của tôi (JMC).

  • Công cụ -> Tùy chọn -> Trình gỡ lỗi
  • Bỏ chọn "Kích hoạt chỉ mã của tôi"

Theo mặc định, trình gỡ lỗi cố gắng hạn chế chế độ xem thế giới đối với mã chỉ có trong giải pháp của bạn. Điều này thực sự rất nguy hiểm nhưng khi bạn muốn gỡ lỗi mã không có trong giải pháp của bạn (như trường hợp của bạn), bạn cần phải vô hiệu hóa JMC để xem mã đó. Nếu không, mã sẽ được coi là bên ngoài và phần lớn bị ẩn khỏi chế độ xem của bạn.

BIÊN TẬP

Khi bạn bị hỏng trong mã của bạn hãy thử như sau.

  • Gỡ lỗi -> Windows -> Mô-đun
  • Tìm DLL cho dự án mà bạn quan tâm
  • Nhấp chuột phải -> Tải biểu tượng -> Chọn đường dẫn đến .PDB cho dự án khác của bạn

2
các hộp kiểm cụ thể đã được bỏ chọn. Mặc dù vậy, điều tôi nhận thấy là nó nhập vào một phương thức của thư viện bên ngoài, nhưng nó bước qua khi tôi cố gắng gọi một phương thức là một phần của giao diện.
Konstantinos

Bạn có thể cần phải đi đến các thuộc tính của DLL và đảm bảo rằng Copy Local được đặt thành True. Nếu không, các Mô-đun sẽ không thể tìm thấy .pdb để bạn tham khảo.
Bryan Rayner

Chỉ Mã của tôi dường như không tạo ra bất kỳ sự khác biệt nào (tôi có thể nhảy vào mã bên ngoài ngay cả khi được bật), nhưng việc tìm kiếm mô-đun trong trình gỡ lỗi sẽ giúp ích.
TheOperator

3
Không tìm thấy tệp biểu tượng phù hợp trong thư mục này.
Christine

1
Nếu bạn không có tệp PDB cho mô-đun được tham chiếu, ReSharper có thể được sử dụng để dịch ngược các tệp nhị phân bằng cách sử dụng tùy chọn "Tải biểu tượng với trình giải mã ReSharper" trong menu chuột phải trong Debug / Windows / Modules. rất mạnh.
emilast

12

Điều này đã làm tôi chán nản một thời gian. Những gì tôi thường làm là xây dựng lại thư viện bên ngoài của mình bằng chế độ gỡ lỗi, sau đó sao chép cả tệp .pdb và tệp .pdb vào thùng của trang web của tôi. Điều này cho phép tôi bước vào mã libarary.


9

Giả sử đường dẫn của

Dự án A

C:\Projects\ProjectA

Dự án B

C:\Projects\ProjectB

và dll của ProjectB là trong

C:\Projects\ProjectB\bin\Debug\

Để gỡ lỗi ProjectBtừ ProjectA, hãy làm như sau

  1. Sao chép Bdll của dll .PDBvào ProjectAthư mục biên dịch.
  2. Bây giờ gỡ lỗi ProjectA. Khi mã đến phần mà bạn cần gọi phương thức hoặc sự kiện của dll, v.v. trong khi gỡ lỗi, hãy nhấn F11để bước vào mã của dll.

LƯU Ý: KHÔNG NHIỆM VỤ SAO CHÉP FILE .PDB


5

Tôi chạy hai trường hợp của studio hình ảnh - một cho dll bên ngoài và một cho ứng dụng chính.
Trong các thuộc tính dự án của dll bên ngoài, đặt như sau:

Xây dựng sự kiện:

  • copy /y "$(TargetDir)$(TargetName).dll" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).dll"

  • copy /y "$(TargetDir)$(TargetName).pdb" "C:\<path-to-main> \bin\$(ConfigurationName)\$(TargetName).pdb"

Gỡ lỗi:

  • Bắt đầu chương trình bên ngoài: C:\<path-to-main>\bin\debug\<AppName>.exe

  • Thư mục làm việc C:\<path-to-main>\bin\debug

Bằng cách này, bất cứ khi nào tôi xây dựng dll bên ngoài, nó sẽ được cập nhật trong thư mục của ứng dụng chính. Nếu tôi nhấn gỡ lỗi từ dự án của dll bên ngoài - ứng dụng chính sẽ chạy, nhưng trình gỡ lỗi chỉ đạt các điểm dừng trong dll bên ngoài. Nếu tôi nhấn gỡ lỗi từ dự án chính, ứng dụng chính sẽ chạy với dll bên ngoài được xây dựng gần đây nhất, nhưng bây giờ trình gỡ lỗi chỉ đạt các điểm dừng trong dự án chính.

Tôi nhận ra một trình gỡ lỗi sẽ thực hiện công việc cho cả hai, nhưng tôi thấy việc giữ hai người theo cách này dễ dàng hơn.


1

[theo Martin Beckett, người gửi cho tôi câu trả lời này]

Bạn có thể gỡ lỗi vào một thư viện bên ngoài.

Trong tab cài đặt dự án, hãy tìm 'thư mục phòng thu trực quan' trong trường 'mã nguồn' bao gồm đường dẫn đến các nguồn openCV. Sau đó, đảm bảo rằng các tệp .pdb cho mỗi dll gỡ lỗi nằm trong cùng thư mục với dll.


0

Tôi đã có một vấn đề tương tự như các điểm dừng của tôi trong dự án (B) không bị ảnh hưởng. Giải pháp của tôi là xây dựng lại dự án (B) sau đó gỡ lỗi dự án (A) vì các dll cần được cập nhật.

Visual studio sẽ cho phép bạn gỡ lỗi vào một thư viện bên ngoài.


0

Tài liệu tham khảo NuGet

Giả sử -Project_A (tạo dự án_a.dll) -Project_B (tạo dự án_b.dll) và tham chiếu Project_B cho các gói Project_A của NuGet, sau đó chỉ cần sao chép dự án Project_a.dll, project_a.pdb vào thư mục Project_B / Gói. Trong thực tế nên được sao chép vào / bin.

Bây giờ gỡ lỗi Project_A. Khi mã đến phần mà bạn cần gọi phương thức hoặc sự kiện của dll, v.v. trong khi gỡ lỗi, hãy nhấn F11 để bước vào mã của dll.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.