IntelliJ trikovi za uklanjanje pogrešaka
1. Pregled
U ovom ćemo tutorijalu pogledati neke napredni IntelliJ uređaji za otklanjanje pogrešaka.
Pretpostavlja se da su osnove otklanjanja pogrešaka već poznate (kako započeti s otklanjanjem pogrešaka, Zakoračiti u, Prijeđi preko radnje itd.). Ako ne, pogledajte ovaj članak za više detalja o tome.
2. Pametan korak u
Postoje situacije kada se više metoda poziva u jednom retku izvornog koda, kao što je doJob (getArg1 (), getArg2 ()). Ako nazovemo Zakoračiti u akcija (F7), program za pronalaženje pogrešaka ulazi u metode redom koji JVM koristi za procjenu: getArg1 – getArg2 – doJob.
Međutim, možda bismo htjeli preskočiti sve posredne pozive i izravno prijeći na ciljnu metodu. Pametan korak u akcija to omogućuje.
To je vezan za Shift + F7 prema zadanim postavkama i izgleda ovako kada se pozove:

Sada možemo odabrati ciljnu metodu za nastavak. Također imajte na umu da IntelliJ uvijek stavlja najudaljeniju metodu na vrh popisa. To znači da pritiskom na njega možemo brzo prijeći Shift + F7 | Unesi.
3. Okvir za ispuštanje
Možda shvatimo da se već dogodila neka obrada koja nas zanima (npr. Izračun trenutnog argumenta metode). U ovom slučaju, moguće je ispustiti trenutne okvire JVM stoga kako biste ih ponovno obradili.
Razmotrimo sljedeću situaciju:

Pretpostavimo da nas zanima otklanjanje pogrešaka getArg1 obrade, pa ispuštamo trenutni okvir (doJob metoda):

Sada mi smo u prethodnoj metodi:

Međutim, argumenti poziva već su izračunati u ovom trenutku, pa, trebamo ispustiti i trenutni okvir:

Sada možemo ponovno pokrenuti obradu pozivanjem Zakoračiti u.
4. Točke prijelaza na terenu
Ponekad ne-privatna polja modificiraju druge klase, ne putem postavljača, već izravno (to je slučaj s bibliotekama trećih strana u kojima ne kontroliramo izvorni kod).
U takvim situacijama možda će biti teško razumjeti kada se izvrši izmjena. IntelliJ omogućuje stvaranje točaka prekida na razini polja da bi se to moglo pratiti.
Postavljeni su kao i obično - kliknite lijevu tipku miša na lijevom žlijebu uređivača na liniji polja. Nakon toga je moguće otvorite svojstva točke prekida (desni klik na oznaku točke prekida) i konfigurirajte ako nas zanima čitanje, pisanje ili oboje u polju:

5. Bilježenje točaka prekida
Ponekad znamo da u prijavi postoji stanje utrke, ali ne znamo gdje je točno. Možda će biti izazov zakucati ga, posebno tijekom rada s novim kodom.
Izjave za otklanjanje pogrešaka možemo dodati izvorima našeg programa. Međutim, ne postoji takva mogućnost za biblioteke trećih strana.
IDE vam ovdje može pomoći - omogućuje postavljanje točaka prekida koje ne blokiraju izvršenje jednom pogođenim, već umjesto toga proizvode zapisnike o evidentiranju.
Razmotrimo sljedeći primjer:
javna statička void glavna (String [] args) {ThreadLocalRandom random = ThreadLocalRandom.current (); broj brojeva = 0; for (int i = 0; i <5; i ++) {if (isInterested (random.nextInt (10))) {count ++; }} System.out.printf ("Pronađena% d zainteresirana vrijednost% n", brojanje); } privatni statički logički isInterested (int i) {return i% 2 == 0; }
Pretpostavimo da nas zanima stvarna prijava zanima me parametri poziva.
Stvorimo neblokirajuću točku prekida u ciljnoj metodi (Shift + lijevi klik na lijevom žlijebu za uređivanje). Nakon toga otvorimo njegova svojstva (desni klik na točku prekida) i definirajte ciljni izraz u zapisnik:

Prilikom pokretanja aplikacije (imajte na umu da je i dalje potrebno koristiti način otklanjanja pogrešaka), vidjet ćemo izlaz:
zainteresirano (1) zainteresirano (4) zainteresirano (3) zainteresirano (1) zainteresirano (6) Pronađeno 2 zainteresirane vrijednosti
6. Uvjetne točke prekida
Možemo imati situaciju da se određena metoda istovremeno poziva iz više niti i trebamo otkloniti pogreške u obradi samo za određeni argument.
IntelliJ dopušta stvaranje točaka prekida koje zaustavljaju izvršenje samo ako je zadovoljen korisnički definiran uvjet.
Evo primjera koji koristi gornji izvorni kod:

Sada će se program za pronalaženje pogrešaka zaustaviti na točki prekida samo ako je zadani argument veći od 3.
7. Oznake predmeta
Ovo je najsnažnija i najmanje poznata značajka IntelliJ. U biti je vrlo jednostavno - JVM objektima možemo priložiti prilagođene oznake.
Pogledajmo aplikaciju koju ćemo koristiti za demonstraciju:
test javne klase {public static void main (String [] args) {Zadaci kolekcije = Arrays.asList (novi zadatak (), novi zadatak ()); zadaci.forEach (zadatak -> nova nit (zadatak) .start ()); } privatna statička praznina mayBeAdd (držač zbirke) {int i = ThreadLocalRandom.current (). nextInt (10); if (i% 3 == 0) {holder.add (i); }} privatna statička klasa Zadatak implementira Runnable {private final Collection owner = new ArrayList (); @Preuzmi javnu void run () {for (int i = 0; i <20; i ++) {mayBeAdd (holder); }}}}
7.1. Stvaranje oznaka
Objekt se može označiti kada je aplikacija zaustavljena na točki prekida, a cilj je dostupan iz okvira stoga.
Odaberite ga, pritisnite F11 (Označi objekt akcija) i definirajte naziv cilja:

7.2. Pregled oznaka
Sada možemo vidjeti naše oznake prilagođenih objekata čak i u drugim dijelovima aplikacije:

Super je stvar u tome čak i ako označeni objekt trenutno nije dostupan iz okvira stoga, još uvijek možemo vidjeti njegovo stanje - otvorite Procijenite izraz dijalog ili dodajte novi sat i počnite upisivati ime oznake.
IntelliJ nudi da ga upotpunite s _DebugLabel sufiks:

Kada ga procijenimo, prikazuje se stanje ciljnog objekta:

7.3. Oznake kao uvjeti
Također je moguće koristiti oznake u uvjetima prekida:

8. Zaključak
Provjerili smo niz tehnika koje uvelike povećavaju produktivnost tijekom uklanjanja pogrešaka u višenitnoj aplikaciji.
To je obično izazovan zadatak i ovdje ne možemo podcijeniti važnost pomoći alata.