Debuggen von .NET Core unter Linux mithilfe von SSH durch Anhängen an einen Prozess

Ab Visual Studio 2017 können Sie den Debugger an Prozesse in .NET Core und .NET 5 und höher, die auf einer Linux-Bereitstellung (lokal oder remote) ausgeführt werden, über SSH anfügen. In diesem Artikel wird beschrieben, wie Sie Debuggen einrichten und wie es erfolgt. Weitere Informationen zu Debuggingszenarios mit Docker-Containern finden Sie stattdessen unter Anfügen an einen in einem Docker-Container ausgeführten Prozess und unter Containertools. Informationen zum Debuggen von Linux in WSL 2 über Visual Studio (ohne Anfügen an den Prozess) finden Sie unter Debuggen von .NET Core-Apps in WSL 2 mit Visual Studio.

Hinweis

Zum Debuggen von Linux-Systemen, die in Azure Kubernetes Service (AKS) ausgeführt werden, wird Bridge to Kubernetes anstelle einer Anfügung an den Prozess empfohlen.

Voraussetzungen

  • Auf dem Linux-Server müssen Sie den SSH-Server installieren. Verwenden Sie zum Entpacken und Installieren curl oder wget. Unter Ubuntu können Sie beispielsweise Folgendes ausführen:

    sudo apt-get install openssh-server unzip curl
    

    SFTP und SSH müssen aktiviert sein. Die meisten SSH-Distributionen installieren und aktivieren SFTP standardmäßig, aber das ist nicht immer der Fall.

  • Installieren Sie auf dem Linux-Server die .NET-Runtime unter Linux, und suchen Sie die Seite, die mit Ihrer Linux-Distribution (z. B. Ubuntu) übereinstimmt. Das .NET SDK ist nicht erforderlich.

  • Ausführliche ASP.NET Core-Anweisungen finden Sie unter Hosten von ASP.NET Core unter Linux mit Nginx und Hosten von ASP.NET Core unter Linux mit Apache.

Vorbereiten der Anwendung für das Debuggen

Bereiten Sie Ihre Anwendung wie folgt für das Debuggen vor:

  • Verwenden Sie beim Erstellen der Anwendung ggf. eine Debugkonfiguration. Das Debuggen einer Releasekonfiguration ist weitaus schwieriger als von Code, der für das Debuggen kompiliert wurde. Wenn Sie eine Releasekonfiguration verwenden müssen, deaktivieren Sie zuerst „Nur eigenen Code“. Um diese Einstellung zu deaktivieren, wählen Sie Tools>Optionen>Debuggen aus, und deaktivieren Sie dann Nur meinen Code aktivieren.
  • Stellen Sie sicher, dass Ihr Projekt für die Erstellung portierbarer PDB-Dateien (Standardeinstellung) konfiguriert ist, und stellen Sie sicher, dass sich die PDB-Dateien am gleichen Speicherort wie die DLL befinden. Um dies in Visual Studio zu konfigurieren, klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie dann Eigenschaften>Allgemein>Debugsymbole aus.
  • Stellen Sie sicher, dass Ihr Projekt für die Erstellung portierbarer PDB-Dateien (Standardeinstellung) konfiguriert ist, und stellen Sie sicher, dass sich die PDB-Dateien am gleichen Speicherort wie die DLL befinden. Um dies in Visual Studio zu konfigurieren, klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie dann Eigenschaften>Build>Erweitert>Debuginformationen aus.

Erstellen und Bereitstellen der Anwendung

Sie können mehrere Methoden verwenden, um die App vor dem Debuggen bereitzustellen. Sie haben unter anderem folgende Möglichkeiten:

  • Kopieren Sie die Quellen auf den Zielcomputer, und kompilieren Sie mit dotnet build auf dem Linux-Computer.

  • Erstellen Sie die App unter Windows, und übertragen Sie die Buildartefakte dann auf den Linux-Computer. (Die Buildartefakte bestehen aus der Anwendung selbst, den portierbaren PDB-Dateien, allen Laufzeitbibliotheken, von denen sie abhängig sein kann, und der Datei .deps.json.)

Starten Sie die Anwendung, sobald die App bereitgestellt wurde.

Fügen Sie den Debugger an.

Sie können den Debugger anfügen, sobald die Anwendung auf dem Linux-Computer ausgeführt wird.

  1. Klicken Sie in Visual Studio auf Debuggen>An Prozess anfügen... .

  2. Wählen Sie in der Liste Verbindungstyp den Typ SSH aus.

  3. Ändern Sie das Verbindungsziel in die IP-Adresse oder den Hostnamen des Zielcomputers.

    Wenn Sie noch keine Anmeldeinformationen angegeben haben, werden Sie aufgefordert, ein Kennwort und/oder eine private Schlüsseldatei einzugeben. Weitere Informationen zur Verwendung einer Datei mit privatem Schlüssel finden Sie unter Einrichten einer Remoteverbindung.

    Es gibt keine zu konfigurierenden Port-Anforderungen, außer dem Port, auf dem der SSH-Server ausgeführt wird.

  4. Suchen Sie den Prozess, den Sie debuggen möchten.

    Der Code wird entweder in einem eindeutigen Prozessnamen oder in einem Prozess mit dem Namen „dotnet“ ausgeführt. Um den gewünschten Prozess zu finden, überprüfen Sie die Spalte Titel, in der die Befehlszeilenargumente für den Prozess angezeigt werden.

    Im folgenden Beispiel sehen Sie eine Liste der Prozesse von einem Linux-Remotecomputer über einen SSH-Transport, die im Dialogfeld An Prozess anfügen angezeigt wird.

    Screenshot des Prozesses „Anfügen an Linux“.

    Screenshot des Prozesses „Anfügen an Linux“.

  5. Wählen Sie Anfügenaus.

    Wählen Sie im angezeigten Dialogfeld den Codetyp aus, den Sie debuggen möchten. Wählen Sie Verwaltet (.NET Core für Unix) aus.

  6. Debuggen Sie die App mithilfe von Visual Studio-Debugfunktionen.

    Im folgenden Beispiel wird der Visual Studio-Debugger an einem Breakpoint im Code angehalten, der auf einem Linux-Remotecomputer ausgeführt wird.

    Screenshot: Erreichen eines Breakpoints

    Screenshot: Erreichen eines Breakpoints