рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ KScrashMonitor_CPPException.c рдореЗрдВ __cxa_throw рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрдм рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬрдм рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ C++ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХреНрд░реИрд╢-рдЯреЗрд╕реНрдЯрд░ рдРрдк рдореЗрдВ CrashLibред
рдореИрдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рдкрд╛рдпрд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдПрдореНрдмреЗрдбреЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдореЗрд╢рд╛ libc++ рд╕реЗ __cxa_throw рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧреА, рди рдХрд┐ KSCrash рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред
рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд: рдЬрдм рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ C++ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ KScrash рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ stackCursor->advansCursor KSCrashReport.c:writeBacktrace() рдореЗрдВ NULL рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЬрд╛рдирдХрд╛рд░реА KScrash рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ред
рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рднрд╛рдЧреНрдп? рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдореНрдмреЗрдбреЗрдб рдврд╛рдВрдЪреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдЯрдХ рдЧрдпрд╛ред
рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрд╛рдп рд╣реИред
рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ, рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВред рдпрд╣ рд╕реНрдерд┐рддрд┐ рдХреА рдореЗрд░реА рд╕рдордЭ рд╣реИ:
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ KScrash рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ __cxa_throw рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рдХрд░ рд╣реИ, рдЬреЛ рдХрд┐ libc++ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рддрдм рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд╕реА ++ рдХреЛрдб рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд▓рд┐рдВрдХрд░ libc++ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрдЬрд╛рдп __cxa_throw рдлреЙрд░реНрдо KScrash рдвреВрдВрдвреЗрдЧрд╛ рдФрд░ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЛ libc++ рд╕реЗ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИ, libc++ рд╕реЗ __cxa_throw рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ KSCrash рдореЗрдВ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдореНрдмреЗрдбреЗрдб рдврд╛рдВрдЪреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдХрд╛рдордХрд╛рдЬ рд╣реЛ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рддрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдореНрдмреЗрдбреЗрдб рдврд╛рдВрдЪреЗ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдореИрдВрдиреЗ PLCrashReporter рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЗрд╕рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ рдХреЛ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рдлреЗрдВрдХреЗ рдЧрдП рд╕реА ++ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП?
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреА рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ @pdrtrifork рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рддреЛ рд╡рд╣ рдЕрднреА рднреА рдХрд┐рд╕реА рднреА рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдлреЗрдВрдХреЗ рдЧрдП рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ рдЬреЛ KSCrash рджреНрд╡рд╛рд░рд╛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИ? рдпрджрд┐ рд╣рдо рдПрдореНрдмреЗрдбреЗрдб рдбрд╛рдпрдиреЗрдорд┐рдХ рд▓рд┐рдм рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдЯрд┐рдХ рд▓рд┐рдм рдореЗрдВ рд▓рд┐рдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдЙрд╕ __cxa_throw рд╕реНрдЯрдм рдХреЗ рд╕рд╛рде, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдЭрд╛ KScrash рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджреЗрдЧрд╛?
рд╣рд╛рдВ, рддреЛ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдореЗрдВ рдореИрдВ рдпрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рд╣реБрдЖ http://stackoverflow.com/questions/36846628/conditionally-overriding-cxa-throw , рдЬрд┐рд╕реЗ рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ @kstenerud рджреНрд╡рд╛рд░рд╛ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛
рд╡реИрд╕реЗ рднреА, рдкреАрдЖрд░ #219 рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХреНрд░реИрд╢ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред
@kstenerud рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ _ "рд╕реА ++ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреБрдо рд╕реНрдЯреИрдХ рдирд┐рд╢рд╛рди рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ" _ред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, __cxa_throw
рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗрд╡рд▓ рдЙрд╕реА рдЫрд╡рд┐ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢, рдЗрд╕рд▓рд┐рдП:
рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ sentry-swift
, https://docs.sentry.io/clients/cocoa/ , рдЬреЛ рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ рдХреЛ рдПрдХ рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИред
рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдЧрд▓рдд рдереА:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ _ "рд╕реА ++ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреБрдо рд╕реНрдЯреИрдХ рдирд┐рд╢рд╛рди рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рдлреЗрдВрдХреЗ рдЧрдП рд╣реИрдВ рдЬреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВ" _ред
KScrash рдХреЛ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:
MyApplication
( main.o
, libKSCrash.a
)libDynamicLibrary.dylib
( lib.o
)/usr/lib/libc++abi.dylib
MyApplication
libKSCrash.a::__cxa_throw
рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЪреВрдВрдХрд┐ libKSCrash.a
__cxa_throw
рдХреЛ weak
$ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, MyApplication
рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ main.o
рдХрд╛ рдЕрдкрдирд╛ __cxa_throw
рд╣реИ libDynamicLibrary.dylib
libKSCrash.a::__cxa_throw
рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ /usr/lib/libc++abi.dylib::__cxa_throw
рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
KScrash рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:
MyApplication
( main.o
)libKSCrash.dylib
/usr/lib/libc++abi.dylib
libDynamicLibrary.dylib
( lib.o
)/usr/lib/libc++abi.dylib
MyApplication
libKSCrash.dylib::__cxa_throw
рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА:
__cxa_throw
рдХреЛ libKSCrash.dylib
. рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ__cxa_throw
рдХреЛ weak
. рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИрдпрджрд┐ __cxa_throw
рдХреЛ weak
( 0000000000002e90 (__TEXT,__text) weak external ___cxa_throw
) рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ libKSCrash.dylib
рдХреЛ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╕рдордп рд▓рд┐рдВрдХрд░ /usr/lib/libc++abi.dylib
рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рдПрдХ рдЧреИрд░ рдЦреЛрдЬреЗрдВ -рдХрдордЬреЛрд░ __cxa_throw
, рдФрд░ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗрдВ рдХрд┐ libKSCrash.dylib::__cxa_throw
рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред MyApplication
рд╕реЗ рдереНрд░реЛ рдЯрд╛рдЗрдо рдкрд░ рд░рдирдЯрд╛рдЗрдо рд╕рд┐рдВрдмрд▓ рд▓реБрдХрдЕрдк рдХреЗ рджреМрд░рд╛рди, libKSCrash.dylib::__cxa_throw
рдХреЛ рдлрд┐рд░ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ weak
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рддрднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ рдХреЛ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣, libDynamicLibrary.dylib
libKSCrash.dylib::__cxa_throw
рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ /usr/lib/libc++abi.dylib::__cxa_throw
рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдЧрд╛ред
__cxa_throw
рдХреЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдкреИрдЪрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдЦ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВрдиреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рддрдХрдиреАрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ __cxa_throw
рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред
рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдврд╛рдВрдЪреЗ рдореЗрдВ рджреБрд░реНрдШрдЯрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЬрдм рдореИрдВ рдХреНрд░реИрд╢ рд▓реЙрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреНрд░реИрд╢ рдирд╣реАрдВ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ рдХреНрд░реИрд╢ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рд╡рд╣реА рдореБрджреНрджрд╛ рд╣реИ?
рдереНрд░реЗрдб 0 рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛:
0 libsystem_kernel.dylib 0x0000000181cc5348 0x181ca4000 + 136008 (__pthread_kill + 8)
1 libsystem_pthread.dylib 0x0000000181ddd7a4 0x181dd6000 + 30628 (+ 360)
2 libsystem_c.dylib 0x0000000181c34fd8 0x181bd2000 + 405464 (рдирд┐рд░рд╕реНрдд + 140)
3 libc++abi.dylib 0x0000000181698068 0x181696000 + 8296 (+132)
4 libc++abi.dylib 0x0000000181698210 0x181696000 + 8720 (+ 304)
5 libobjc.A.dylib 0x000001816c0810 0x1816b8000 + 34832 ( + 124)
6 рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ 0x00000001054a0590 0x10549c000 + 17808 (kscm_cppexception_getAPI + 280)
7 libc++abi.dylib 0x000001816b054c 0x181696000 + 107852 (+16)
8 libc++abi.dylib 0x000001816b0158 0x181696000 + 106840 (__cxa_rethrow + 144)
9 libobjc.A.dylib 0x000001816c06e8 0x1816b8000 + 34536 (objc_exception_rethrow + 44)
10 рдХреЛрд░рдлрд╛рдЙрдВрдбреЗрд╢рди 0x0000000182072344 0x18206a000 + 33604 (CFRunLoopRunSpecific + 544)
11 рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕рд░реНрд╡рд┐рд╕реЗрдЬ 0x0000000183f03f84 0x183ef9000 + 44932 (GSEventRunModal + 100)
12 UIKit 0x000000018b61e880 0x18b5ab000 + 473216 (UIApplicationMain + 208)
@torarnv рдирдорд╕реНрддреЗ, рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рд╕рдлрд▓ рдордЪ-рдУ-рд╣реБрдХ рдбреЗрдореЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЬрдм рдореИрдВ mach_hook
__cxa_throw рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ EXC_BAD_ACCESS рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред
void ter_handler(){
printf("custom handler\n");
}
void test(){
throw std::runtime_error("test function");
}
static void (*orig_throw)(void * thrown_exception, std::type_info *tinfo, void (*dest)(void *));
void hooked_throw(void * thrown_exception, std::type_info *tinfo, void (*dest)(void *)){
printf("hooked_throw...\n");
return orig_throw(thrown_exception, tinfo, dest);
}
int main(int argc, char * argv[])
{
<strong i="5">@autoreleasepool</strong> {
struct rebinding binds[1];
struct rebinding bind1 = {"__cxa_throw", (void *)hooked_throw, (void **)&orig_throw};
binds[0] = bind1;
rebind_symbols(binds, 1);
std::set_terminate(ter_handler);
try {
throw std::runtime_error("test error");
}
catch (...){
printf ("catch exception\n");
}
test();
}
}
рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░реЛ... рд╢реБрднрдХрд╛рдордирд╛рдПрдБ
рдореИрдВ KScrash рдХреЗ рд╕рд╛рде рдПрдХ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реВрдВ,
рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ?
рд╣рдордиреЗ @huakucha рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЧрддрд┐рд╢реАрд▓ рд╣реБрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рд╣реИ: #375
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдЧрд▓рдд рдереА:
KScrash рдХреЛ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:
MyApplication
(main.o
,libKSCrash.a
)libDynamicLibrary.dylib
(lib.o
)/usr/lib/libc++abi.dylib
MyApplication
libKSCrash.a::__cxa_throw
рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЪреВрдВрдХрд┐libKSCrash.a
__cxa_throw
рдХреЛweak
$ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ,MyApplication
рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐main.o
рдХрд╛ рдЕрдкрдирд╛__cxa_throw
рд╣реИlibDynamicLibrary.dylib
libKSCrash.a::__cxa_throw
рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░/usr/lib/libc++abi.dylib::__cxa_throw
рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛редKScrash рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:
MyApplication
(main.o
)libKSCrash.dylib
/usr/lib/libc++abi.dylib
libDynamicLibrary.dylib
(lib.o
)/usr/lib/libc++abi.dylib
MyApplication
libKSCrash.dylib::__cxa_throw
рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА:__cxa_throw
рдХреЛlibKSCrash.dylib
. рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ__cxa_throw
рдХреЛweak
. рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИрдпрджрд┐
__cxa_throw
рдХреЛweak
(0000000000002e90 (__TEXT,__text) weak external ___cxa_throw
) рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛlibKSCrash.dylib
рдХреЛ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╕рдордп рд▓рд┐рдВрдХрд░/usr/lib/libc++abi.dylib
рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рдПрдХ рдЧреИрд░ рдЦреЛрдЬреЗрдВ -рдХрдордЬреЛрд░__cxa_throw
, рдФрд░ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реЗрдВ рдХрд┐libKSCrash.dylib::__cxa_throw
рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПредMyApplication
рд╕реЗ рдереНрд░реЛ рдЯрд╛рдЗрдо рдкрд░ рд░рдирдЯрд╛рдЗрдо рд╕рд┐рдВрдмрд▓ рд▓реБрдХрдЕрдк рдХреЗ рджреМрд░рд╛рди,libKSCrash.dylib::__cxa_throw
рдХреЛ рдлрд┐рд░ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдпрд╣ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐
weak
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рддрднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдХреЗрдПрд╕рд╕реАрд░рд╛рд╢ рдХреЛ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПредрдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣,
libDynamicLibrary.dylib
libKSCrash.dylib::__cxa_throw
рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░/usr/lib/libc++abi.dylib::__cxa_throw
рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдЧрд╛ред__cxa_throw
рдХреЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдкреИрдЪрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдЦ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВрдиреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рддрдХрдиреАрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ__cxa_throw
рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред