Wie kann ich IntelliJ zwingen, nur in meinen Quellcode einzusteigen?

75

Ich habe ein Spring MVC-Projekt, das ich mit IntelliJ debuggen möchte.

Wenn ich in meinem Controller-Code einen Haltepunkt setze, stoppt das Debugging an der entsprechenden Stelle. Diese bestimmte Zeile enthält mehr von meinem eigenen Code in einer anderen Bean. Ich möchte in den Code eintreten können. Wenn ich unmittelbar nach den Breakpoint-Riggern "einsteige", tritt es in den AOP-Framework-Code von Spring ein.

Geben Sie hier die Bildbeschreibung ein

Wenn ich sofort denselben Haltepunkt und "Smart Step In" auslöse, werde ich in Zeile -1 der Quelldatei angezeigt (siehe Abbildung oben). Was bedeutet diese Zeile -1? Wenn ich wieder "Smart Step In" mache, lande ich an der Linie nach meinem ursprünglichen Haltepunkt, wurde aber nie in die Methode eingefügt, in die ich eintreten wollte.

Ich habe versucht, das Spring AOP-Paket in die Debugger-Einstellung zu setzen. Gehen Sie nicht in die Klassen . Am Ende musste ich jedoch auch Transaktionsklassen und mehrere andere eingeben. Am Ende habe ich den ganzen Frühling in die Liste aufgenommen ... und SLF4J und einige JDBC-Treiber.

Wie kann ich IntelliJ dazu bringen, nur in meinem Projektquellcode anzuhalten, wenn ich nicht so etwas wie "Force Step In" verwende?

dbrown0708
quelle
6
In der Do not step into classesEinstellung können Sie ein Muster mit einem Platzhalter deklarieren. Dies kann hilfreich sein, um Pakete wie org.*und schnell auszuschließen com.*, vorausgesetzt, Ihre beginnen nicht mit diesen. Es wäre eine perfekte Lösung für Sie, negation ( !) in diesen Mustern verwenden zu können. Ich würde vorschlagen, dies als Funktionsanforderung zu senden.
Michał Rybak
Es gibt eine entsprechende Funktionsanforderung für IntelliJ IDEA . Bitte stimmen Sie ab. - IDEA-54807 Ermöglichen Sie den Projekteinstellungen einen eigenen Debug-Schritt und fügen Sie [Nur Schritt in die Klassen] für die Produktivität hinzu
CrazyCoder

Antworten:

47

Derzeit gibt es keine allgemeine Option, um nur auf Benutzercode abzuzielen (wie Visual Studios 'Just My Code' ).

Der beste Weg, um dasselbe Verhalten zu erzielen, besteht darin, bestimmte Codeklassen oder -pakete auszuschließen (es ist möglich, Filtermuster für Klassenpakete über Platzhalter einzurichten), die nicht "betreten" werden.

Dies kann in den Einstellungen / Einstellungen in den Optionen Debugger / Stepping erreicht werden .

Acoelhosantos
quelle
26

Spring's AOP kann zu den schlimmsten Straftätern gehören.

Das OP schlug vor, dass sie dies bereits getan hatten, aber hier ist, wie Sie das Betreten bestimmter Klassen deaktivieren können (IntelliJ ULTIMATE 2018.2):

File-> Settings...-> Build, Execution, Deployment-> Debugger->Stepping

... Do not step into the classes-> Add Pattern->Enter the filter pattern:

... ... org.springframework.aop.*

Beachten Sie, dass Sie Platzhalter verwenden können, um ganze Namespaces zu deaktivieren. Wenn Sie beispielsweise davon ausgehen, dass der Namespace Ihrer Organisation mit beginnt com, können Sie den größten Teil des Weges dorthin zurücklegen, indem Sie eine schwarze Liste erstellen org.*.

Brent Bradburn
quelle
1
makellose Antwort!
Gaurav
Authentische Antwort!
DevWithSigns
4

IntelliJ ULTIMATE 2018.3 Verwenden Sie File-> Settings-> und suchen Sie 'Step' wie folgt: Geben Sie hier die Bildbeschreibung ein

huoxudong125
quelle
3

Ein anderer Weg in "Ultimate 2019.1" (möglicherweise auch in früheren Versionen):

Wenn Sie gerade debuggen, können Sie mit der rechten Maustaste auf eine Klasse in der Ansicht "Debugger" - "Frames" klicken. Dann können Sie "Schrittfilter hinzufügen ..." auswählen und für diese Klasse einen neuen Schrittfilter hinzufügen. Natürlich können Sie hier auch den neuen Stufenfilter mit Platzhalter "*" usw. ändern ...

Steffen
quelle
Ich sehe diese Option in der Community-Version, kann aber nicht verstehen, was sie ändert. Die Klasse, auf die ich geklickt habe, wird weiterhin in der Rahmenliste angezeigt.
Linie
0

Beenden Sie nach den oben genannten Änderungen Ihre Anwendung und starten Sie den Debug-Modus erneut, um wirksam zu werden.

WesternGun
quelle