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.
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?
quelle
Do not step into classes
Einstellung können Sie ein Muster mit einem Platzhalter deklarieren. Dies kann hilfreich sein, um Pakete wieorg.*
und schnell auszuschließencom.*
, 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.Antworten:
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 .
quelle
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 erstellenorg.*
.quelle
IntelliJ ULTIMATE 2018.3 Verwenden Sie
File
->Settings
-> und suchen Sie 'Step' wie folgt:quelle
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 ...
quelle
Beenden Sie nach den oben genannten Änderungen Ihre Anwendung und starten Sie den Debug-Modus erneut, um wirksam zu werden.
quelle