14 komentáře “7 tipů pro práci v Debug režimu v IntelliJ Idea

  1. Ahoj Honzo, díky za tipy, určitě se mi hodí ten drop frames, věděl jsem, že se v tom bodě dá dívat na proměnné, ale ne že se dá odtud znovu debugovat.

    Taky díky za Smart Step Into (z komentáře od Petra Prochazky).

  2. Ještě mě napadá, jestli by to nemohlo souviset s classloader leakem. Co když se při restartu kontextu neuvolnil ten starý classloader a stále je v paměti? Bohužel netuším jak funguje při JVM hotswapu nalezení třídy u které se má vyměňovat její obsah. Třeba je někde pořád živá reference na tu původní „už hotswapovanou“ classu v neuvolněném classloaderu? Jenže tady už úplně vařím z vody … tohle by chtělo nějaký test.

    Odpojení debug režimu a nové nastartování taky nepomůže?
    Co restart serveru … ten asi pomůže stejně jako restart Idey že?

  3. Ja bych spis rekl, ze se ta nova verze nenacte a to je ten problem. Idea si porad mysli, ze byla provedena zmena struktury.. Jde o to vymazat nejak tu z idey tu starou strukturu a prekvapive rebuild aplikace nepomuze, ale restart idei ano. Zrejme se pouziva nejaka cache..
    Diky za tvuj cas.

  4. V tom případě bych si tipnul, že po redeploy zmizí tebou původně hotswapovaná verze třídy (tříd) a načte se verze z daného WARu. Nicméně novým hotswapem by se měl dát normálně zase vyměnit obsah metod. Pokud se tak neděje, tak je to opravdu možná nějaká issue Idey.

    Abych pravdu řekl, pro vývoj používám kompilační výsledek Idey (při synchronizaci s Mavenem je při standardních buildech identicky s buildem spuštěným přes Maven) a restart Tomcata. Tohle je asi nejrychlejší turnaround, ke kterému jsem dospěl. Idea má totiž narozdíl od Antu/Mavenu přehled o tom, které třídy a jejich závislosti je nutné překompilovat a udělá jen ty. Ant/Maven musím slepě překompilovat všechno, protože ty vazby neznají.

    Tím pádem používám úplně jiný use-case a díky tomu jsem asi na tebou popisovaný problém nenarazil.

  5. Redeploy je asi jen stopnuti kontextu, ostatni aplikace na domene jedou dal i v prubehu redeploy. Pouzivame Sun portal na Glassfish 8.1.
    Pouzivame Ant org.apache.tools.ant.taskdefs.optional.sun.appserv.DeployTask, nenina tom nic specialniho.

  6. To úplně nechápu … redeploy znamená, stopnutí a nastartování app serveru? Nebo jen stopnutí kontextu, ale app server stále žije? Zkuste trošku blíž popsat, co se tam vlastně děje …

  7. Super clanek. O tom hotswapu jsem nevedel, jak na to.
    Nyni resim ale tento problem. Pouzivam debugger na vzdalene debugovani web aplikace. Vse funguje ok, tak ale zmenim strukturu classy, udelam redeploy, ale dalsi hotswap uz nefunguje, jakoby si porad nekde drzela starou nezmenenou classu.. Pomuze jen restart idei
    Nevite nekdo, jak na to?
    Build a (re)deploy resim pres ANT, mimo ideu..

  8. super clanok…uz mi nebude vrtat hlavou na co tam to „Mark Object“ vlastne je :), ten breakpoint na NullPointerException si tiez vyskusam 🙂

  9. Diky za clanek, ne vsechno jsem znal (pouzivam sice Eclipse, ale bylo prijemne to v nem objevit :-).

  10. @benzin poslední idea (možná to umí i osmička) má na compiler navěšený Annotation processing, nevím, jestli by se to k tomu nemohlo využít. Praktické zkušenosti ale nemám – navíc pro mobily jsem zatím nikdy neprogramoval, takže tady si nedovolím žádný komentář. Pro naše účely Idea dokáže plně nahradit maven build, s tím rozdílem, že je výrazně rychlejší.

    @Petr Prochazka: díky – tohle jsem postřehl při brouzdání novinkami v Idee, ale neobjevil jsem nikde zkratku. Díky vyzkouším.

  11. Ja jeste hodne casto pri krokovani pouzivam Shift + F7 (Smart Step Into).
    Zobrazi se pop menu se vsemi volanymi metodami na radku. Vetsinou chci skocit do te posledni, ktera je volana

  12. No vsechno tohle sem automaticky v Eclipse pouzival az n to prejmenovani intanci a stapping. To by mohlo byt pomerne uzitecne (zkusim to najit).

    No ale vedlo mne to k jine myslence. Prilis neholduju buildovani z IDE, obzvlast kdyz nad kodem mate navesene dalsi tooly, ktere ho predpripravi nez dojde k samotne kompilaci. Pro JavaME je to dost potreba, protoze jinak je vsechno desne praccne. No a pokud nema dany tool intergraci pro vase IDE dost se zapotite. No takze by to chtelo aby HotSwap sel spustit mimo IDE a pokud mozno primo do rozjeteho emulatoru JavaME. Mate s necim takovym zkusenosti? Ted sem nasel jenom maven2-hotswap-plugin, ale nevim jestli to tim vyresim (budu zkouset), ale jestli mate nekdo s necim takovym zkusenosti, dejte mi prosim vedet.

  13. S těmi breakpointy na fieldy pozor – nemusí (netestoval jsem všechna JDK) zareagovat při nastavení pomocí reflection nebo deserializace 🙁