Warum verlangsamt sich das debuggte Programm so sehr, wenn das Debuggen von Methodeneinträgen verwendet wird?

StackOverflow https://stackoverflow.com/questions/751105

  •  09-09-2019
  •  | 
  •  

Frage

Ich verwende JDI-Schnittstellen, um einen Debugger zu erstellen, und wenn ich MethodEntryRequests verwende, um die Methodeneintragsverfolgung zu aktivieren, verlangsamt sich das debuggte Programm um den Faktor zehn.Ich habe den Filter für den Hauptthread und die Suspend-Richtlinie auf SUSPEND_EVENT_THREAD gesetzt.Classfilter ist begrenzt und wenn ich empfangene Ereignisse ausdrucke, werden nicht mehr als ein paar Dutzend davon angezeigt, sodass nicht zu viele davon empfangen werden sollten.Ich debugge lokal und habe folgende Art von Befehlszeile mit dem debuggten Java-Programm:

-Xdebug -Xrunjdwp:transport=dt_socket,suspend=y,server=y,address=1337

War es hilfreich?

Lösung

Die kurze Antwort ist, dass die Ausführung läuft durch den Dolmetscher, wenn Methode Einträge werden. Ich glaube nicht, gibt es sowieso um diese ...

Die früher der Fall für alle Codes sein, in der Debug-Modus laufen, aber es in 1,4 verstärkt wurde ... jetzt funktioniert HotSpot für ‚Full-Speed‘ Debugging, außer im Fall von Verfahren Ein- und Ausfahrten, Beobachtungspunkten und wenn Single-Stepping oder in Methoden, die Haltepunkte enthalten.

Andere Tipps

2 Gründe:

  1. Bei jedem Methodeneintrag müssen Überprüfungen hinzugefügt (es gibt keine Option, nur einige Methoden zu optimieren).
  2. Die Einbrüche der Methode wird unmöglich (so sind kleine Methoden 10-100x-mal langsamer)

Das Gleiche gilt für Profiler und .net-Apps

Ich würde davon ausgehen, dass der Debugger für jeden Methodenaufruf aufwachen muss, um zu sehen, ob es die übereinstimmt (en), die zu brechen ausgewählt wurden. Weil es jeden Methodenaufruf für eine mögliche Übereinstimmung zu überprüfen, bevor sie ausgeführt werden können, ist es wesentlich langsamer, als wenn sie nicht über all diese Kontrollen zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top