|
Re: - Arthur Dent (web)(13.09.2004 15:07:44)ehm... A co je "chyba 216"? Protože jsem tu vykřikoval cosi o tom, že píšu čtečku (v Delphi a INDY používám), tak bych rád věděl co a jak...
Slušná odpověď je následující: Nastavení - Ovládací panely - Přidat nebo odebrat programy - Service Pack 2 - Odebrat. Nám to tu pomohlo...
(Jak to, že s vypnutým firewallem PING na server prošel, ale ani Exploder ani Mozilla stránky nenačetly, jsme nezjistili...) | |
Re: - dgx (web)(13.09.2004 17:23:29)Arthure, ten popis odstranění problému je přesný
Jinak jsem právě dospěl k poznání, že SP2 nese krycí jméno Subseven Trojan virus. Teda alepoň jeho instalace způsobující chybu 216 je Microsoftem vysvětlena následovně [support.microsoft.com/?kbid=259279] | | |
Re: - mike (web)(13.09.2004 19:17:50)Chyba 216 je v Delphi "Access violation" tj. v zasade cokoli. Zabehnuty pointer, neinicializovana promenna, prepsany zasobnik apod. Proste mizerne napsany a neodladeny kod, ktery se chova nahodne v zavislosti na aktualnim stavu systemu, obsahu pameti apod. A muze za to zamozrejme Microsoft, kdo jiny taky. Zamette si pred vlastnim prahem, vazeni. | |
Zametáme... - Arthur Dent (web)(14.09.2004 07:30:29)"Access violation" ani chybu 216 jsem neviděl. Zato jsem nesčíselněkrát viděl "General protection fault".
Tohle je prkotina... Představme si, jaký řev by nastal, kdyby MS vydal "kumulativní patch pro IE", ve kterém by opravil všechny nestandardní rysy prohlížeče IE, opravil by boxmodel a který by vedl k tomu, že IE by zobrazil pouze validní kód...
Dovolím si proto postulovat "zásadu chyb": Pokud je v nějakém systému chyba, naučí se programátoři s touto chybou pracovat a píší programy tak, aby vliv této chyby eliminovali. Oprava takové chyby může způsobit nefunkčnost softwaru...
Pokud před updatem program takové chování nevykazuje a po updatu ano, je zcestné bez analýzy, trasování apod. tvrdit, že problém je v programu...
Jinými slovy: Ta chyba 216 vypadá na chybu, ke které dochází někde v knihovních funkcích Delphi, v místech, kde se Delphi potkávají s Windows. Ta místa jsou od "delphi programátora" velmi daleko a nemá šanci je jakkoli ovlivnit. "Zapomenutý pointer" je sice možná příčina, ale proč pod SP1 zapomenutý nebyl a pod SP2 najednou je?
A vysvětlení: Projevil se jeden z Murphyho zákonů, který tvrdí, že odstranění jedné chyby zanese do systému dvě jiné chyby. | |
Re: Zametáme... - mike (web)(14.09.2004 21:31:44)Zacnu od konce. Chovani aplikace se "zapomenutym pointerem" zavisi na aktualnim obsahu pameti. Takze se klidne muze stat, ze chyba je tam od zacatku, ale driv se proste neprojevila. Po instalaci SP2 a volani nejakeho API se obcas pameti (treba volny zasobnik) zmenil a najednou se problem projevil. Takovych veci jsem uz videl...
Samozrejme jsou dalsi moznosti. Pokud vim, SP2 by default nedovoli spustit kod na zasobniku, protoze to je jeden ze zpusobu, jak se do systemu dostavaji viry a trojany (buffer overflow). Takovy pokus se projevi jako exception 0xc0000005, coz je prave Access violation, Delphi runtime error 216 nebo General protection fault. Je mozne, ze Delphi runtime neco takoveho dela, kod je na to prasacky dost, ale celkem pochybuju, protoze pouzivam par aplikaci v Delphi napsanych a na SP2 normalne funguji. Mozna nektere verze runtimu, tezko rict. Pravdepodobnejsi ale je zabehnuty kod aplikace. Moc podrobnosti o tehle ochrane zatim nevim, ale myslim, ze se to da vypnout pro kazdou aplikaci zvlast. Ale nedelal bych to, vypada to jako uzitecna vec.
Kazdopadne, chyba 216 je chyba aplikace a ne OS, takze je zcela namiste tvrdit, ze problem je v programu a ne SP2. I kdyby byl problem v Delphi runtime, tak ten je soucasti aplikace a je na programatorovi, aby se s tim vyrovnal. I Delphi umoznuje chytat a zpracovat vyjimky. A k runtimu jsou zdrojaky. Samozrejme, pravdepodobnost, ze za to opravdu muze M$ je nenulova, ale nule docela blizka. Odhadem tak 0.1%. Na zaklade dlouholetych zkusenosti si troufam tvrdit, ze zrovna access violation je v 99.9% pripadu chyba aplikace.
S tou znamou chybou, kterou programatori obchazeji nebo vyuzivaji je to pravda, ale nejspis to nebude tenhle pripad. Taky se mi to stalo; snazil jsem se resit chybu a v SP2 MS podobne reseni zabudoval do systemu. Dohromady se to kouslo. Jenze jsem na to prisel uz s SP2 RC2. | |
Re: Zametáme... - Arthur Dent (web)(14.09.2004 21:52:17)Pokud "dgx" psal o "sledování sítě s INDY", pochybuju silně o tom, že tam on sám kdy viděl pointer. Napsal jsem za poslední měsíc několik tisíc řádků v Delphi a pointer jsem neviděl ani zběžně. Chyba, která by se začala projevovat až při změně systému, bude nejspíš:
1. V runtimu Delphi
2. V SP2
3. V komponentě třetí strany (INDY).
4. Bude to "chyba opravy", tedy chybné chování způsobené opravou nějaké jiné chyby.
Mohu zametat před vlastním prahem doalelujá a bude mi to pendrek platné, protože tuhle chybu nemám šanci odhalit, pokud nejsem zrovna winguru a není mi při prvním pohledu na assembler jasné, že právě tohle je volání API takové a makové a po návratu program očekává v EAX hodnotu 0, ovšem teď se SP2 se tam vrací 0x112633AF (not bug, feature!), a že bude potřeba tam či onam dopsat XOR EAX,EAX.
Pamatuju se na jiný příklad Borlandí chyby - napsal jsem program v BP7 a on všude běžel, jen v práci na nové grafické stanici (tenkrát!) padnul s Runtime Error 200.
Několik dní jsem zametal před vlastním prahem... A věřím, že nás byly tisíce... Taky to byla chyba aplikace, ne OS (nebo hardwaru), ale bylo mi to jaksi houby platné - já ji neudělal a nebylo ani v mých silách ji napravit... | |
Re: Zametáme... - mike (web)(14.09.2004 23:40:26)V Pascalu jsem uz nepsal roky, naposled v BP7, takze nevim, jak casto se ted pointery pouzivaji. On to taky byl jen priklad, dalsi moznost je treba neinicializovana promenna, pouzita jako index do pole. No, myslim, ze se shodneme na tom, ze je potreba nejdriv zjistit, kde ta chyba doopravdy je. Kdyby mel ten program spravne osetrene vyjimky a nenechaval to na runtime, mohl by to rict sam. Delame to tak. Sice v C/C++, ale v Delphi to pujde taky. Dokonce jsem se nekde potkal s nejakou knihovnou, ktera to umela.
Na Runtime Error 200 v BP7 si vzpominam. Deleni nulou na prilis rychlem pocitaci, kdy se merila rychlost pro Delay, cyklus probehl v nemeritelnem case a vysledkem se neco delilo. Dobry priklad mizerne napsaneho runtimu. Opravil jsem to hexa editorem, protoze se mi nechtelo prekladat runtime kvuli jednomu programu, jenoz vyvoj uz skoncil. Dobra, jsem systemovy programator, takze takove veci nejsou problem a kvuli tomu mam taky vetsi naroky na ostatni. Do Windows trochu vidim, takze mi trochu vadi ten humbuk okolo SP2. Proste myslim, ze i MS ma narok na neco jako je presumpce neviny a dokud programator neurci skutecnou pricinu chyby, nemel by se vymlouvat na SP. No a jestli to nedokaze? Je mi lito, ale programatorem proste nemuze byt kazdy. Jestli se Borland nebo kdo ted Delphi vlastni snazi naznacit neco jineho, je treba to nechat na jejich supportu. A to je taky pointa Runtime Error 200. Bud si to dokazu opravit sam, nebo se obratim na toho, kdo ten runtime spachal. Prece se nebudu vymlouvat, ze za to muze novy hardware. Tam je to celkem jasne, tak proc je tomu v pripade SP2 jinak? Protoze do verejneho nepritele se trefuje tak snadno? | |
Re: Zametáme... - Arthur Dent (web)(15.09.2004 07:35:45)No, Delphi jsou Pascal už jen podle jména... Je možné tam napsat nějaké pointerové konstrukce, ale je to zbytečné - většina věcí, na které se používaly pointery už je ošetřena standardní objektovou knihovnou.
"Vymlouvat se na servispack"? Hmmm... Program běží. Změní se systém. Program neběží. - Je výmluvou říct "chyba přišla s tou změnou"? Nemyslím. IMHO je to konstatování faktu, druhým krokem je hledání té chyby, popř. hledání jak funkční program záplatovat tak, aby běžel na verzi PŘED i PO.
Křičet "může za to servispek" je stejně zcestné jako křičet "může za to programátor". Ovšem odsouzení SP2 je mnohem jednodušší a "vyfutrované" historickými zkušenostmi. | |
Re: Zametáme... - mike (web)(15.09.2004 21:04:23)Souhlasim, az na ty historicke zkusenosti. Me jsou presne opacne. Ne ze bych se nesetkal s chybami OS, ale byla jich mensina. Aspon na NT rade, o w9x nema cenu mluvit. Zalezi taky na chybe a prave v tomhle pripade (access violation) si na zaklade zkusenosti troufam tvrdit, ze pravdepodobnost chyby aplikace je asi tak 100x vetsi nez chyby v SP a proto je namiste implicitne predpokladat, ze za to muze programator, pokud neni prokazan opak Samozrejme je nejlepsi byt zticha, dokud se pricina chyby nenajde. Jenze vetsina clanku a komentaru na tema SP2 to nedela. | | |
|
|
Re: Zametáme... - mike (web)(15.09.2004 01:35:52)Jeste jsem si vzpomel na jednu svou chybu s velice podobnymi priznaky. Mel jsem program napsany v mirne obskurnim jazyce, ktery nezna pointery vubec. Program pouzival MS knihovnu a chodil leta bez problemu tisicum lidi. Pak MS prisel s novou verzi knihovny a najednou to zacalo padat prave na access violation. Tak jednou za tyden, aby se to lip hledalo.
Takze jsem vsechno pripravil na odchyceni chyby a cekal. Tri tydny a samozrejme to na mne vyskocilo v okamziku, kdy jsem se po 14 hodinach prace konecne chystal odejit. Tak jsem si zase sedl a zacal zkoumat. Muj program volal funkci z knihovny, ktera vratila pole 2 bytovych cisel a jejich pocet. Kdyz doslo k chybe, pole koncilo na hranici page (4 kB) a nasledovala volna pamet, kde nebylo nic namapovano. Program tam sahnul, coz samozrejme zpusobilo vyjimku a chyba byla na svete. Ted jeste zjistit, proc. Ukazalo se, ze jsem asi 5 let predtim udelal chybu a z pole jsem cetl 4 bytova cisla, ktere se naslednym prirazenim do dvoubytove promenne spravne orezala a vsechno bez problemu fungovalo. Jenze pri cteni posledniho prvku se cetly 2 byty navic za koncem pole, coz ve vyse uvedenem pripade zpusobilo vyjimku. Cela "chyba" MS byla v tom, ze v predchozi verzi knihovny pole nikdy nekoncilo na hranici stranky za kterou uz zadna dalsi nebyla. V te nove se to obcas stalo. Zrejme zmenili zpusob alokace pameti.
Podle logiky znalcu SP2 jsem mel prohlasit, ze v nove knihovne ma MS chybu a je treba pouzivat starsi verzi. Jenze ta chyba byla ma. | | |
|
mam problem - Tomáš (web)(22.09.2005 14:56:28)Prosim vas mohl by mi poradit nekdo co mam delat nenabehne mi vubec plocha a pred tim mi to napise chyba aplikace 0xc0000005 atd... dekuju za poradeni muj e-mail je:
t.forman@centrumm.cz moc diky | | |
|
|
|
|
|