2009-11-16 25 views
31

Mam bibliotekę DLL, która została napisana w C++ i wywołana z aplikacji C#. DLL to niezarządzany kod.Nie można zdebugować niezarządzanej biblioteki DLL z C#

Gdybym skopiować DLL i jego .pdb pliki z imprezy po kompilacji do C# aplikacji wykonywania debugowania dir ja wciąż nie może trafić jakiekolwiek punkty przerwy mogę umieścić w kodzie DLL. Punkt przerwania ma dołączoną wiadomość, że "nie załadowano żadnych symboli dla tego dokumentu".

Co jeszcze muszę zrobić, aby uzyskać debugowanie w źródle dll?

mam "Tools ->Options ->Debugging ->General ->Enable tylko mój kod" Disabled. DLL jest skompilowany z "Runtime śledzenia i optymalizacje wyłącza (/ ASSEMBLYDEBUG)" i wygenerować Debug Info "Yes (/ DEBUG)"

Odpowiedz

55

Aby debugować bibliotekę C++, musisz włączyć debugowanie w trybie mieszanym w aplikacji startowej w swoim rozwiązaniu.

  • prawym przyciskiem myszy na projekt - > Właściwości
  • idź do debugowania Tab
  • zobacz „Włączanie kodu niezarządzanego debugowanie”

Pozwoli to debugowania do natywnego kodu dla scenariusza stylu F5 . Jeśli chcesz, aby włączyć go do mocowania do procesu następnie wykonaj następujące czynności w „Dołącz do procesu” Dialog

  • Wybierz proces debugowania
  • Kliknij przycisk „Wybierz ...” powyżej procesu lista
  • Kliknij „Debug te typy kodów”
  • Sprawdź zarówno zarządzany i Native
+0

Choć miałem zamiar odpowiedzieć na to, że nie był” t pewnie, czy to było takie proste, czy nie. Jeśli jest to takie proste, prawdopodobnie zawsze nadużywałem go podczas próby debugowania zarządzanego kodu C++, który łączy się z natywnym kodem. –

+2

Należy zauważyć, że jeśli projekt startowy używa innego projektu C# DLL, który faktycznie wywołuje bibliotekę DLL C++, projekt startowy musi również mieć włączone "Włączanie niezarządzanego debugowania kodu". –

+2

Wybierz rozwiązanie w Eksploratorze rozwiązań. Wybierz z> Menu | Narzędzia | opcje | Debugowanie | Ogólne i odznacz "Wymagaj plików źródłowych, aby dokładnie pasowały do ​​oryginalnej wersji" – Martin

4

Musisz włączyć niezarządzanej (Ojczysty) debugowanie.

Jeśli dołączenie do procesu po jego uruchomieniu:

Przejdź do menu Narzędzia, a następnie dołączyć do procesu, upewnij się, że masz włączone debugowanie rodzimy.

Zobaczysz tylko do odczytu pole EDIT:

przywiązują do: kod zarządzany, natywny kod [Wybierz]

Upewnij natywny kod jest tam wymieniony. Jeśli nie, dodaj go.

Jeśli zaczynają swój projekt od wewnątrz visual studio:

na własną właściwości projektu, które zaczynają się w trybie debugowania. Przejdź do Właściwości projektu, a następnie wybierz kartę debugowania.

Upewnij pole to jest zaznaczone na:

Włącz debugowanie kodu niekontrolowana

1

Po dołączeniu do procesu debugowania, trzeba określić, w jaki sposób chcesz dołączyć. Masz kilka opcji, mianowicie Managed i Native. Aby debugować kod C# za pomocą niezarządzanego C++, musisz dołączyć do procesu jako Zarządzany i Natywny (oba można wybrać jednocześnie).

0

miałem do czynienia z tym samym problemem, a nie wszystko, co było sugerowane w akceptowanych odpowiedź ale punkty przerwania w dll niezarządzanego nie było getti ng hit!

Jednak kiedy zrobiłem następujące, mogłem wreszcie debugować dll!

Wybierz rozwiązanie w Solution Explorer
Wybierz z menu | Narzędzia | Opcje | Debugging | Ogólne
odznacz „Wymagaj pliki źródłowe do dokładnie pasuje do oryginalnej wersji”

Powiązane problemy