Od kilku dni użeram się z projektem WinRT C#/XAML, który korzysta z projektu WinRT C++. Ta sytuacja rodzi u mnie wiele problemów, z którymi sobię jakoś daję powoli radę. Jednym z WTF, na które natrafiłem to problem debugowania mieszanej solucji. A ponieważ ja ostatni raz w C++ pisałem dekadę temu to współczynnik WTF per minute mam wysoki.
C# vs C++
Jest projekt aplikacji WinRT C#/XAML, która ma referencję do biblioteki WinRT C++ (a dokładnie Windows Runtime Component w Visual C++).
Poniżej przykładowa klasa w c++:
#pragma once using namespace Windows::Foundation; namespace CppWinRTComponentDll { public ref class CalculatorSample sealed { public: int Add(int x, int y); int Sub(int x, int y); int Mul(int x, int y); }; }
A tutaj wywołanie powyższego z poziomu C#:
var calculator = new CalculatorSample(); var addResult = calculator.Add(10, 20); var SubResult = calculator.Sub(20, 10); var MultiplyResult = calculator.Mul(10, 20);
Z C# wywołuję metodę C++ i chciałbym to zdebugować np. ustawiając breakpoint w metodzie C++, lub wchodząc do niej przez F11 (Step into). Ale okazuje się, że „by default” to nie działa.
Rozwiązanie
Nalezy otworzyć właściwości projektu startowego (StartUp Project) czyli u mnie jest to C#. We właściwościach przejdź do zakładki Debug i na samym dole zmień Debugger type na Mixed (Managed and Native).