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