2014-12-25 18 views
15

Tôi có thử nghiệm đơn vị C# trong khung kiểm tra Visual Studio 2013, bài tập CLI và mã gốc. Tôi muốn điều tra phần gốc của mã trong khi thực hiện thử nghiệm đơn vị C#. Tuy nhiên chạy Test -> Debug -> All Test chạy trình gỡ rối được quản lý, vì vậy các điểm ngắt trong mã gốc không bị đánh và tôi không thể theo dõi từ C# -> mã C++/CLI như tôi có thể khi chạy chương trình trong trình gỡ lỗi chế độ hỗn hợp.Sử dụng gỡ lỗi chế độ hỗn hợp trên thử nghiệm đơn vị được quản lý trong Visual Studio 2013

Ví dụ, mã này trong bài kiểm tra đơn vị của tôi:

[TestMethod] 
public void TestRoundTripEvaluate() 
{ 
    var obj = new MyCLIObject(); 
    var roundtripped = RoundtripXml(obj); 

    // I would like to trace into here to see why Equals returns false. 
    // But the definition for MyCLIObject is in a CPP file and cannot be navigated 
    // to running the unit test because Visual Studio starts the debugger as "managed only" 
    // when using Test -> Debug -> All Tests 
    Assert.IsTrue(obj.Equals(roundtripped)); 
} 

Nhìn vào các thiết lập dự án cho dự án đơn vị kiểm tra, tất cả mọi thứ dưới Debug bị vô hiệu hóa, vì vậy tôi không thể kiểm tra Enable Native Code Debugging, mà cho phép hành vi này cho một chương trình bình thường.

Làm cách nào để có thể bật gỡ lỗi chế độ hỗn hợp hoặc gỡ lỗi gốc khi chạy thử nghiệm đơn vị VS C#?

+0

Tôi đang sử dụng vs2013 cập nhật 4 và hộp kiểm "Enable mã gỡ lỗi bản địa" có sẵn. Bạn đang sử dụng phiên bản VS nào? – codingadventures

Trả lời

0

Tôi không biết cách gỡ lỗi mã gốc trong VS. Nếu bạn muốn hiểu tại sao hai đối tượng không bằng nhau, bạn cần phải kiểm tra xem sự so sánh nào đang xảy ra cho cuộc gọi "bằng" đó.

thử đọc này: https://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx

từ MyCLIObject không phải là loại giống như RoundtripXml, trừ khi so sánh trong MyCLIObject đang tìm kiếm cho loại RoundtripXml, tôi mong chờ nó luôn luôn trả false.

bạn có thể gọi:

Assert.IsTrue(roundtripped.Equals(obj)); 

sau đó xem những gì đang xảy ra trong phiên bản lớp của RoundtripXml của Equals() (giả sử nó không phải là cpp/mẹ đẻ).

12
  1. Tới trang tính cho dự án thử nghiệm đơn vị của bạn (nhấp chuột phải vào dự án trong Solution Explorer, sau đó bấm vào nút "Properties")
  2. Đến "Debug" tab (4 từ đầu trong danh sách ở phía bên tay trái)
  3. Bật hộp kiểm "Bật gỡ lỗi mã gốc"
  4. Gỡ lỗi kiểm tra đơn vị của bạn - bạn có thể đặt điểm ngắt trong mã gốc hoặc mã được quản lý và bạn có thể bước vào một trong hai loại mã.

Tôi vừa gặp vấn đề tương tự như bạn và có thể làm cho nó hoạt động bằng các bước này. Trước khi bật hộp kiểm này, hộp kiểm này không hoạt động. Đối với hồ sơ, tôi đang sử dụng cập nhật VS2013 4.

enter image description here

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