Intellij Debugger langsam: Methoden-Haltepunkte können das Debuggen erheblich verlangsamen

81

Wenn ich den Intellij-Debugger starte, wird der Hinweis angezeigt, den Sie im Screenshot sehen können. Der Debugger benötigt viel Zeit zum Starten. Wie kann man dieses Problem lösen?Geben Sie hier die Bildbeschreibung ein

Ronald
quelle

Antworten:

179

Deaktivieren Sie die Methoden-Haltepunkte. Sie können alle Ihre Haltepunkte über Ausführen | anzeigen Haltepunkte anzeigen (Strg - Umschalt -F8)

Robin
quelle
24
Aber sicher entfernt das Entfernen Ihrer Haltepunkte den Zweck des Debuggens? Oder mir fehlt etwas.
Arush436
14
@ arush436 Die Anzahl der Situationen, in denen Sie einen "Methoden-Haltepunkt" (! = regulärer Haltepunkt) benötigen, ist sehr begrenzt.
Robin
27
Und was ist dann der Unterschied zwischen einem Methoden-Haltepunkt und einem regulären Haltepunkt?
Jrahhali
6
@ jrahhali Siehe Methode Haltepunkt und Linie Haltepunkt
happy_coder
2
Hier ist ein aktualisierter Link zu den verschiedenen Arten von Haltepunkten .
Cameron
11

In IDEA 2017.1 wurden emulierte Methoden-Haltepunkte eingeführt: https://www.jetbrains.com/help/idea/using-breakpoints.html#method_breakpoint Sie ermöglichen die Verwendung von Methoden-Haltepunkten ohne Leistungseinbußen. Standardmäßig aktiviert.

Egor
quelle
Wenn Sie diese Nachricht sehen, haben Sie möglicherweise (wie ich) in einem Popup auf "Emulation abbrechen" geklickt. Um es wieder zu aktivieren, gehen Sie zum Haltepunkt in Show-Haltepunkten und aktivieren Sie "Emuliert".
Captain Man
7

Vom JetBrains-Team: "Methoden-Haltepunkte verlangsamen den Debugger aufgrund des JVM-Designs erheblich. Die Auswertung ist teuer. Entfernen Sie Methoden-Haltepunkte und ziehen Sie die Verwendung der regulären Zeilen-Haltepunkte in Betracht." Sehen Sie mehr .

Um es kurz zu machen, es scheint, dass das Hauptproblem darin besteht, dass Methoden-Haltepunkte mithilfe der JPDA-Funktion " Methodeneingabe und Methodenexit" implementiert werden . Diese Implementierung erfordert die JVM ein Ereignis zu feuern jeden beliebigen Faden tritt jede Methode , und wenn jeder Thread beendet jede Methode.

nhoxbypass
quelle
5

Suchen Sie in Ihrem Code nach den roten Rauten-Symbolen (nicht nach roten Kreisen), die die Methoden-Haltepunkte darstellen. Höchstwahrscheinlich setzen Sie sie bei get () / set () -Methoden in Kotlin.

Klinge
quelle
5

Geben Sie hier die Bildbeschreibung ein

Deaktivieren Sie den Methoden-Haltepunkt im Debug-Bereich. Hier ist ein Screenshot.

Chetan
quelle
0

Praktische Ratschläge, denen ich folge: 1. Schalten Sie alle Haltepunkte stumm, während die App gestartet wird. 2. Aktivieren Sie Haltepunkte nur, während Sie diesen Fluss debuggen.

Natürlich hilft es nicht, wenn Sie versuchen, etwas zu debuggen, das beim Start der App passiert.

Sudip Bhandari
quelle