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 ?)

Search the boards