Debugovanie vs. normalne spustenie

Moderátor: FeroG

<<

Danka.Sl.

Príspevky: 41

Registrovaný: Štv Sep 27, 2012 10:53 pm

Poslať Pia Nov 02, 2012 8:32 pm

Debugovanie vs. normalne spustenie

je mozne, ze ked program krokujem dostanem po skonceni iny vysledok, ako ked ho spustim bez krokovania?? Konkretne sa jedna o program, ktory kresli mriezku. Pri postupnom krokovani pracuje spravne a nakresli stanoveny pocet ciar, ked ho vsak spustim bez krokovania nakresli o 1 ciaru menej.
<<

Danka.Sl.

Príspevky: 41

Registrovaný: Štv Sep 27, 2012 10:53 pm

Poslať Pia Nov 02, 2012 8:50 pm

Re: Debugovanie vs. normalne spustenie

+ ako je mozne ze sa mi meni rozmer zobrazovaneho WinPanu po pridani prikazov, ktore s menenim rozmerov nemaju nic spolocne? Napr. pridanie novej premennej do metody, ktora dokonca s metodou ktora sa nastaveniam rozmerov plochy venuje nema nic spolocne a ani nepouziva instancne premenne.... robim niekde chybu?? Zacinam mat pocit, ze si zo mna Eclipse robi dobry den :D
<<

FeroG

Príspevky: 1290

Registrovaný: Uto Máj 29, 2007 11:25 am

Poslať Pia Nov 02, 2012 9:54 pm

Re: Debugovanie vs. normalne spustenie

Danka.Sl. píše:je mozne, ze ked program krokujem dostanem po skonceni iny vysledok, ako ked ho spustim bez krokovania??

Jednoducha odpoved: nie, vysledok s krokovanim i bez je stale rovnaky. Zlozitejsia odpoved: viem si velmi lahko predstavit, ze by sa to mohlo stat. Na druhej strane vsak nepredpokladam, ze pises viac-vlaknove kody, kde sa jednotlive vlakna moznu nejako ovplyvnovat a vysledok zavisi od race conditions. I ked ak sa tvoj problem tyka JPAZu, tam je skrytych kopa vlakien, ale snaha bola, by pred pouzivatelom-studentom ostali dokonale ukryte. Zaver: ak ja problematicka situacia opakovatelna (t.j. vies opakovane vyvolate "nekorektne" spravanie), skus sa spytat svojho cviciaceho pred alebo po cviceni. Ak sa problem netyka aktualne otvorenej sady, mozes pouzit aj toto forum. Zdrojovy kod povie viac ako milion slov o programe.

Danka.Sl. píše:+ je mozne ze sa mi meni rozmer zobrazovaneho WinPanu po pridani prikazov, ktore s menenim rozmerov nemaju nic spolocne?

Jednoducha odpoved: nie. Zlozitejsia odpoved: nie, ale mozno tvoje prikazy nechtiac (alebo aj preto, ze mnohe fakty pred vami zamlcujeme, aby ste z Javy neboli velmi vystraseni) sposobuju zmenu rozmerov WInPane. Tak ako vyssie, zdrojovy kod napovie najviac.
<<

PainMaster

Príspevky: 689

Registrovaný: Uto Okt 06, 2009 12:50 pm

Bydlisko: 3.Kanal,4.Chodba

Poslať Sob Nov 03, 2012 10:38 am

Re: Debugovanie vs. normalne spustenie

Danka.Sl. píše:je mozne, ze ked program krokujem dostanem po skonceni iny vysledok, ako ked ho spustim bez krokovania?? Konkretne sa jedna o program, ktory kresli mriezku. Pri postupnom krokovani pracuje spravne a nakresli stanoveny pocet ciar, ked ho vsak spustim bez krokovania nakresli o 1 ciaru menej.

Zaujimavy problem. Mozes prosim zverejnit svoj kod?
Dakujem :)
We weren't born to follow
You gotta stand up for what you believe!

