Zum Inhalt

Debugging

Was ist Debugging

Debugging ist ein Prozess, bei dem Sie die in Ihrem Code vorhandenen Fehler erkennen und beheben können.

Jedes .NET-Programm kann in zwei verschiedenen Modi ausgeführt werden.

  • Release-Modus – wird typischerweise in Produktionsumgebungen verwendet. Bei dessen Verwendung aktiviert .NET verschiedene Compiler- und Just-in-Time-Optimierungen, die die Geschwindigkeit verbessern, mit der Ihr Code ausgeführt wird, und seinen Speicherbedarf reduzieren.
  • Debug-Modus – wird hauptsächlich in Entwicklungs- und Testumgebungen verwendet. Alle Optimierungen sind deaktiviert, und Sie können .NET-Debugger an Ihren Code anhängen.

Bei der Arbeit mit .NET-Bibliotheken und -Anwendungen umfasst das Debugging Folgendes:

  • Ausführen Ihres Codes im Debug-Modus
  • Anhängen eines .NET-Debuggers an Ihren Code
  • Festlegen von Code-Breakpoints, um anzugeben, ob der Ausführungsfluss pausieren soll
  • Verfolgen des Code-Ausführungsflusses mit geplanten Pausen an Breakpoints

.NET-Debugger definieren

.NET-Debugger sind Programme, die Runtime-APIs verwenden. Diese APIs wiederum ermöglichen die Steuerung des Ausführungsflusses von .NET-Prozessen. Mit anderen Worten: Sie können die Ausführung an bestimmten Breakpoints pausieren und verschiedene Zustände speichern (einschließlich der Werte, die einzelne Variablen während dieser Zustände enthalten).

Algos im Debug-Modus erstellen

Wie oben besprochen, beinhaltet das Debuggen eines cBots oder eines Indikators das Erstellen dieser Erweiterung im Debug-Modus. Standardmäßig wird Ihre Erweiterung im Release-Modus ausgeführt, wenn Sie auf den Button Erstellen in der cTrader-Benutzeroberfläche klicken, um Code-Optimierungen zu ermöglichen.

Um Ihren cBot oder Indikator im Debug-Modus zu erstellen, müssen Sie entweder die .NET CLI oder externe IDEs wie Visual Studio verwenden. In dieser Dokumentation zeigen wir den Debug-Prozess, wie er in Visual Studio abläuft. Dieser Prozess kann jedoch auch in anderen IDEs mit geringfügigen Änderungen repliziert werden.

Installieren Sie die neueste Version von Visual Studio auf Ihrem Rechner und führen Sie die folgenden Aktionen durch:

  • Öffnen Sie Ihren Indikator oder cBot in Visual Studio, indem Sie die Option In Visual Studio bearbeiten im Dropdown-Menü Bearbeiten in... oben im Code-Editor-Fenster auswählen.

  • Wählen Sie im Menü über dem Visual Studio Code-Editor Debug aus.

Image title

  • Erstellen Sie Ihren cBot oder Indikator im Debug-Modus.

Einen cBot oder Indikator debuggen

Jetzt, da Sie wissen, wie Sie einen cBot oder Indikator im Debug-Modus erstellen, konzentrieren wir uns darauf, wie Sie ihn tatsächlich debuggen.

  • Ändern Sie die Zugangsrechte Ihres Indikators oder cBots auf FullAccess.

  • Hängen Sie einen Debugger an den laufenden Prozess Ihres Indikators oder cBots an. Sie können dies tun, indem Sie die Methode System.Diagnostics.Debugger.Launch() aufrufen.

1
2
3
4
5
6
7
8
9
protected override void OnStart()
{
    var result = System.Diagnostics.Debugger.Launch();

    if (result is false)
    {
        Print("Debugger launch failed");
    }    
}
1
2
3
4
5
6
7
8
9
protected override void Initialize()
{
    var result = System.Diagnostics.Debugger.Launch();

    if (result is false)
    {
        Print("Debugger launch failed");
    }    
}

Hinweis

Die Methode System.Diagnostics.Debugger.Launch() muss in der Methode OnStart() (für einen cBot) oder der Methode Initialize() (für einen Indikator) aufgerufen werden.

  • Führen Sie eine neue Instanz Ihres cBots oder Indikators aus. Wenn bereits eine Instanz läuft, wählen Sie sie in der Benutzeroberfläche aus. Sie sollten zu Visual Studio weitergeleitet werden mit einer Aufforderung, einen Debugger auszuwählen. Tun Sie dies und klicken Sie auf OK.

Image title

Sobald das Debuggen beginnt, können Sie Breakpoints setzen, (in) Codezeilen (einsteigen) und die Aufrufliste und Variablenwerte sehen.

Eine vollständige Anleitung zum Debuggen in Visual Studio finden Sie in der Visual Studio Debugging-Dokumentation.

Die DEBUG-Präprozessor-Direktive verwenden

Sie können auch die Präprozessor-Direktive DEBUG in Ihrem cBot- oder Indikator-Code verwenden, um den Ausführungsablauf zu steuern.

Die Direktive #if DEBUG ist nützlich, wenn Sie nur einen Block oder eine Codezeile im Debug-Modus ausführen möchten.

1
2
3
4
5
6
7
8
9
protected override void OnStart()
{
#if DEBUG
    System.Diagnostics.Debugger.Launch();
    Print("Debugging");
#else
    Print("Not Debugging");
#endif
}

Im obigen Beispiel wird die Codezeile „Not Debugging" nicht kompiliert, wenn Sie Ihren cBot im Debug-Modus erstellen.

Zusätzliche Informationen zu C#-Prozessor-Direktiven finden Sie in dieser Dokumentation.