5

Trước tiên cho tôi nói rằng tôi có thể debug từ xa một phát hành xây dựng trên máy tính từ xa. Tôi set up my release build giống như xây dựng gỡ lỗi của tôi nhưng tôi chủ yếu phải đảm bảo rằng cờ gỡ lỗi không được đặt. Tôi đã xử lý việc này một lúc và cuối cùng quyết định thử và tìm ra lý do tại sao tôi phải trải qua điều này. Tôi cũng nên đề cập đến rằng kinh nghiệm gỡ lỗi từ xa của tôi bị giới hạn trong dự án này và chương trình C# sử dụng C++/CLI (được xây dựng với/clr) .DLL để hòa giải với một số thư viện C++ quan trọng. Tôi không cần phải gỡ lỗi các thư viện C++ cơ bản nhưng tôi cần gỡ lỗi mã C++/CLI. (Một lý do tôi đề cập đến điều này là tôi không thể liên kết libs trong tĩnh trong khi sử dụng cờ/clr).từ xa gỡ lỗi một ứng dụng với các phiên bản DEBUG của CRT khi VS không được cài đặt trên máy từ xa

Gần đây tôi đã phát hiện Dependency Walker vì vậy tôi đã sử dụng nó để xem điều gì đang diễn ra. Bật ra với bộ cờ gỡ lỗi, liên kết liên kết trong MSVCR100D.DLL và MSVCP100D.DLL, khi cờ không được đặt, nó sử dụng các tệp không có hậu tố "D". Bây giờ bình thường tôi có thể chỉ cần sao chép trên các phiên bản của tôi của những người .DLLs đến máy từ xa nhưng có một vấn đề. Máy tính xách tay dev của tôi với VS2010 là một máy 64 bit và máy mục tiêu là 32 bit. Điều đó có nghĩa là các phiên bản duy nhất của các DLL mà tôi sở hữu là 64 bit. Tôi đã cài đặt gỡ lỗi từ xa cho VS2010 (Tôi đã có cùng một vấn đề này dưới 2008) trên máy từ xa nhưng nó không bao gồm các phiên bản gỡ lỗi của các .DLLs hoặc (tôi không chắc chắn lý do tại sao nhưng tôi giả định này là bởi thiết kế). Vì vậy, câu hỏi của tôi là:

  1. Là chủ sở hữu đã đăng ký của VS2010 có nguồn hợp lệ cho các phiên bản 32 bit của những .DLL này tôi có thể đặt trên máy từ xa?
  2. Có cách nào đơn giản hơn để tôi nhận hỗ trợ gỡ lỗi không? Đó là tôi có thể thay đổi một số thiết lập khác mà chỉ nói với VS không sử dụng phiên bản gỡ lỗi của hai DLL? Lợi thế ở đây là biểu tượng DEBUG sẽ được thiết lập và bất kỳ mã điều kiện nào sử dụng nó sẽ hoạt động.

Trả lời

8

Phiên bản gỡ lỗi của DLL CRT đều có sẵn với cài đặt Visual Studio chuẩn, bao gồm cả phiên bản x86 ngay cả trên máy 64 bit.

Theo mặc định, họ đang nằm trong đường dẫn sau:

<Program Files folder>\Microsoft Visual Studio 10.0\VC\redist\Debug_NonRedist 

Dưới thư mục đó, bạn sẽ thấy hai thư mục bổ sung (x64x86) có chứa các phiên bản sửa lỗi các file DLL cho tương ứng nền tảng.

Nhưng đặc biệt chú ý đến tên của thư mục (Debug_NonRedist). Điều đó cho thấy rằng các tệp DLL gỡ lỗi này là không phân phối lại được. Nó chắc chắn là OK cho một nhà phát triển người sở hữu một giấy phép cho VS để sử dụng chúng khi kiểm tra mã của mình trên một máy khác, nhưng họ cần không phải được phân phối cho máy khách và được sử dụng để chạy ứng dụng của bạn. (Nghe có vẻ như từ câu hỏi của bạn mà bạn biết điều này, nhưng đó là giá trị chỉ ra anyway cho nhân viên của Google trong tương lai.)


Ngoài ra, bạn có thể thay đổi phiên bản của DLL CRT rằng một Visual liên kết dự án Studio để cho dự án cụ thể cấu hình. Điều đó có nghĩa là bạn có thể biên dịch phiên bản "Gỡ lỗi" của ứng dụng, nhưng yêu cầu Visual Studio liên kết đến các phiên bản CRT có thể phân phối lại đầy đủ.

