Posted By: TopGun (Top Gun) on 'CZprogram' Title: Re: Access handling Date: Mon Nov 17 15:55:53 2003 Yo, dik, to je ta vec, ktoru som hladal. No stale neviem prist na to, ako z callstacku vysifrovat nazvy volanych funkcii, ako to robia ine softy.. > > > > ako zachytit access violation a podobne errory vo svojom procese ? A > > > zaroven > > > > lognut veci ako call stack, registre, prip. rozne debug info a podobne > > > (ako > > > > to > > > > > > Pokud se bavis o MSVC++, tak tam musis mit program prelozeny tusim s > /EHa > > > (asynchronous exception handling). Potom zachytis access violation v > catch > > > > > (...). Typ vyjimky a registry asi pujdou zjistit nejakou API funkci > (nikdy > > > > > sem to neresil). No a kdyz uz mas registry, tak callstack je trivka :) > > > > Ale ja nechcem vsetok kod davat do try - catch.. Navyse mam nejake > > third-party > > DLLs, ktore mozu tiez vyvolat access a ja ho chcem zachytit. > > > > Nieco sa da zachytit pomocou signal(...), ale kym sa to tam dostane, > prejde > > to roznymi inymi zachytavacimi levelmi, takze registre aj stack uz su > davno > > zabudnute.. Existuju rozne kniznice, ktore sa len staticky prilinkuju a > > vsetko > > spravia bez zasahu do samotneho source kodu.. Prave take riesenie ma > > zaujima.. > > Pokud chces chytat exception na nejvyssi urovni, pouzij fci > SetUnhandledExceptionFilter s parametrem fce typu > LPTOP_LEVEL_EXCEPTION_FILTER (koukam do WinAPI dokumentace k Delphi). Tahle > funkce ma parametr typu STRUCT _EXCEPTION_POINTERS, ktery se sklada z > PEXCEPTION_RECORD (obsahuje kod vyjimky, priznaky (ma smysl asi jen u > Access Violation, kde rika, zda nastala tato vyjimka pri zapisu, nebo > pri cteni), adresu,....proste vsechno o te vyjimce) a z PCONTEXT, ktery > obsahuje registry procesoru v momente vyjimky. > Pomoci ESP/EBP registru a toho, co je ulozeno ve stacku se da udelat i > kompletni backtrace. :-) Alespon u Delphi to jde (myslim si, ze to ale pujde > > kdekoliv, zalezi jen na tom, jak si program uchovava ESP. > No a v pripade, ze mas prilinkovane informace o cislech radek a nazvech > procedur/unit (u Borlandu je to tusim volba Include TD32 info), tak se do > toho > backtrace daji vypsat i nazvu unit, procedur a cisel radek. > > Jo a abych nezapomnel: Pouziti je takove, ze na zacatku programu das > SetUnhandledExceptionFilter(mojefce) a od te doby do ni (do mojefce) padaji > vsechny neodchycene vyjimky. > > Dzemen > > P.S.: Doporucuji prohledat starsi posty, uz se to tu resilo... http://xrs.winradio.com http://www.rbasic.com http://xrs.winradio.com/plugins.htm mailto:stofa@eshs-lab.com TopGun (Are you ready to fly ?)