Debuggen ohne Breakpoints
Andere Sprachen: English Español Français 日本語 한국어 Português 中文
In einem typischen Debugging-Szenario würdest du Breakpoints setzen, um dem Debugger mitzuteilen, wann er dein Programm anhalten soll. Ein Breakpoint entspricht normalerweise dem Moment, der den Ausgangspunkt für weitere Untersuchungen markiert.
Die Entscheidung, wo ein Breakpoint gesetzt werden soll, kann schwierig sein. Es kann Situationen geben, in denen die genaue Zeile unklar ist, oder du möglicherweise das Programm basierend auf dem Timing anstatt auf spezifischem Code anhalten möchtest.
In diesem Artikel schauen wir uns IntelliJ IDEAs Pause Program-Funktion an - eine weniger bekannte Debugging-Technik, die in einigen Szenarien äußerst mächtig sein kann, einschließlich der oben beschriebenen. Wir werden ihre Anwendungsfälle und Einschränkungen diskutieren sowie den geheimen Stepping-Trick entdecken.
Was ist Pause?
Pause Program ist eine Funktion in IntelliJ IDEAs Debugger, die es dir ermöglicht, deine Anwendung zu einem beliebigen Zeitpunkt willkürlich anzuhalten. Außerdem musst du nicht einmal mit dem Anwendungscode vertraut sein. Tatsächlich kannst du ihn einfach komplett ignorieren!
Um ein Programm anzuhalten, klicke auf Pause Program in der Debugger-Symbolleiste. Dann wird das Programm mitten in dem angehalten, was es gerade tut.
Einschränkungen
Auf den ersten Blick mag ein angehaltenes Programm genau so aussehen wie eines, das an einem Breakpoint angehalten wurde. Dies gilt jedoch nur bis zu einem gewissen Grad.
Es wäre korrekt, Pause Program als eine Art Thread-Dump plus zu betrachten. Du kannst immer noch Variablen und Threads inspizieren, wie du es normalerweise würdest, aber einige der fortgeschritteneren Debugging-Funktionen, wie Evaluate Expression, funktionieren nicht.
Anwendungsfälle
Es gibt unzählige Möglichkeiten, Pause Program zu verwenden. Oft kann es austauschbar mit traditionellen Breakpoints verwendet werden. Es gibt jedoch Szenarien, in denen die Verwendung von Pause Program ein passenderer Ansatz ist. Betrachten wir ein paar davon.
Nicht reagierende Apps
Wenn du ein UI-Einfrieren erlebst, liegt das normalerweise daran, dass der UI-Thread blockiert ist.
Pause Program könnte in diesem Fall nützlich sein, da es dir ermöglicht, die Anwendung anzuhalten, während sie nicht reagiert und den Call-Stack des UI-Threads zu untersuchen. Das ist oft ausreichend, um das Problem zu diagnostizieren.
Fehlende Quellen
Wie bereits erwähnt, ermöglicht Pause Program es dir, den Quellcode einfach zu ignorieren, der dir sowieso fehlen könnte. Obwohl dieses Szenario nicht sehr häufig vorkommt, wären Breakpoints in diesem Fall keine Hilfe.
Hier kommt Pause Program ins Spiel!
Locks
Wenn du ein Synchronisierungsproblem vermutest, wie einen Deadlock oder Livelock, kann Pause Program dir helfen, die genauen Threads und Locks zu finden, die das Problem verursachen.
In diesem Fall halte das Programm an und inspiziere die Thread-Liste. Sie zeigt, welche Threads blockiert sind. Durch Navigation zum Ausführungspunkt siehst du auch die kritischen Abschnitte, in denen sie gesperrt sind. Diese Informationen können dir helfen, zu einer Lösung zu finden.
Geheimer Stepping-Trick
Wie ich bereits erwähnt habe, schränkt Pause Program tatsächlich deinen Zugang zu einigen der fortgeschrittenen Debugger-Funktionen ein. Wenn du versucht hast, bestimmte Funktionen zu verwenden, während eine Anwendung angehalten ist, hast du möglicherweise eine Fehlermeldung gesehen, die Cannot evaluate methods after Pause action lautet.
Dennoch gibt es eine Umgehungslösung für diese Einschränkung.
Nachdem du eine Anwendung angehalten hast, fahre fort, indem du eine beliebige Stepping-Aktion durchführst. Step Into oder Step Over funktionieren. Sobald das erledigt ist, findest du dich in einer regulären Debugging-Sitzung wieder, ähnlich wie wenn du eine Anwendung mit einem Breakpoint anhältst. Alle erweiterten Funktionen sind jetzt freigeschaltet!
Fazit
Das war es für heute! Ich hoffe, du findest diese Tipps und Tricks nützlich.
Wenn es etwas Bestimmtes über Java-Debugging gibt, das du von mir behandelt haben möchtest, zögere nicht, dich zu melden! Dein Feedback hilft bei der Priorisierung und Veröffentlichung der Inhalte, die für dich am interessantesten sind.