2014-12-25 19 views
15

Mam test jednostki C# w ramach testu programu Visual Studio 2013, który wykonuje CLI i kod natywny. Chciałbym zbadać natywną część kodu podczas wykonywania testu jednostki C#. Jednak uruchomienie Test -> Debugowanie -> Wszystkie testy uruchamia zarządzany debugger, więc punkty przerwania w natywnym kodzie nie są trafione i nie mogę śledzić kodu C# -> C++/CLI, tak jak mogę podczas uruchamiania programu w trybie mieszanym debuggera.Użycie debugowania w trybie mieszanym w teście zarządzanej jednostki w programie Visual Studio 2013

Na przykład ten kod w moim badanej jednostki:

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

patrząc w ustawieniach projektu dla projektu badawczego jednostka, wszystko pod Debug jest wyłączone, więc nie może sprawdzić Włącz debugowanie kodu natywnego, które pozwala to zachowanie dla normalnego programu.

Jak mogę włączyć debugowanie w trybie mieszanym lub debugowanie natywne tylko podczas uruchamiania testu jednostki VS C#?

+0

używam aktualizacji vs2013 4 i pole wyboru „Włącz debugowanie kodu natywnego” jest dostępna. Którą wersję VS używasz? – codingadventures

Odpowiedz

0

Nie jestem świadomy sposobu debugowania kodu natywnego w VS. Jeśli chcesz zrozumieć, dlaczego dwa obiekty nie są równe, musisz sprawdzić, jakie jest porównanie dla tego "równego" połączenia.

spróbować przeczytaniu tego: https://msdn.microsoft.com/en-us/library/ms173147(VS.80).aspx

od MyCLIObject nie jest tego samego typu jak RoundtripXml, chyba że porównanie w MyCLIObject szuka tego typu RoundtripXml, chciałbym oczekiwać, że zawsze powrócić false.

można nazwać:

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

wtedy zobaczyć, co dzieje się w wersji klasy RoundtripXml dnia Equals() (zakładając, że nie jest CPP/native).

12
  1. Przejdź do strony właściwości dla projektu badanej jednostki (kliknij prawym przyciskiem myszy projektu w Solution Explorer, a następnie kliknij „Właściwości”)
  2. przejdź do zakładki „Debug” (4 z u góry na liście po lewej stronie)
  3. Włączone pole wyboru "Włącz debugowanie kodu natywnego"
  4. Debuguj test jednostki - możesz ustawić punkty przerwania w natywnym lub zarządzanym kodzie, a możesz przejść do dowolnego rodzaju kod.

Po prostu miałem ten sam problem co ty i mogłem sprawić, żeby działał, wykonując te czynności. Przed włączeniem tego pola wyboru nie działało. Dla przypomnienia, używam aktualizacji VS2013 4.

enter image description here