Để làm điều đó:

  1. Nhấp chuột phải vào dự án của bạn trong Solution Explorer và chọn "Properties".

  2. Đảm bảo rằng cấu hình "Gỡ lỗi" được chọn trong hộp thả xuống ở đầu hộp thoại.

  3. Mở rộng mục "C/C++" trong TreeView và chọn "Tạo mã".

  4. Thay đổi cài đặt của tùy chọn "Thư viện thời gian chạy" thành "Đa luồng DLL (/ MD)" hoặc "Đa luồng (/ MT)".

    Lưu ý rằng bạn chỉ cần nói cho Visual Studio không để sử dụng các biến thể "Gỡ lỗi" của từng tùy chọn này. Họ vẫn có ý nghĩa tương tự. Đầu tiên sẽ tự động liên kết đến một DLL, thứ hai sẽ liên kết tĩnh CRT vào ứng dụng của bạn. Chọn cái thích hợp nhất cho trường hợp của bạn. (Tôi thường tìm thấy nó thuận tiện để cấu hình của tôi "Debug" xây dựng để tĩnh liên kết chính xác cho trường hợp như thế này.)

+0

1K Cảm ơn bạn. Tôi cảm thấy một chút giống như một thằng ngốc vì không nhận thấy tùy chọn Thư viện thời gian chạy (vì tôi đã sử dụng cửa sổ bật lên đó để thử tùy chọn MT). Một loại mù tầm nhìn lạ mắt tôi đoán vậy. Tôi đã chọn không đưa các phiên bản không redist vào thư mục gỡ lỗi của mình trên máy từ xa. Thư mục đó sẽ bị xóa trước khi tôi giao máy cho khách hàng và tôi sẽ ở lại những ân sủng tốt của MS. – Tod

+0

@Tod: Chắc chắn; không có gì. Đó là những gì trang web này là cho, thực sự. Nghe có vẻ như là một giải pháp tốt cho tôi; Tôi đã làm điều đó trên các dự án mà liên kết tĩnh không hoạt động. (Tôi chỉ nhận thấy rằng tôi đã bỏ lỡ phần đó trong câu hỏi của bạn, nơi bạn giải thích tại sao bạn không thể liên kết tĩnh.) –

0

Câu hỏi này là cho một phiên bản cũ của Visual Studio, nhưng trong trường hợp bất cứ ai đến đây cho một phiên bản mới hơn (như tôi đã làm), có được xây dựng trong hỗ trợ để triển khai các DLL gỡ lỗi mà bạn cần trong VS 2013 (có lẽ trước đó). Đây là một thiết lập rõ ràng, nhưng nó có thể dễ dàng bỏ lỡ nếu người ta đang chạy qua mọi thứ (như tôi). Vì vậy, có lẽ điều này sẽ giúp ai đó.

Trong trang thuộc tính, dưới Debugging, khi Debugger to launch được đặt thành Remote Windows Debugger, trong danh sách thuộc tính, có một tùy chọn được gọi là Deploy Visual C++ Debug Runtime Libraries. Chỉ cần đặt thành Yes.

Cập nhật - theo yêu cầu, điều này là làm rõ những trang bất động sản Tôi đang đề cập đến, bằng cách làm thế nào để truy cập chúng: Trong Solution Explorer, kích chuột phải vào dự án khởi động (một trong những in đậm) và nhấp vào Thuộc tính trên menu ngữ cảnh. Trang Trang thuộc tính sẽ xuất hiện. Trong bảng điều khiển ở phía bên trái, hãy mở rộng Thuộc tính cấu hình và sau đó chọn Gỡ lỗi, mục thứ hai dưới Thuộc tính cấu hình.

Chỉnh sửa bản cập nhật: Tôi nhận được thông báo này và không thấy rằng tôi có thể vừa nói "Xem câu trả lời của Cody Gray để xem ảnh cửa sổ" để đáp ứng yêu cầu làm rõ. Nhưng, dù sao thì cũng có cách để phòng trường hợp ai đó cần nó.

+0

bạn có thể cụ thể hơn về điều này không? trang thuộc tính nào chính xác? – skyline75489

+0

Đã cập nhật. Cửa sổ được gọi là ** Trang thuộc tính **, có thể không phải là tất cả mô tả, vì vậy tôi liệt kê cách truy cập cửa sổ đó. – McMustard

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