Использование отладки смешанного режима в управляемом модульном тесте в Visual Studio 2013

У меня есть модульный тест С# в тестовой среде Visual Studio 2013, который выполняет CLI и собственный код. Я хотел бы исследовать нативную часть кода при выполнении модульного теста С#. Однако запуск Test -> Debug -> All Tests запускает управляемый отладчик, поэтому точки останова в машинном коде не срабатывают, и я не могу выполнить трассировку кода C# -> C++/CLI, как при запуске программы в отладчике смешанного режима.

Например, этот код в моем модульном тесте:

[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 ) ); 
}

Глядя на настройки проекта для проекта модульного тестирования, все в разделе «Отладка» отключено, поэтому я не могу установить флажок «Включить отладку собственного кода», который допускает такое поведение для обычной программы.

Как включить отладку в смешанном режиме или отладку только в собственном режиме при выполнении модульного теста VS C#?


person Chris    schedule 25.12.2014    source источник
comment
Я использую обновление vs2013 4, и флажок Включить отладку собственного кода доступен. Какую версию VS вы используете?   -  person codingadventures    schedule 23.03.2015


Ответы (2)


  1. Перейдите на страницу свойств проекта модульного тестирования (щелкните проект правой кнопкой мыши в обозревателе решений и выберите "Свойства").
  2. Перейдите на вкладку «Отладка» (4-я сверху в списке слева)
  3. Включен флажок «Включить отладку нативного кода».
  4. Отладьте свой модульный тест — вы можете установить точки останова либо в собственном, либо в управляемом коде, и вы можете перейти к любому типу кода.

У меня была та же проблема, что и у вас, и я смог заставить ее работать, используя эти шаги. До включения этого флажка не работало. Для справки, я использую обновление 4 VS2013.

введите здесь описание изображения

person Nik    schedule 25.03.2015

Я не знаю, как отлаживать нативный код в VS. Если вы хотите понять, почему два объекта не равны, вам нужно проверить, какое сравнение происходит для этого вызова «равно».

попробуйте прочитать это: https://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx

поскольку MyCLIObject не имеет того же типа, что и RoundtripXml, если только сравнение в MyCLIObject не ищет этот тип RoundtripXml, я ожидаю, что он всегда будет возвращать false.

вы можете позвонить:

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

затем посмотрите, что происходит в версии Equals() класса RoundtripXml (при условии, что это не cpp/native).

person 00jt    schedule 22.03.2015