2012-12-20 33 views
7

Tôi có giải pháp C++. Dự án khởi động là một exe. Trong giải pháp có một số C# dlls (nhắm mục tiêu .NET Framework 2.0) được đăng ký cho COM interop. Khi tôi đặt điểm ngắt trong mã C#, tôi nhận điểm ngắt màu đỏ rỗng với "No native symbols in symbol file"Gỡ lỗi C# dll từ giải pháp C++ qua COM

Tôi đã thử thiết lập Project Property Pages -> Debugging -> Debugger Type để trộn lẫn trong dự án khởi động gọi phương thức COM.

Tôi đã kiểm tra Debug -> Windows -> Modules. Nó đã tải các dll của tôi và trạng thái ký hiệu là "No native symbols in symbol file".

Đây không phải là kết thúc của thế giới bởi vì nếu tôi làm Debug -> Start Without Debugging và sau đó Debug -> Attach to Process, hãy thay đổi Attach To: thành Managed (v2.0, v1.1, v1.0) code, Native code. Sau đó, tôi nhấn breakpoints trong cả mã C++ và mã C#.

Vì vậy, tôi có cách giải quyết khác nhưng tôi nghĩ nếu tôi có thể làm điều đó bằng cách đính kèm vào quy trình - tôi sẽ có thể thực hiện điều đó bằng cách chỉ gỡ lỗi.

Làm cách nào để có thể đạt được điểm dừng C# bằng cách chỉ thực hiện Debug -> Start Debugging?

+0

Nghi ngờ rằng có một cách khả thi, tôi đã cố gắng như vậy và dành hàng giờ cố gắng làm điều đó và cuối cùng bị mắc kẹt khi sử dụng quy trình đính kèm hoạt động tốt. – SinisterMJ

+0

Đủ công bằng, tôi không có vấn đề gì khi sử dụng đính kèm để xử lý nó, chỉ là một trong những thứ mà bạn không thể bỏ qua vì bạn nghĩ "chắc chắn phải có cách" – Liam

+1

Tôi cũng gặp vấn đề này vấn đề là "hỗn hợp" chọn Native + Managed (v4.0), vì vậy không có cách nào để chọn Native + Managed (v2.0) từ các thiết lập khởi động. –

Trả lời

1

Tôi không chắc liệu điều này có hữu ích hay không nhưng chúng tôi làm việc rất nhiều với C# và C++. Tôi thấy điều này là có thể bằng cách đặt dự án C++ và dự án C# trong cùng một giải pháp và cho phép "gỡ lỗi gốc" trong dự án C#. Sau đó, tôi đã có thể nhảy qua lại giữa chúng trong khi gỡ lỗi.

+0

Tôi có cả hai dự án trong cùng một giải pháp và trong VS2010 tôi đã đặt "Bật gỡ lỗi mã không được quản lý" trên tất cả các dự án C#. Nó vẫn không hoạt động. Tôi giả định rằng khi dự án khởi động là một exe C++ mà trình gỡ lỗi được thiết lập thành native chỉ mặc dù tôi đã thiết lập kiểu Debugger thành Mixed trong các thuộc tính của dự án C++. – Liam

4

tôi đã có thể gỡ lỗi C# tôi dll từ một ++ Dự án C trong VS2008 bằng cách làm như sau:

Trong C++ tính của dự án, goto Configuration Properties -> Debugging. Đặt "Debugger Type" thành Mixed. "Đính kèm" phải được đặt thành số

Trong thuộc tính dự án C# của bạn, trong tab Gỡ lỗi, hãy đặt "Bắt đầu chương trình bên ngoài" thành dự án C++ của bạn.

+1

Hoạt động tuyệt vời cho tôi! Cảm ơn! –

2

Tôi biết nó hơi cũ nhưng tôi đã tìm ra giải pháp thiết thực cho vấn đề.

Tôi gặp sự cố tương tự khi sử dụng ứng dụng C++ sử dụng C# COM-Object. Tôi đã thử một số cài đặt trong Visual Studio ở phía C++ và C#. Không có gì hữu ích cho đến khi tôi thử khởi chạy Debugger theo cách thủ công.

Bạn có thể sử dụng

Debugger.Launch(); 

tự khởi động Debugger trên C# DLL. Tôi biết đây không phải là cách tốt nhất nhưng thực tế. Trong các môi trường sản xuất sau này, bạn phải gỡ bỏ hàm khởi chạy Debugger :).

Kính trọng

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