Posted By: Quasimodo (Quasimodo) on 'CZprogram'
Title: Re: Call stack
Date: Thu Mar 27 18:22:11 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
Diky moc, presne tohle jsem chtel slyset. Pod woknama jsem to jeste nezkusil,
pod linuxem to slape a po prekompilovani s -rdynamic to dokonce rika i to co
chci. Bezva!
BTW to tyhle funkce fakt znas z hlavy, nebo je umis tak rychle najit?
-
Clovek je nejpomalejsi zname zarizeni typu I/O.
Quasimodo