Moja aplikacja jest połączeniem kodu C# i C++. Moduł startowy napisany w C# ładuje podczas fazy inicjalizacji moduł C++ poprzez mechanizm COM (Component Object Model). Wszystko działało poprawnie, dopóki nie zdecydowałem się dodać do C# części usługi wcf. Wszystkie wywołania serwisowe wcf są kierowane do kodu C++ za pomocą COM. Po dodaniu nowych metod zauważyłem wycieki pamięci w oknie wyjściowym. Więc dodałem breakpoint do desktruktora klasy C++, jak widać na zrzucie ekranu. Od tego momentu dziwne rzeczy zaczęły się dziać. Po osiągnięciu punktu przerwania programu niespodziewanie ulega awarii. Pierwszą dziwną rzeczą jest to, że kiedy uruchamiam program bez ustawiania punktu przerwania, kończy się on łaskawie. Drugą dziwną rzeczą jest to, że sposób, w jaki program się zawiesza, działa tak, jakby działał bez debuggera. Po kliknięciu przycisku "Otwórz w debugerze" (lub coś podobnego) pojawia się komunikat o błędzie: "Program jest już otwarty w debugerze." Brak komunikatu w oknie wyjściowym, który mógłby wskazać mi źródło błędu, żaden podejrzany kod. Dodanie okna komunikatu do początku destruktora powoduje wyświetlenie części ułamka sekundy, a następnie zamknięcie całej aplikacji (bez dodawania możliwości użytkownika do przeczytania tego, co jest wyświetlane w oknie komunikatu). Rozpaczliwie szukając jakiejkolwiek wskazówki.Dziwne awarie podczas debugowania obiektu COM destructor
P.S. Problemy występują tylko wtedy, gdy metoda wcf została wywołana co najmniej raz. Nie zależy, czy przepływ programu w tym konkretnym wywołaniu został przekierowany na poziom C++, czy też nie.
Spróbuj użyć WinDbg zamiast debugera VS, aby uzyskać więcej informacji na temat awarii – SpaceghostAli