Ps: Za gramatiku ma neopravovat! Dakujem!
<<

Danka.Sl.

Príspevky: 41

Registrovaný: Štv Sep 27, 2012 10:53 pm

Poslať Sob Nov 03, 2012 12:12 pm

Re: Debugovanie vs. normalne spustenie

Co sa tyka toho debugovania, tak to sa tyka casti v metode kreslimMriezku, kde pomocou for-cyklov kreslim ciary. Co sa tyka menenia rozmerov, to sa robi z mojho pohladu nahodne, niekedy len odenterovanim nejakeho riadku, dakedy ked spustim ten isty kod viackrat tak dakedy ide dobre dakedy nie, neviem cim sa to ovplyvnuje. V metode kreslimMriezku upravujem velkost plochy podla podla zadanych parametrov, mozu to byt tie prikazy, ktore robia problem? Dodavam len, ze cely program funguje spravne a bez problemov, okrem rozmerov plochy. co sice spravne fungovanie programu neovpyvnuje ale nevyzera to dobre.

public class HraciaPlocha extends WinPane {
//sirka = sirka plochy, policko = sirka policka, obtiaznost = ovplyvnuje velkost policka
private int sirka;
private int obtiaznost;
private int policko;
private Terc pomocnik = new Terc();
private int pocetPolicok;
private double xTerca;
private double yTerca;
private int pocitaZasahy;

public HraciaPlocha(int tiaznost, int siirka) {
this.setBackgroundColor(Color.blue);
pomocnik.setVisible(false);
this.obtiaznost = tiaznost;
this.sirka = siirka;
if (obtiaznost == 0) {
policko = 50;
} else if (obtiaznost == 1) {
policko = 40;
} else {
policko = 30;
}
setResizable(false);
kreslimMriezku();

}

public void kreslimMriezku()
//menim velkost plochy aby bolo rozlozenie policok presne
double rozdiel = sirka % policko;
if (rozdiel != 0) {
sirka = (sirka / policko) * policko;
this.resize(sirka, sirka);
} else {
this.resize(sirka, sirka);
}
pocetPolicok = sirka / policko;

this.add(pomocnik);
pomocnik.setPenColor(new Color(51, 102, 255));
for (int i = 1; i < pocetPolicok+1; i++) {
pomocnik.setPosition(i * policko, 0);
pomocnik.moveTo(i * policko, sirka);
}
for (int i = 1; i < pocetPolicok+1; i++) {
pomocnik.setPosition(0, i * policko);
pomocnik.moveTo(sirka, i * policko);
}

}
//zvysne metody, ktore by nemali sirku plochy ovplyvnovat, ale uvadzam ich, pre istotu, mozno su nejkae problemove
public void ukazTerc() {
int riadok = (int) (Math.random() * pocetPolicok);
int stlpec = (int) (Math.random() * pocetPolicok);
pomocnik.urobTerc(stlpec, riadok, policko);
xTerca = pomocnik.getX();
yTerca = pomocnik.getY();

}

public void schovajTerc() {
pomocnik.setFillColor(Color.blue);
pomocnik.dot(policko/2-3);
}

public void koniecHry() {
pomocnik.center();
pomocnik.setPenColor(Color.red);
pomocnik.setFont(new FontUIResource("Arial", 2, 40));
pomocnik.setDirection(90);
pomocnik.setPosition(sirka/2, sirka/3);
pomocnik.printCenter("KONIEC HRY");
pomocnik.setPosition(sirka/2, (sirka/3)*2);
pomocnik.setFont(new FontUIResource("Arial", 2, 20));
pomocnik.printCenter("Počet úspešných zásahov: " + pocitaZasahy + "/20");
}

@Override
protected void onMousePressed(int x, int y, MouseEvent detail) {
super.onMousePressed(x, y, detail);
double polomer = policko / 2;
if (x > xTerca - polomer && x < xTerca + polomer
&& y > yTerca - polomer && y < yTerca + polomer) {
this.schovajTerc();
pocitaZasahy++;
}
}
}
<<

