Heim Java javaLernprogramm Verbessertes „printf'-Debugging

Verbessertes „printf'-Debugging

Aug 21, 2024 am 06:01 AM

In anderen Sprachen lesen: Englisch Español 中文

Eine der häufigsten Debugging-Techniken, das „Printf“-Debugging, ist besonders beliebt, da die meisten Menschen es intuitiv erlernen, wenn sie ihre ersten Programme schreiben.

Das Debuggen von „printf“ ist sehr einfach, da Sie dafür keine speziellen Tools benötigen. Wenn Sie sich mit Ihren ersten Fehlern befassen, fällt Ihnen natürlich, noch bevor Sie wissen, was ein Debugger ist, ein, 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, verwenden erfahrene Entwickler sie auch häufig. 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 einer IDE. Wenn Sie jedoch eines verwenden, können Sie damit den Programmstatus noch effizienter verfolgen.

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 auch dort 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 den entsprechenden Befehl ein und drücken Sie die Tabulatortaste. IntelliJ IDEA generiert die Druckanweisung und fügt sie am Cursor ein.

Schauen wir uns einige Beispiele an.

Registrieren Sie Methodenparameter

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

    // digite 'soutp' aqui, depois pressione Tab

    return null;
}
Nach dem Login kopieren

Generierter Code:

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

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

    return null;
}
Nach dem Login kopieren

Werte registrieren

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

    // digite 'soutv' aqui, pressione Tab e então selecione o valor

    return a * b * parameter;
}
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Methodeneinträge registrieren

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

    // digite 'soutm' aqui

    return null;
}
Nach dem Login kopieren

Generierter Code:

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

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

    return null;
}
Nach dem Login kopieren

Registrierungshaltepunkte

Einer der Nachteile des Debuggens mit Druckanweisungen besteht darin, dass sie den Mehraufwand für die manuelle Verwaltung mit sich bringen. Sie können sie nicht schnell ein- und ausschalten, und Sie möchten auf keinen Fall versehentlich Kompromisse eingehen und sie in der Produktion ausführen.

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

Depuração

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

Standardmäßig ist es 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.

Depuração

Hinweis: Seien Sie vorsichtig mit Registrierungsausdrü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 viele Protokollierungshaltepunkte gibt, können Sie diese im Dialogfeld Haltepunkte verfolgen und verwalten (Ausführen | Haltepunkte anzeigen):

Depuração

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

Depuração

Dies wird Ihnen helfen, 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 behoben ist, deaktivieren Sie die Gruppe. Auf diese Weise müssen Sie nicht alles von Grund auf neu erstellen, wenn das Problem erneut auftritt. Sie aktivieren die Gruppe einfach wieder.

Häufiges Ereignisprotokoll

Bei Ereignissen, die während der Programmausführung häufig auftreten, kann die Aufzeichnung jedes einzelnen Ereignisses zu teuer sein. Dadurch wird nicht nur die Konsole mit Meldungen überschwemmt, sondern auch zu viel E/A-Interaktion kann die Debug-Sitzung erheblich verlangsamen.

Depuração

Für solche Veranstaltungen kann es sinnvoll sein, die Funktion Passanzahl zu nutzen. Sie können im Dialog Haltepunkte.

darauf zugreifen.

Depuração

Sobald Sie Pass count auf einen bestimmten Wert eingestellt haben, wird der entsprechende Haltepunkt nur bei jedem n-ten Treffer ausgelöst, sodass der Rekord nicht zur Störung wird.

Zusammenfassung

Ganz gleich, 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 bei der Langsamkeit des Debuggers
  • Debuggen inaktiver Anwendungen
  • Was stimmt nicht mit createDirectories()? - CPU-Profil-Anleitung

Viel Spaß beim Debuggen!

Das obige ist der detaillierte Inhalt vonVerbessertes „printf'-Debugging. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Mar 17, 2025 pm 05:44 PM

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?

Node.js 20: wichtige Leistungssteigerung und neue Funktionen Node.js 20: wichtige Leistungssteigerung und neue Funktionen Mar 07, 2025 pm 06:12 PM

Node.js 20: wichtige Leistungssteigerung und neue Funktionen

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Mar 17, 2025 pm 05:35 PM

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?

ICEBERG: Die Zukunft von Data Lake Tabellen ICEBERG: Die Zukunft von Data Lake Tabellen Mar 07, 2025 pm 06:31 PM

ICEBERG: Die Zukunft von Data Lake Tabellen

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Problem behoben Spring Boot Snakeyaml 2.0 CVE-2022-1471 Problem behoben Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Problem behoben

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Mar 17, 2025 pm 05:43 PM

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Mar 17, 2025 pm 05:46 PM

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?

See all articles