Debugowanie bibliotek DLL w programie Visual Studio (C#, C++, Visual Basic, F#)

Biblioteka DLL (biblioteka łączy dynamicznych) to biblioteka zawierająca kod i dane, które mogą być używane przez więcej niż jedną aplikację. Za pomocą programu Visual Studio można tworzyć, kompilować, konfigurować i debugować biblioteki DLL.

Tworzenie biblioteki DLL

Następujące szablony projektów programu Visual Studio mogą tworzyć biblioteki DLL:

  • Biblioteka klas C#, Visual Basic lub F#
  • Biblioteka formantów Windows Forms w języku C# lub Visual Basic (WCF)
  • Biblioteka dynamicznych linków języka C++ (DLL)

Aby uzyskać więcej informacji, zobacz techniki debugowania MFC.

Debugowanie biblioteki WCF jest podobne do debugowania biblioteki klas. Aby uzyskać szczegółowe informacje, zobacz Kontrolki formularzy systemu Windows.

Zwykle wywołujesz bibliotekę DLL z innego projektu. Podczas debugowania projektu wywołującego, w zależności od konfiguracji biblioteki DLL, możesz przejść do kodu DLL i debugować go.

Konfiguracja debugowania bibliotek DLL

Gdy używasz szablonu projektu programu Visual Studio do tworzenia aplikacji, program Visual Studio automatycznie tworzy wymagane ustawienia konfiguracji kompilacji debugowania i wydania. W razie potrzeby możesz zmienić te ustawienia. Aby uzyskać więcej informacji, zobacz następujące artykuły:

Set C++ DebuggableAttribute

Aby debuger dołączał do biblioteki DLL języka C++, kod C++ musi emitować kod DebuggableAttribute.

Aby ustawić wartość DebuggableAttribute:

  1. Wybierz projekt DLL języka C++ w Eksplorator rozwiązań i wybierz ikonę Właściwości lub kliknij projekt prawym przyciskiem myszy i wybierz pozycję Właściwości.

  2. W okienku Właściwości w obszarze Debugowanie konsolidatora> wybierz pozycję Tak (/ASSEMBLYDEBUG) dla zestawu możliwego do debugowania.

Aby uzyskać więcej informacji, zobacz /ASSEMBLYDEBUG.

Ustawianie lokalizacji plików DLL języka C/C++

Aby debugować zewnętrzną bibliotekę DLL, projekt wywołujący musi być w stanie znaleźć bibliotekę DLL, jego plik .pdb i wszystkie inne pliki wymagane przez bibliotekę DLL. Możesz utworzyć niestandardowe zadanie kompilacji, aby skopiować te pliki do <folderu> projektu\Debuguj folder wyjściowy lub skopiować tam pliki ręcznie.

W przypadku projektów C/C++ można ustawić lokalizacje plików nagłówków i LIB na stronach właściwości projektu, zamiast kopiować je do folderu wyjściowego.

Aby ustawić lokalizacje nagłówków C/C++ i plików LIB:

  1. Wybierz projekt DLL języka C/C++ w Eksplorator rozwiązań i wybierz ikonę Właściwości lub kliknij projekt prawym przyciskiem myszy i wybierz polecenie Właściwości.

  2. W górnej części okienka Właściwości w obszarze Konfiguracja wybierz pozycję Wszystkie konfiguracje.

  3. W obszarze C/C++>General Additional Include Directories (Dodatkowe>katalogi dołączania) określ folder zawierający pliki nagłówka.

  4. W obszarze Ogólne katalogi bibliotek dodatkowych konsolidatora>>określ folder zawierający pliki LIB.

  5. W obszarze Dane wejściowe>konsolidatora>Dodatkowe zależności określ pełną ścieżkę i nazwę pliku dla plików LIB.

  6. Wybierz przycisk OK.

Aby uzyskać więcej informacji na temat ustawień projektu języka C++, zobacz Dokumentacja strony właściwości języka Windows C++.

Tworzenie wersji debugowania

Przed rozpoczęciem debugowania upewnij się, że utworzono wersję debugowania biblioteki DLL. Aby debugować bibliotekę DLL, aplikacja wywołująca musi mieć możliwość znalezienia pliku .pdb i innych plików, których wymaga biblioteka DLL.

Możesz utworzyć niestandardowe zadanie kompilacji, aby skopiować pliki DLL do <folderu projektu> wywołującego\Debuguj folder wyjściowy lub skopiować tam pliki ręcznie.

Pamiętaj, aby wywołać bibliotekę DLL w prawidłowej lokalizacji. Może to wydawać się oczywiste, ale jeśli aplikacja wywołująca znajdzie i załaduje inną kopię biblioteki DLL, debuger nigdy nie osiągnie ustawionych punktów przerwania.

Debugowanie biblioteki DLL

Nie można bezpośrednio uruchomić biblioteki DLL. Musi być wywoływana przez aplikację, zwykle plik .exe . Aby uzyskać więcej informacji, zobacz Projekty programu Visual Studio — C++.

Aby debugować bibliotekę DLL, możesz rozpocząć debugowanie z poziomu aplikacji wywołującej lub debugować z projektu DLL, określając jego aplikację wywołującą. Możesz również użyć okna natychmiastowego debugera, aby ocenić funkcje bibliotek DLL lub metody w czasie projektowania bez używania aplikacji wywołującej.

Aby uzyskać więcej informacji, zobacz Pierwsze spojrzenie na debuger.

Rozpoczynanie debugowania z poziomu aplikacji wywołującej

Aplikacja, która wywołuje bibliotekę DLL, może być:

  • Aplikacja z projektu programu Visual Studio w tym samym lub innym rozwiązaniu niż biblioteka DLL.
  • Istniejąca aplikacja, która jest już wdrożona i uruchomiona na komputerze testowym lub produkcyjnym.
  • Znajduje się w internecie i uzyskuje dostęp za pośrednictwem adresu URL.
  • Aplikacja internetowa ze stroną internetową, która osadza bibliotekę DLL.

Aby debugować bibliotekę DLL z poziomu aplikacji wywołującej, możesz:

  • Otwórz projekt dla aplikacji wywołującej i rozpocznij debugowanie, wybierając pozycję Debuguj>rozpocznij debugowanie lub naciskając klawisz F5.

    lub

  • Dołącz do aplikacji, która jest już wdrożona i uruchomiona na komputerze testowym lub produkcyjnym. Użyj tej metody dla bibliotek DLL w witrynach internetowych lub w aplikacjach internetowych. Aby uzyskać więcej informacji, zobacz How to: Attach to a running process (Instrukcje: dołączanie do uruchomionego procesu).

Przed rozpoczęciem debugowania aplikacji wywołującej ustaw punkt przerwania w pliku DLL. Zobacz Używanie punktów przerwania. Gdy punkt przerwania biblioteki DLL zostanie trafiony, możesz przejść przez kod, obserwując akcję w każdym wierszu. Aby uzyskać więcej informacji, zobacz Navigate code in the debugger (Nawigowanie po kodzie w debugerze).

Podczas debugowania możesz użyć okna Moduły, aby zweryfikować biblioteki DLL i pliki exe ładowane przez aplikację. Aby otworzyć okno Moduły, podczas debugowania wybierz pozycję Debuguj> moduły systemu Windows.> Aby uzyskać więcej informacji, zobacz Instrukcje: korzystanie z okna Moduły.

Korzystanie z okna natychmiastowego

Możesz użyć okna Natychmiastowe, aby ocenić funkcje lub metody DLL w czasie projektowania. Okno Natychmiastowe odgrywa rolę aplikacji wywołującej.

Uwaga

Okno Natychmiastowe można używać w czasie projektowania z większością typów projektów. Nie jest obsługiwana w przypadku programów SQL, projektów internetowych ani skryptów.

Aby na przykład przetestować metodę o nazwie Test w klasie Class1:

  1. Po otwarciu projektu DLL otwórz okno Natychmiastowe, wybierając pozycję Debuguj>system Windows>Natychmiast lub naciskając klawisze Ctrl+Alt+I.

  2. Utwórz wystąpienie obiektu typu Class1 , wpisując następujący kod języka C# w oknie Natychmiastowy i naciskając klawisz Enter. Ten kod zarządzany działa w językach C# i Visual Basic z odpowiednimi zmianami składni:

    Class1 obj = new Class1();
    

    W języku C#wszystkie nazwy muszą być w pełni kwalifikowane. Wszystkie metody lub zmienne muszą znajdować się w bieżącym zakresie i kontekście, gdy usługa językowa próbuje ocenić wyrażenie.

  3. Zakładając, że Test przyjmuje jeden int parametr, oceń Test przy użyciu okna Natychmiastowe :

    ?obj.Test(10);
    

    Wynik zostanie wyświetlony w oknie Natychmiastowy .

  4. Możesz kontynuować debugowanie Test , umieszczając wewnątrz niego punkt przerwania, a następnie ponownie oceniając funkcję.

    Punkt przerwania zostanie trafiony i można przejść przez Testpolecenie . Po zakończeniu Testwykonywania debuger wróci do trybu projektowania.

Debugowanie w trybie mieszanym

Możesz napisać aplikację wywołującą dla biblioteki DLL w kodzie zarządzanym lub natywnym. Jeśli aplikacja natywna wywołuje zarządzaną bibliotekę DLL i chcesz debugować obie te biblioteki, możesz włączyć zarówno zarządzane, jak i natywne debugery we właściwościach projektu. Dokładny proces zależy od tego, czy chcesz rozpocząć debugowanie z projektu DLL, czy projektu wywołującej aplikacji. Aby uzyskać więcej informacji, zobacz Instrukcje: debugowanie w trybie mieszanym.

Możesz również debugować natywną bibliotekę DLL z zarządzanego projektu wywołującego. Aby uzyskać więcej informacji, zobacz Jak debugować zarządzany i natywny kod.