Posted By: dzemen () on 'CZprogram'
Title:     Re: Call stack
Date:      Thu Mar 27 15:54:53 2003

> Zdar,
>  obcas mi program zhavaruje a sam o sobe vypise nejake info - konkretne call
> stack a obsahy nejakych promennych. Konkretne nedavno eDonkey2000. Jak se 
> tohle da udelat, aniz bych to spoustel v debuggeru? Zajima me to pro ruzne 
> platformy - ponejvice jak by se to udelalo v Linuxu a Woknech. Ze bych neco 
> takoveho dostal z jednocipu je asi naprosta pitomost :-)
>  Znate nekdo na to nejakou fintu?

Ve Windowsech je na to funkce SetUnhandledExceptionFilter, pres kterou 
nastavis fci, ktera se ma volat pri chybe. Ta funkce (to co das jako 
parametr do SetUnhandledExceptionFilter) ma parametr typu 
STRUCT _EXCEPTION_POINTERS, ktery obsahuje EXCEPTION_RECORD a CONTEXT. V 
EXCEPTION_RECORD je mimo jine: kod chyby (EXCEPTION_ACCESS_VIOLATION, 
EXCEPTION_ARRAY_BOUNDS_EXCEEDED, atd.) a adresa chyby. V CONTEXT je aktualni 
obsah registru procesoru. 
Z nej se pres obsahy registru ESP&EBP da celkem slusne udelat backtrace, ale 
to uz je compiler-specific (ale napr. nam to v Delphi funguje bezvadne) a taky 
zalezi napr. na tom, zda (ne)mas zapnute Stack Frames v kompilatoru.

V Linuxu....co backtrace()/backtrace_symbols()/backtrace_symbolsfd() z 
execinfo.h ?
Ale bacha ! Linux only (neni na jinych *NIXech) !

Dzemen

Search the boards