рд╣реИрд▓реЛ, рдкреНрд░рд┐рдп habrayuzer!

рд╕рднреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХреНрд░реИрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрдВрдкреНрдпреВрдЯрд░ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдЬреАрдбреАрдмреА рдЪрд▓рд╛рдПрдВ рдФрд░ рджреБрд░реНрдШрдЯрдирд╛ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рд╕рдВрджреЗрд╢ "рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░реИрд╢, рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?" рдмрдЧрдЯреНрд░реИрдХрд░ (рдпрд╛ рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛) рдкрд░ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрдХрдиреАрдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рд╛рдБ, рдФрд░ рд╣рд░ рдХреЛрдИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреЗрдЧрд╛! рдмрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдВрдж рдХрд░ рджреЗрдВ - рдФрд░ рдпрд╣ рдмрд╛рдд рд╣реИред
рдХреБрдЫ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди! рдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕, рдЖрдк рдирд╣реАрдВ, рдЬреЛ рдХрд┐ рдЙрди рд╕рднреА рд▓реЛрдЧреЛрдВ рдкрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! рдФрд░ рдлрд┐рд░ рдЖрдкрдХреА рдЦреБрдж рдХреА рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП? SEGFAULT рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрд╕реА рд╕рдордп рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╕рдордЭрджрд╛рд░ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬреЗрдВ?
рд╣реЗрдмреЗрд░реЗ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдПрд░реЗрдирд┐рдо рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рдерд╛ рдЬреЛ рджреБрд░реНрдШрдЯрдирд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдерд╛ред рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕рд╛рд░ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛: рд╣рдо POSIX рд╕рд┐рдЧреНрдирд▓ SIGSEGV рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВред
void catchCrash(int signum) { reportTrouble();
рдЕрдм рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ: рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд░реЗрдВ! рдФрд░ рдпрджреНрдпрдкрд┐ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдзрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ * nix рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмреИрдХрдЯреНрд░реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧ рдЕрд╕реЗрдВрдмрд▓реА рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдореИрдиреБрдЕрд▓ рдзреВрдореНрд░рдкрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ:
void reportTrouble() { void *callstack[128]; int frames = backtrace(callstack, 128); char **strs=backtrace_symbols(callstack, frames);
рдФрд░ рдпрд╣ рдмрд╛рдд, рд░рд┐рдкреЛрд░реНрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓реА рдЧрдИ! рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдХреНрдпрд╛ рд╣рдореЗрдВ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯрд░ рднреЗрдЬрдирд╛ рд╣реИ? рдмреЗрд╢рдХ, GUI- рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдпрд╣ рдереЛрдбрд╝рд╛ рдЦрддрд░рдирд╛рдХ рд╣реИ - рд╕рдм рдХреЗ рдмрд╛рдж, SEGFAULT рдХреЗ рдмрд╛рдж, рдЧреНрд░рд╛рдлрд┐рдХ рдлреНрд░реЗрдорд╡рд░реНрдХ (рдЖрдВрддрд░рд┐рдХ, рдпрд╛ рдирдЧреНрди Xs) рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдкрд░реНрдпрд╛рдкреНрддрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ (рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рдордЭреМрддреЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдФрд░ рдмреЙрдХреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ " рдЕрдирд╛рдо рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬреЗрдВред " рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рди рдХреЗрд╡рд▓ рдЕрдиреИрддрд┐рдХ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд╛рдиреВрди рджреНрд╡рд╛рд░рд╛ рднреА рдореБрдХрджрдорд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╕рдордЭреМрддреЗ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ рдЗрд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рд╣рдорддрд┐ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ)ред
рдЕрдм рд╣рдо рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред рдЪрд▓реЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рдФрд░ рд╕рд░рд▓ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ
рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рд╕реВрдЪрдХ рдкрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЖрджрд┐рдо рд╣реИ, рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ рдЕрдЧрд░ рд╕реВрдЪрдХ "рдЖрдХрд╛рд╢" рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдЗрд╕реЗ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рд╕рднреА рдХреЛ рдмрд╣реБрдд рдкреНрдпрд╛рд░реЗ рдкреНрдпрд╛рд░реЗ
reinterpret_cast
рд▓рд╛рдЧреВ рдХрд░реЗрдВ! рдЗрд╕рд▓рд┐рдП, рдмреИрдХрдЯреНрд░реИрдХ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд╝рдВрдХреНрд╢рди
goCrash()
рдФрд░
crash(void *)
рдмрдирд╛рддреЗ рд╣реИрдВред
int crash(void *obj) { Crasher *crasher = reinterpret_cast<Crasher *>(obj); crasher->doSomething(); return -1; } void goCrash() { const char *str = "Hello, crash!"; const char *str2 = "Hello again, crash!"; char str3[200]; sprintf(str3, "%s\t\t%s\n", str, str2); long long add = rand() % 20000 + 1500234000l;
рдареАрдХ рд╣реИ, рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ
Crasher
рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдЬреНрдЮрд╛рдд рдкрддрд╛ рджреЗ рд░рд╣реЗ рд╣реИрдВред рдмрд╣реБрдд рдЙрддреНрд╕реБрдХ! рдЖрдЗрдП рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рд╡рд░реНрдЧ:
#define P_DOUBLE_COUNT 10000 class Crasher { public:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
doSomethingPrivate()
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ null рдкреЙрдЗрдВрдЯрд░ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ, рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВред рдЕрдЪрд╛рдирдХ, рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрддреЗ рдХреЗ рд▓рд┐рдП
doSomething()
рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЕрднреА рднреА рдЬреАрд╡рд┐рдд рд░рд╣реЗрдЧрд╛?
рдЕрдм рдЖрдк рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдмрдирд╛ рдФрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рдХреНрдпрд╛ рджреЗрдЦреЗрдВрдЧреЗ? рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди
curl
рдиреЗ рдХрд╕рдо рдЦрд╛рдИ рдХрд┐ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдареАрдХ рд╣реИ, рдпрд╣ рдмрдХрд╡рд╛рд╕ рд╣реИ, рдЖрдк рд╣рдорд╛рд░реА рджреБрд░реНрдШрдЯрдирд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рддреБрд░рдВрдд рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ
cat crash_report.txt
рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рд╣рдо рдФрд░ рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ?
рдФрд░ рд╣рдо рд▓рд╛рдЗрди рджреЗрдЦрддреЗ рд╣реИрдВ
"That's a function!"
doSomething()
рд╡рд┐рдзрд┐ рд╕реЗ рдкреНрд░рд╛рдкреНрдд! рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╣реИ рдирд╛? рдПрдХ рдЖрдХрд╛рд╢ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ, рддрд░реАрдХреЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ? рдЦреИрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдЦрд┐рд░рдХрд╛рд░, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреНрд░реИрд╢ рд╣реЛрддрд╛ рд╣реИ (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ)
doSomethingPrivate()
рдХреЙрд▓ рдкрд░, рдФрд░
doSomethingPrivate()
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ:
0 segfault 0x000000010d0a98c8 _Z13reportTroublev + 40 1 segfault 0x000000010d0a99d0 _Z10catchCrashi + 16 2 libsystem_c.dylib 0x00007fff99b5dcfa _sigtramp + 26 3 ??? 0x00007fff00000000 0x0 + 140733193388032 4 segfault 0x000000010d0a9c67 _ZN7Crasher11doSomethingEv + 71 5 segfault 0x000000010d0a9880 _Z5crashPv + 32 6 segfault 0x000000010d0a9ac7 _Z7goCrashv + 199 7 segfault 0x000000010d0a9b33 main + 67 8 segfault 0x000000010d0a9854 start + 52
рдкрд╣рд▓реЗ рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ,
crash()
рдмреБрд▓рд╛рддреЗ рд╕рдордп рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрддрд╛ рд╢рд┐рдлреНрдЯ рдирд╣реАрдВ рдХрд░реЗрдВ
crash()
, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдпрд╣ рдХрд╣рд╛рдВ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрддрд╛ рд╣реИ? рдЕрд╣рдо!
That's a function! That's a private function! myPrivateInteger == 1752392050 myPrivateDoubles[1] == 60993401604041306737928347282702617388988841504491171140800281285302442927306116721201046092641903128620672849302937378251940003901836219046866981678295779355600933772275817062376375849852470059862498765690530537583237171035779906888043337758015488.000000 myPrivateString == 0x63202c6f6c6c6548 That's a function! 0 segfault 0x0000000109a5e8c8 _Z13reportTroublev + 40 1 segfault 0x0000000109a5e9d0 _Z10catchCrashi + 16 2 libsystem_c.dylib 0x00007fff99b5dcfa _sigtramp + 26 3 ??? 0x0000040000000000 0x0 + 4398046511104 4 segfault 0x0000000109a5ec67 _ZN7Crasher11doSomethingEv + 71 5 segfault 0x0000000109a5ec1a _ZN7Crasher18doSomethingPrivateEv + 208 6 segfault 0x0000000109a5ec67 _ZN7Crasher11doSomethingEv + 71 7 segfault 0x0000000109a5e880 _Z5crashPv + 32 8 segfault 0x0000000109a5eac4 _Z7goCrashv + 196 9 segfault 0x0000000109a5eb33 main + 67 10 segfault 0x0000000109a5e854 start + 52
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐
doSomethingPrivate()
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рдХреЙрд▓, рдФрд░ рдкрд╣рд▓реЗ рдПрдХ рдзрдорд╛рдХреЗ рдХреЗ рд╕рд╛рде рдмрдВрдж рд╣реЛ рдЧрдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ
doSomethingPrivate()
рдХрд┐ рдХреНрдпрд╛ рдЗрд░рд╛рджрд╛ рдерд╛ред
рддреЛ, рдХреНрдпреЛрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рдПрдХ рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рдкрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ segfault рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╣реЛрддрд╛ рд╣реИ? рд╡реЗ рдЕрд▓рдЧ рдХреИрд╕реЗ рд╣реИрдВ? рдЕрдиреБрднрд╡реА рдкреНрд▓рд╕ рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реИ
рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред рд╡реЗ рд╡рд░реНрдЧ рдЪрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ! рдпрджрд┐ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕реВрдЪрдХ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЫрд┐рдкреЗ рд╣реБрдП
this
рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдореЗрдВ рдХрдЪрд░рд╛ рд╣реИред рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ (рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛), рдПрдХ рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ
this
'рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП' рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рд╡рд░реНрдЧ рдЪрд░ рдЗрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдЗрд╕рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдХрдЪрд░рд╛ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреЙрдЗрдВрдЯрд░, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рджреБрд░реНрдЧрдо рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдРрд╕реА рдкреНрд░рд╛рдердорд┐рдХ рдмрд╛рддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХреНрдпрд╛ рд╣реИ? рдЦреИрд░, рдлрд┐рд░, рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрд░реИрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдХрд░реЗрдВ! рдФрд░ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЕрдорд╛рдиреНрдп рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрд╢рд╛ рджреБрд░реНрдШрдЯрдирд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдкреВрд░рд╛ рдХреЛрдб рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рддреЛ рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣,
рдЧреАрдереВрдм рдХреЛ ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рд╕рдлрд▓ рдбрд┐рдмрдЧрд┐рдВрдЧ! рдФрд░ рдХрдо рджреБрд░реНрдШрдЯрдирд╛ рд░рд┐рдкреЛрд░реНрдЯ;)