BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

Bugas!

Viskas prasidėjo nuo to, kad Speedui neveikė 3-ias testukas. Pora valandų su juo aiškinomės, kas blogai, bet taip ir neradom kur klaida. Išsiaiškinau tiek: žaidimas lūžta vykdant while ciklą. Cikle nieko ypatingo - skaitymas iš failo su iostream, bet kažkodėl jis lūžta vykdydamas antra iteration'ą.

Vėliau panašus bugas pradėjo reikštis ir mano kompe, taigi galėjau daugiau patestuot. Bugas buvo panašus į pirmąjį: vykdomas do-while ciklas, jame kviečiama funkcija, užkraunanti tekstūrą. Žaidimas lūžta antrą kartą iškvietus funkciją. Įdomios bugo savybės:

- funkcija veikia gerai, viską įvykdo, bet po jos žaidimas lūžta;

- programos pradžioj parašius MessageBox(…) viskas veikia!

- pakeitus dalį kodo, kuris yra bereikšmis ir su bugu nesusijęs, nepadeda nei MessageBox(…)

Kad darbei nestovėtų vietoj, pradėjau kurt 3D objektų konverterį, bet ir ten pastebėjau keistą bugą: programa lūžta vienoj vietoj parašius cout endl, bet veikia su cout “\n”, nors turėtų veikt abiem atvejais.

Vienintelis paaiškinimas - blogas kompiliatorius. Žinant kad tai Dev-C++, tai visai tikėtina…

Nenoriu keist kompiliatoriaus, bet teks, jei atnaujinimas nepadės.

Rodyk draugams

Komentarai (5)

Cheburazhka2007-07-03 23:09

Na, kompiliatoriu kaltint lengviausia :) Paprastai tokio tipo bugai pasireiskia, kai corruptinta atmintis

AE2007-07-04 09:37

Bet jei bugas kode, tai turėtų pas visus neveikt. O dabar pas visus veikia, tik pas vieną ne. Ir kaip paaiškint, kad parašius MessageBox() viskas pasitaiso?

Cheburazhka2007-07-04 10:16

Bugas randominis todėl, kad ant skirtingų kompiuterių skirtingai atminties pointeriai išsidėsto. O message boxas tik atsitiktinai jį pašalina, nenustebčiau jei atrasi ir kitų mistiniu būdų panaikinti šį bugą. Pasitikrink ar nėra mem-leakų.

jrs0ul2007-07-06 14:27

spejimas: gal į tam tikrą duomenų struktūrą bandai įrašyt daugiau nei telpa, pvz į kokį statinį masyvą.

<br>Kartais būna įdomių dalykų, kai bandai į kokį unsigned int su fscanf pajimt signed int.

AE2007-07-12 22:29

Rimčiau pakrapštęs radau kelis bugus.

Pasirodo, su tais char reikia atsargiai :) Vienas bugas buvo nebaisus, bet man, kaip nepatyrusiam, sunkiai pastebimas: vienam objektui du kartus kviečiamas destruktorius (vieną kartą kviečiu pats, kitas kviečiamas automatiškai). Tarp abiejų iškvietimų yra operatorius new, ir jam duodama destruktoriaus atlaisvinta atmintis… Blogiau ir būt negali.

Dar bugų liko, bet dabar jau aišku kas ir kaip, tai tikiuosi ištaisysiu.

Rašyti komentarą

Tavo komentaras