„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Verbessertes &#printf&#-Debugging

Verbessertes &#printf&#-Debugging

Veröffentlicht am 03.11.2024
Durchsuche:152

Eine der gebräuchlichsten Debugging-Techniken, das „printf“-Debugging, ist besonders beliebt, weil die meisten Leute es intuitiv erlernen, wenn sie ihre ersten Programme schreiben.

'printf'-Debugging ist sehr einfach, da Sie dafür keine speziellen Tools benötigen. Wenn Sie auf die ersten Fehler stoßen, noch bevor Sie wissen, was ein Debugger ist, ist es selbstverständlich, Ihr Programm Schritt für Schritt Variablen drucken zu lassen, damit Sie die Ausführung in der Konsole verfolgen können.

Obwohl es sich um eine der grundlegendsten Debugging-Techniken handelt, wird sie auch häufig von erfahrenen Entwicklern verwendet. Es kann Ihnen dabei helfen, jede Art von Problem zu untersuchen, z. B. suboptimale Routinen, inkonsistente Zustände, Multithreading-Probleme und mehr.

Wie ich bereits erwähnt habe, erfordert diese Technik keine Verwendung spezieller Tools, wie z. B. einer IDE. Wenn Sie jedoch eines verwenden, können Sie damit den Programmstatus noch effizienter aufzeichnen.

Hinweis: Dieser Artikel zeigt Funktionen von IntelliJ IDEA. Ähnliche Funktionen sind möglicherweise in anderen IDEs verfügbar oder nicht. Wenn Sie ein anderes Tool verwenden, prüfen Sie in dessen Dokumentation, ob diese Funktionen ebenfalls vorhanden sind.

Live-Vorlagen

IntelliJ IDEA bietet Live-Vorlagen für die gängigsten Debug-Protokollierungsmuster. Um eine Live-Vorlage für die Debug-Protokollierung zu verwenden, geben Sie die entsprechende Abkürzung ein und drücken Sie die Tabulatortaste. IntelliJ IDEA generiert die Druckanweisung und fügt sie in den Cursor ein.

Sehen wir uns ein paar Beispiele an.

Registrieren Sie Methodenparameter

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    // escriba 'soutp' aquí, luego presione Tab

    return null;
}

Generierter Code:

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    System.out.println("in = "   in   ", mask = "   mask   ", newColor = "   newColor);

    return null;
}

Werte registrieren

public static double coolMethod(double parameter) {
    double a = Math.random();
    double b = Math.random();

    // escriba 'soutv' aquí, presione Tab y luego seleccione el valor

    return a * b * parameter;
}

Generierter Code:

public static double coolMethod(double parameter) {
    double a = Math.random();
    double b = Math.random();

    System.out.println("b = "   b);

    return a * b * parameter;
}

Methodeneinträge registrieren

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    // escriba 'soutm' aquí

    return null;
}

Generierter Code:

public static BufferedImage recolor(BufferedImage in, BufferedImage mask, int newColor) {

    System.out.println("ImageUtils.recolor");

    return null;
}

Haltepunkte protokollieren

Einer der Nachteile des Debuggens mit Druckanweisungen besteht darin, dass sie den Aufwand für die manuelle Verwaltung mit sich bringen. Sie können sie nicht schnell ein- und ausschalten, und Sie möchten auf keinen Fall den Fehler machen, sie auszuliefern und in der Produktion laufen zu lassen.

Aus diesem Grund würde ich die Verwendung von Protokollierungshaltepunkten empfehlen, wenn Sie etwas zu Debugging-Zwecken protokollieren müssen, da diese viel einfacher zu handhaben sind.

Depuración

Um einen Protokollierungshaltepunkt festzulegen, halten Sie die Umschalttaste gedrückt und klicken Sie dann in den Rand. Im Gegensatz zu einem normalen Haltepunkt unterbricht er die Programmausführung nicht, sondern gibt die Ausgabe stattdessen auf der Konsole aus.

Standardmäßig ist dies eine Meldung, die angibt, dass das Programm diese Zeile erreicht hat. Sie können auch die Optionen neben dem Kontrollkästchen Auswerten und protokollieren in den Haltepunkteinstellungen verwenden, wenn Sie lieber den aktuellen Stack-Trace oder das Ergebnis eines benutzerdefinierten Ausdrucks protokollieren möchten.

Depuración

Hinweis: Seien Sie vorsichtig bei der Protokollierung von Ausdrücken. Die Bewertung derjenigen, die Nebenwirkungen verursachen, kann eine Quelle für neue Fehler oder unerwartetes Verhalten sein. Darüber hinaus können sie bei Verwendung in Hot-Code Ihr Programm erheblich verlangsamen.

Wenn es zahlreiche Protokoll-Haltepunkte gibt, können Sie diese im Dialogfeld Haltepunkte verfolgen und verwalten (Ausführen | Haltepunkte anzeigen):

Depuración

Sie können sogar benutzerdefinierte Gruppen für sie erstellen:

Depuración

Dies hilft Ihnen, Ihre Haltepunkte zentral zu verwalten. Sie können beispielsweise eine Gruppe erstellen, die sich auf einen bestimmten Fehler bezieht, und diese für später speichern. Wenn das Problem verschwindet, schalten Sie es einfach aus. Auf diese Weise müssen Sie nicht alles von Grund auf neu erstellen, wenn das Problem erneut auftritt. Sie schalten die Gruppe einfach wieder ein.

Häufiges Ereignisprotokoll

Bei Ereignissen, die während der Programmausführung häufig auftreten, kann es überflüssig sein, jedes Ereignis einzeln zu protokollieren. Dadurch wird nicht nur die Konsole mit Meldungen überschwemmt, sondern auch viele E/A-Interaktionen können die Debugging-Sitzung erheblich verlangsamen.

Depuración

Für diese Veranstaltungen kann es sinnvoll sein, die Funktion Passanzahl zu verwenden. Sie können im Dialogfeld Haltepunkte.

darauf zugreifen.

Depuración

Nachdem Sie Pass count auf einen bestimmten Wert festgelegt haben, wird der entsprechende Haltepunkt nur jedes Mal ausgelöst, wenn er n-mal erreicht wird, um sicherzustellen, dass die Protokollierung nicht zu einer Belästigung wird.

Zusammenfassung

Ob Sie Druckanweisungen einfügen oder Protokollierungshaltepunkte zum Debuggen festlegen, moderne Tools verfügen über Funktionen, die Ihr Debugging-Erlebnis verbessern. Mit diesem Beitrag wollte ich sicherstellen, dass Sie diese kleinen Tricks kennen, die den gesamten Prozess angenehmer machen.

Wenn Sie an weiteren Artikeln zum Thema Debuggen und Profiling interessiert sind, schauen Sie sich einige meiner anderen Artikel an:

  • Debugger.godMode() – Hacken Sie eine JVM-Anwendung mit dem Debugger
  • Fehlerbehebung beim langsamen Debugger
  • Was stimmt nicht mit createDirectories()? - Leitfaden zur CPU-Profilerstellung
  • Debug ohne Haltepunkte
Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/flounder4130/depuracion-printf-mejorada-26l1?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3