PainMaster

Príspevky: 689

Registrovaný: Uto Okt 06, 2009 12:50 pm

Bydlisko: 3.Kanal,4.Chodba

Poslať Sob Nov 03, 2012 7:49 pm

Re: Debugovanie vs. normalne spustenie

Triedu Terc som si domyslel a dodal som zlozenu zatvorku za metodu kreslimMriezku a ked som si kod letmo presiel, neprisiel som na ziaden dovod tebou popisanych javov.
Skus povedat, na akych vstupoch ti to robi problemy, mozno budeme o nieco mudrejsi..
We weren't born to follow
You gotta stand up for what you believe!

Ps: Za gramatiku ma neopravovat! Dakujem!
<<

FeroG

Príspevky: 1290

Registrovaný: Uto Máj 29, 2007 11:25 am

Poslať Sob Nov 03, 2012 7:52 pm

Re: Debugovanie vs. normalne spustenie

Problem je jasny :-) Stretlo sa viacero veci pokope. Hlavnym "bodom" problemu je kombinacia metod setResizable a resize. Tieto metody su implementovane tak, ze zmeny nerealizuju ihned, ale az neskor v inom vlakne (konkretne v EDT vlakne Swingu). A presne tu sa prejavili problemy s debugovanim, ci s tym, ze raz to ide a inokedy nie. Totiz to, v akom poradi sa vykonavaju prikazy v jednotlivych vlaknach, zalezi od mnozstva faktorov.

(1) Ako to riesit? Aktualne odpoved je ta, ze nemas moznost to vyriesit. Problem je v JPAZe a v tom, ako veci implementuje. V JPAZe su veci, ktore nie su uplne doriesene. Je to v podstate dan za to, ze JPAZ sa snazi ukryvat mnohe veci Javy a Swingu (napr. JPAZ [viac-menej] uspesne ukryva vlakna, bez znalosti ktorych nejde v Swingu nic serioznejsie programovat). No nie vsetko sa da ukryt a nie vsetko sa v JPAZe podarilo uspesne ukryt. Mozno niekedy v buducnosti si najdem cas (pravdepodobnost je mala, no nenulova), aby som prenikol do hlbsich zakuti Swingu a mozno sa podari reimplementovat JPAZ tak, aby vsetko za kazdych okolnosti "klapalo".

(2) Ako to riesit? Ak chces pouzit JPAZ ako framework na nejake jednoduche 2D zabavky, odporucam nepouzivat triedu WinPane (pri jej implementacii sa obetovala pouzitelnost za didakticke moznosti). Namiesto WinPane rozsiruj rovno triedu Pane (... class HraciaPlocha extends Pane) a na zobrazenie kresliacej plochy pouzi triedu JPAZPanel (alebo JPAZWindow). Kombinaciou triedy Pane a JPAZPanel ziskas plnu kontrolu na Swingom a zaroven mozes pouzivat vsetky uzitocne veci z JPAZu (kreslenie, objekty v ploche, animovane tvary, casovace, ...). Ako bonus dokonca ziskas moznost animovanych prechodov medzi zobrazenymi kresliacimi plochami. Inspiraciu ako na to najdes v projekte SnowflakesCatcher (http://web.ics.upjs.sk/paz1a/JPAZ/JPAZ2), resp. v demostracnom SW pouzitom na PAZ1b: http://web.ics.upjs.sk/paz1b/Prednasky/Prednasky
<<

Danka.Sl.

Príspevky: 41

Registrovaný: Štv Sep 27, 2012 10:53 pm

Poslať Sob Nov 03, 2012 11:24 pm

Re: Debugovanie vs. normalne spustenie

Ďakujem veľmi pekne za radu :)

Späť na PAZ1a

Kto je on-line

Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 1 hosť

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software.
Slovenský preklad.