Debuggen von DLLs in Visual Studio (C#, C++, Visual Basic, F#)Debug DLLs in Visual Studio (C#, C++, Visual Basic, F#)

Eine DLL (Dynamic-Link Library) ist eine Bibliothek, die Code und Daten enthält, die von mehreren Apps verwendet werden können.A DLL (dynamic-link library) is a library that contains code and data that can be used by more than one app. Sie können mit Visual Studio DLLs erstellen, kompilieren, konfigurieren und debuggen.You can use Visual Studio to create, build, configure, and debug DLLs.

Erstellen einer DLLCreate a DLL

Die folgenden Visual Studio-Projektvorlagen können DLLs erstellen:The following Visual Studio project templates can create DLLs:

  • C#, Visual Basic oder F#: KlassenbibliothekC#, Visual Basic, or F# Class Library
  • C# oder Visual Basic: Windows Forms-Steuerelementbibliothek (WCF)C# or Visual Basic Windows Forms Control (WCF) Library
  • C++-Dynamic Link Library (DLL)C++ Dynamic-Link Library (DLL)

Weitere Informationen finden Sie unter MFC Debugging Techniques (MFC-Debugverfahren).For more information, see MFC debugging techniques.

Das Debuggen einer WCF-Bibliothek entspricht weitgehend dem Debuggen einer Klassenbibliothek.Debugging a WCF Library is similar to debugging a Class Library. Weitere Informationen dazu finden Sie unter Windows Forms-Steuerelemente.For details, see Windows Forms Controls.

Normalerweise wird eine DLL von einem anderen Projekt aufgerufen.You usually call a DLL from another project. Wenn Sie das aufrufenden Projekt debuggen, können Sie in Abhängigkeit von der DLL-Konfiguration den DLL-Code schrittweise durchlaufen und debuggen.When you debug the calling project, depending on the DLL configuration, you can step into and debug the DLL code.

DLL-DebugkonfigurationDLL debug configuration

Wenn Sie eine Visual Studio-Projektvorlage zum Erstellen einer App verwenden, werden die erforderlichen Einstellungen für die Debug- und Releasekonfigurationen automatisch durch Visual StudioVisual Studio festgelegt.When you use a Visual Studio project template to create an app, Visual StudioVisual Studio automatically creates required settings for Debug and Release build configurations. Sie können diese Einstellungen ggf. ändern.You can change these settings if necessary. Weitere Informationen finden Sie in den folgenden Artikeln:For more information, see the following articles:

Festlegen des C++-Attributs „Debuggable“Set C++ DebuggableAttribute

Damit der Debugger an eine C++-DLL angefügt werden kann, muss der C++-Code DebuggableAttribute ausgeben.For the debugger to attach to a C++ DLL, the C++ code must emit DebuggableAttribute.

Zum Festlegen vonDebuggableAttribute:To set DebuggableAttribute:

  1. Wählen Sie das C++-DLL-Projekt im Projektmappen-Explorer aus, und wählen Sie das Symbol Eigenschaften aus, oder klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie dann Eigenschaften aus.Select the C++ DLL project in Solution Explorer and select the Properties icon, or right-click the project and select Properties.

  2. Wählen Sie im Bereich Eigenschaften unter Linker > Debuggen die Option Ja (/ASSEMBLYDEBUG) für Debugfähige Assembly aus.In the Properties pane, under Linker > Debugging, select Yes (/ASSEMBLYDEBUG) for Debuggable Assembly.

Weitere Informationen finden Sie unter /ASSEMBLYDEBUG.For more information, see /ASSEMBLYDEBUG.

Festlegen von C/C++-DLL-DateispeicherortenSet C/C++ DLL file locations

Zum Debuggen einer externen DLL muss ein aufrufendes Projekt in der Lage sein, die DLL, ihre PDB-Datei und alle anderen Dateien zu finden, die die DLL benötigt.To debug an external DLL, a calling project must be able to find the DLL, its .pdb file, and any other files the DLL requires. Sie können eine benutzerdefinierte Buildaufgabe erstellen, um diese Dateien in den <project folder>\Debug-Ausgabeordner zu kopieren, oder Sie können die Dateien manuell dorthin kopieren.You can create a custom build task to copy these files to your <project folder>\Debug output folder, or you can copy the files there manually.

Für C/C++-Projekte können Sie Header- und LIB-Dateispeicherorte in den Projekteigenschaftenseiten festlegen, anstatt sie in den Ausgabeordner zu kopieren.For C/C++ projects, you can set header and LIB file locations in the project property pages, instead of copying them to the output folder.

So legen Sie C/C++-Header- und LIB-Dateispeicherorte fest:To set C/C++ header and LIB file locations:

  1. Wählen Sie das C/C++-DLL-Projekt im Projektmappen-Explorer aus, und wählen Sie das Symbol Eigenschaften aus, oder klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie dann Eigenschaften aus.Select the C/C++ DLL project in Solution Explorer and select the Properties icon, or right-click the project and select Properties.

  2. Wählen Sie oben im Bereich Eigenschaften unter Konfiguration die Option Alle Konfigurationen aus.At the top of the Properties pane, under Configuration, select All Configurations.

  3. Geben Sie unter C/C++ > Allgemein > Zusätzliche Includeverzeichnisse den Ordner an, der die Headerdateien enthält.Under C/C++ > General > Additional Include Directories, specify the folder that has header files.

  4. Geben Sie unter Linker > Allgemein > Zusätzliche Bibliotheksverzeichnisse den Ordner mit LIB-Dateien an.Under Linker > General > Additional Libraries Directories, specify the folder that has LIB files.

  5. Geben Sie unter Linker > Eingabe > Zusätzliche Abhängigkeiten den vollständigen Pfad und Dateinamen für die LIB-Dateien an.Under Linker > Input > Additional Dependencies, specify the full path and filename for the LIB files.

  6. Klicken Sie auf OK.Select OK.

Weitere Informationen zu C++-Projekteinstellungen finden Sie unter Referenz zur C++ Windows-Eigenschaftenseite.For more information on C++ project settings, see Windows C++ property page reference.

Erstellen einer DebugversionBuild a Debug version

Stellen Sie sicher, dass Sie eine Debugversion der DLL erstellen, bevor Sie mit dem Debuggen beginnen.Make sure to build a Debug version of the DLL before you start debugging. Zum Debuggen einer DLL muss eine aufrufende App in der Lage sein, ihre PDB-Datei und alle anderen Dateien zu finden, die die DLL benötigt.To debug a DLL, a calling app must be able to find its .pdb file and any other files the DLL requires.

Sie können eine benutzerdefinierte Buildaufgabe erstellen, um diese DLL-Dateien in den <calling project folder>\Debug-Ausgabeordner zu kopieren, oder Sie können die Dateien manuell dorthin kopieren.You can create a custom build task to copy the DLL files to your <calling project folder>\Debug output folder, or you can copy the files there manually.

Stellen Sie sicher, dass die DLL am richtigen Speicherort aufgerufen wird.Make sure to call the DLL in its correct location. Dies mag offensichtlich erscheinen, aber wenn eine aufrufenden App eine andere Kopie der DLL findet und lädt, wird der Debugger nie die von Ihnen festgelegten Haltepunkte erreichen.This may seem obvious, but if a calling app finds and loads a different copy of the DLL, the debugger will never hit the breakpoints you set.

Debuggen einer DLLDebug a DLL

Eine DLL kann nicht direkt ausgeführt werden.You can't run a DLL directly. Sie muss von einer App aufgerufen werden, in der Regel von einer EXE-Datei.It must be called by an app, usually an .exe file. Weitere Informationen dazu finden Sie unter Visual Studio-Projekte: C++.For more information, see Visual Studio projects - C++.

Um eine DLL zu debuggen, können Sie das Debuggen aus der aufrufenden App starten oder aus dem DLL-Projekt debuggen, indem Sie die aufrufenden App angeben.To debug a DLL, you can start debugging from the calling app, or debug from the DLL project by specifying its calling app. Sie können auch das Direktfenster des Debuggers verwenden, um DLL-Funktionen oder -Methoden zur Entwurfszeit auszuwerten, ohne eine aufrufende App zu verwenden.You can also use the debugger Immediate window to evaluate DLL functions or methods at design time, without using a calling app.

Weitere Informationen dazu finden Sie unter Erster Einblick in den Debugger.For more information, see First look at the debugger.

Starten des Debuggens aus der aufrufenden AppStart debugging from the calling app

Die folgenden Apps können eine DLL aufrufen:The app that calls a DLL can be:

  • Eine App aus einem Visual StudioVisual Studio-Projekt in derselben oder einer anderen Projektmappe als die DLL.An app from a Visual StudioVisual Studio project in the same or a different solution from the DLL.
  • Eine vorhandene App, die bereits auf einem Test- oder Produktionscomputer bereitgestellt wurde und dort ausgeführt wird.An existing app that is already deployed and running on a test or production computer.
  • Eine App im Web, auf die über eine URL zugegriffen wird.Located on the web and accessed through a URL.
  • Eine Web-App mit einer Webseite, die die DLL einbettet.A web app with a web page that embeds the DLL.

Zum Debuggen einer DLL aus einer aufrufenden App können Sie folgendermaßen vorgehen:To debug a DLL from a calling app, you can:

  • Öffnen Sie das Projekt für die aufrufenden App, und starten Sie das Debuggen, indem Sie Debuggen > Debuggen starten auswählen oder F5 drücken.Open the project for the calling app, and start debugging by selecting Debug > Start Debugging or pressing F5.

    oderor

  • Fügen Sie den Debugger an eine vorhandene App an, die bereits auf einem Test- oder Produktionscomputer bereitgestellt wurde und dort ausgeführt wird.Attach to an app that is already deployed and running on a test or production computer. Verwenden Sie diese Methode für DLLs auf Websites oder in Web-Apps.Use this method for DLLs on websites or in web apps. Weitere Informationen finden Sie unter Vorgehensweise: Anfügen an einen laufenden Prozess.For more information, see How to: Attach to a running process.

Bevor Sie mit dem Debuggen der aufrufenden App beginnen, legen Sie einen Breakpoint in der DLL fest.Before you start debugging the calling app, set a breakpoint in the DLL. Weitere Informationen finden Sie unter Verwenden von Breakpoints.See Using breakpoints. Sobald der DLL-Haltepunkt erreicht wird, können Sie den Code schrittweise ausführen und die in den einzelnen Zeilen ausgeführten Aktionen beobachten.When the DLL breakpoint is hit, you can step through the code, observing the action at each line. Weitere Informationen finden Sie unter Navigieren im Code im Debugger.For more information, see Navigate code in the debugger.

Während des Debuggens können Sie das Fenster Module verwenden, um die DLLs und EXE-Dateien zu überprüfen, die von der App geladen werden.During debugging, you can use the Modules window to verify the DLLs and .exe files the app loads. Wählen Sie zum Öffnen des Fensters Module während des Debuggens Debuggen > Windows > Module aus.To open the Modules window, while debugging, select Debug > Windows > Modules. Weitere Informationen finden Sie unter Vorgehensweise: Verwenden des Modulfensters.For more information, see How to: Use the Modules window.

Verwenden des „Direktfensters“Use the Immediate window

Sie können das Direktfenster verwenden, um DLL-Funktionen oder -Methoden zur Entwurfszeit auszuwerten.You can use the Immediate window to evaluate DLL functions or methods at design time. Das Direktfenster übernimmt die Rolle einer aufrufenden App.The Immediate window plays the role of a calling app.

Hinweis

Sie können das Direktfenster zur Entwurfszeit mit den meisten Projekttypen verwenden.You can use the Immediate window at design time with most project types. Dies wird für SQL, Webprojekte oder Skripts nicht unterstützt.It's not supported for SQL, web projects, or script.

Um beispielsweise eine Methode mit dem Namen Test in der Klasse Class1 zu testen, gehen Sie folgendermaßen vor:For example, to test a method named Test in class Class1:

  1. Öffnen Sie bei geöffneter DLL-Projekt das Direktfenster, indem Sie Debuggen > Windows > Direkt auswählen oder STRG+ALT+I drücken.With the DLL project open, open the Immediate window by selecting Debug > Windows > Immediate or pressing Ctrl+Alt+I.

  2. Instanziieren Sie ein Objekt vom Typ Class1, indem Sie den folgenden C#-Code in das Direktfenster eingeben und die EINGABETASTE drücken.Instantiate an object of type Class1 by typing the following C# code in the Immediate window and pressing Enter. Dieser verwaltete Code kann mit entsprechenden Syntaxänderungen in C# und Visual Basic eingesetzt werden:This managed code works for C# and Visual Basic, with appropriate syntax changes:

    Class1 obj = new Class1();
    

    In C# müssen alle Namen vollqualifiziert sein.In C#, all names must be fully qualified. Alle Methoden oder Variablen müssen sich im aktuellen Gültigkeitsbereich und Kontext befinden, wenn der Sprachdienst versucht, den Ausdruck auszuwerten.Any methods or variables must be in the current scope and context when the language service tries to evaluate the expression.

  3. Vorausgesetzt, dass Test einen int -Parameter annimmt, werten Sie Test mit dem Direktfenster aus:Assuming that Test takes one int parameter, evaluate Test using the Immediate window:

    ?obj.Test(10);
    

    Das Ergebnis wird im Direktfenster ausgegeben.The result prints in the Immediate window.

  4. Sie können mit dem Debuggen von Test fortfahren, indem Sie einen Haltepunkt einfügen und anschließend die Funktion erneut auswerten.You can continue to debug Test by placing a breakpoint inside it, and then evaluating the function again.

    Sobald der Breakpoint erreicht ist, können Sie Test in Einzelschritten durchlaufen.The breakpoint will be hit, and you can step through Test. Nach der Ausführung von Test befindet sich der Debugger wieder im Entwurfsmodus.After execution has left Test, the debugger will be back in design mode.

Debuggen im gemischten ModusMixed-mode debugging

Sie können eine aufrufende App für eine DLL in verwaltetem oder nativem Code schreiben.You can write a calling app for a DLL in managed or native code. Wenn Ihre native App eine verwaltete DLL aufruft und Sie beide debuggen möchten, können Sie sowohl die verwalteten als auch die nativen Debugger in den Projekteigenschaften aktivieren.If your native app calls a managed DLL and you want to debug both, you can enable both the managed and native debuggers in the project properties. Die genaue Vorgehensweise hängt davon ab, ob Sie den Debugvorgang über das DLL-Projekt oder über das Projekt der aufrufende Anwendung starten möchten.The exact process depends on whether you want to start debugging from the DLL project or the calling app project. Weitere Informationen finden Sie unter Vorgehensweise: Debuggen im gemischten Modus.For more information, see How to: Debug in mixed mode.

Sie können eine native DLL auch aus einem verwalteten aufrufenden Projekt debuggen.You can also debug a native DLL from a managed calling project. Weitere Informationen finden Sie unter Vorgehensweise: Debuggen von verwaltetem und nativem Code.For more information, see How to debug managed and native code.

Siehe auchSee also