рдЕрдкрд╡рд╛рдж рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреИрдХ рдкреНрд░рдЪрд╛рд░ C ++ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВред рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдмреНрд▓реЙрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╕реБрд╕рдВрдЧрдд рд╣реИред рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ, рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдмрд╣реБрдд рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред
рд╕реНрдЯреИрдХ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рд╕рдЯреАрдХ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЛ рдмрд╣реБрдд рдХреБрд╢рд▓ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рдкрд░реАрдд, рд▓рд┐рдВрдХ рдХрд╛ рд╕реНрдерд╛рдиреАрдпрддрд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЬреЛ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛, рдЗрд╕рдХреЗ рд╡рд┐рдЦрдВрдбрди рдХреЛ рдХрдо рдХрд░рдирд╛ рдФрд░ рдореЗрдореЛрд░реА рдХреИрд╢ рдХрд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, C ++ рдореЗрдВ, рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рд╕реБрдзрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдкрд╡рд╛рдж рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рд░рдг рдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмреЗрд╣рдж рдорд╣рдВрдЧрд╛ рд╣реИред рдЖрдЗрдП рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВред
рдпрд╣рд╛рдВ рдЬрд╛рд░реА
рд╣реИ ред
рдЪреАрдЬреЗрдВ рдХреИрд╕реА рдЪрд▓ рд░рд╣реА рд╣реИрдВ?рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ:
- рдкрд╣рд▓реЗ рд╢рдмреНрджреЛрдВ рдХреЛ "рд╣рд╛рд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рднреБрдЧрддрд╛рди рдХрд░реЗрдВ" рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рднрд╛рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рдореЗрдВ рдХреЛрдб рд╕реЗ рджреВрд░ рд╕реНрдерд┐рдд рд╣реИред
- рджреВрд╕рд░реА рд░рдгрдиреАрддрд┐ рд╣реИ "рдереЛрдбрд╝рд╛ рдХрдо рдФрд░ рд╣рдореЗрд╢рд╛ рднреБрдЧрддрд╛рди рдХрд░реЗрдВред" рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╣реА рд╕рдВрд╡рд░реНрдзрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд╛рдЧрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдкрд╡рд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдЯреИрдХ рдХрд╛ рдкреНрд░рдЪрд╛рд░ рд╕рд╕реНрддрд╛ рд╣реИред
рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг:
- рдЬреАрд╕реАрд╕реА / рдПрд╕рдЬреЗрдПрд▓рдЬреЗ ред SJLJ рд╕реЗрдЯрдЬрдореНрдк / рд▓реЙрдиреНрдЧрдЬрдореНрдк рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдпрдВрддреНрд░рдг рд╣рд╕реНрддрд╛рдВрддрд░рдг рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реБрд▓реНрдХ рднреА рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╕рднреА рдЦрд░рд╛рдм рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рддрдХ, рдпрд╣ рдореБрдЦреНрдп рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рдерд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ longjmp рддрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд╢рд┐рд╢ рд╕реЗрдЯрдЬрдореНрдк рдореЗрдВ рдХреЙрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпрд╛рд╕ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдмрдлрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдПрдХ рдкреНрд░реЛрд▓реЙрдЧ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрджрд░реНрдн рд╕реНрдЯреИрдХ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдлрд╝реНрд░реЗрдо рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдПрдХ рдЙрдкрд╕рдВрд╣рд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреЛрдб рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдЯрд░реНрди рдХреЛ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ, рдорд╛рди рд╕рдлрд╛рдИ рдХреЛрдб рдХрд╛ рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ, рдЬрд┐рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рд┐рдВрдХрд░ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЗрди рдкреЗрдбрд╝реЛрдВ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдПрдХ рдПрдХрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреНрд░реА (рдмрд╣реБрдд рдЦреБрд░рджрд░рд╛) рдореЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЪрдорддреНрдХрд╛рд░ рдХреЛ рдПрд▓рдПрд╕рдбреАрдП (рднрд╛рд╖рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ ".gcc_except_table" рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
рдпрджрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рдж рдХреЗ type_info рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдмреНрд▓реЙрдХ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдЕрдкрд╡рд╛рдж рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рд╣реИрдВрдбрд▓рд░ рд╕рдВрджрд░реНрдн рддрдХ (рдХреЙрд▓ рдлрд╝реНрд░реЗрдо рдкрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ), рдХреЛрдб рдХреЗ рдкрддреЗ рдирд┐рдХрд╛рд▓реЗ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ (рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдмрд╣реБрдд рдорд╣рдВрдЧреА рд╣реИред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕реЗрдЯрдЬрдореНрдк рдХреЛ рд╣рд░ рдХреЛрд╢рд┐рд╢-рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рджрд░реНрдЬрдиреЛрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рдордп, рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрдХрд╛рд░ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдХрд▓рдХ рдмрд╣реБрдд рддрд░реНрдХрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рд╕реЗрдЯрдЬрдореНрдк рдХреЛ рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░, рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧреА рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ (рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ)ред рд▓реЗрдЦрдХ рдХреЛ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╕реЗрдЯрдЬрдореНрдк рдХреА рд▓рд╛рдЧрдд рдЗрддрдиреА рдЕрдзрд┐рдХ рд╣реИред
рд▓реЗрдХрд┐рди рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рд╕рд╣рд╛рдпрдХ рдХреЛрдб, рд╡рд┐рд╢реЗрд╖рдХрд░ рдЧреИрд░-рддреБрдЪреНрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВред рдХрдВрдкрд╛рдЗрд▓рд░, YACC рдХреА рддрд░рд╣, рд╕реНрдЯреИрдХ рдорд╢реАрди рдХреЗ рд╕рднреА рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкреЗрдВрдЯ рдХрд░рддрд╛ рд╣реИред рдФрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрд╢рд╛рд╡рд╛рджреА, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдЕрддрд┐рд░реЗрдХ рдФрд░ рддреБрдЪреНрдЫ рдХреЛрдб рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрд╡рд╢реЗрд╖ рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
- GCC / DW2 ред рдпрд╣ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред DW2 рдХрд╛ рдЕрд░реНрде рд╣реИ DWARF2 (рдЕрдм 3 рдкрд╣рд▓реЗ рд╕реЗ рд╣реА) - рд╕рд╣рд╛рдпрдХ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░реВрдк, рдЬрд┐рд╕рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдбреАрдмрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд┐рд╕реА рднреА рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛ, рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ (рдКрдкрд░реА) рдХреЙрд▓ рдХреЗ рдлреНрд░реЗрдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдЯреИрдХ рдкрд░ рдХреНрдпрд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд░рдЦрддрд╛ рд╣реИ, рдЬрдм рд╡реЗ рдЗрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ ... рджрд░рдЕрд╕рд▓, рдпрд╣ рдкреНрд░рд╛рд░реВрдк DWARF рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИред рдЬреАрд╕реАрд╕реА рдХреЗ рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рдирдХред
рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдХреЙрд▓ рдХреЗ рдЙрдЪреНрдЪ рдлреНрд░реЗрдо рдореЗрдВ рдЖрдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкрддреЗ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдорд╛рддреНрд░рд╛ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рд╕рдВрдХреБрдЪрд┐рдд рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмрд╛рдЗрдЯ рдХреЛрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЕрдкрд╡рд╛рдж рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рдмрд╛рдпреЛрдЯреЗрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдм ".eh_frame" рдФрд░ ".hh_frame_hdr" рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
рд╣рд╛рдВ, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, DWARF рджреБрднрд╛рд╖рд┐рдпрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдмреИрдХрдбреЛрд░ рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ, рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рдмрджрд▓рдХрд░, рдЖрдк рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рднреА рдЖрдк рдЪрд╛рд╣реЗрдВред
рдЬреАрд╕реАрд╕реА / рдбреАрдбрдмреНрд▓реНрдпреВ 2 рдЬреАрд╕реАрд╕реА / рдПрд╕рдЬреЗрдПрд▓рдЬреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдПрд▓рдПрд╕рдбреАрдП рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдЯреИрдХ рдкреНрд░рдореЛрд╢рди (рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ) рд╕реЗ рдЬреБрдбрд╝реА рд▓рд╛рдЧрдд рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рд▓рд╛рдЧрдд рдЕрдзрд┐рдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдИ рднреА рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдЙрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкрд░рддреЛрдВ рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░-рдирд┐рд░реНрднрд░ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рдордЬрдмреВрдд рдПрдХреАрдХрд░рдг рдХреЛ рдиреЛрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- рдПрдордПрд╕ рд╡реАрд╕реА ++ ред рдпрд╣ рд╕рдВрдХрд▓рдХ рдПрдХ рджреВрд╕рд░реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд░рдгрдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
- рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдПрдХ рд╕реНрдЯреИрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╕реЗ рдкрд┐рдЫрд▓реЗ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛, рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдФрд░ рд╕рд╣рд╛рдпрдХ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрддрд╛ FS рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: [0], рдЬреЛ рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдвреЗрд░ рдХреЗ рдКрдкрд░ рд╣реИред Win32 рдореЗрдВ FS рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдереНрд░реЗрдб рдЗрдирдлрд╛рд░реНрдореЗрд╢рди рдмреНрд▓реЙрдХ ( TIB ) (Win64 рдореЗрдВ GS) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди (рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде) рдФрд░ рдПрдХ рдЙрдкрд╕рдВрд╣рд╛рд░ рднреА рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдлрдПрд╕ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ: [реж] рдпрджрд┐ рд╕рдлрд▓ рд╣реЛред
- рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд╢рд┐рд╢-рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ - рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд╢рд┐рд╢-рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд╛рдЬреНрдп рдХреЗ рдЕрдиреБрд░реВрдк рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░рдВрдн рдФрд░ рдЕрдВрдд рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛрддрд╛ рд╣реИ (рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдЕрдВрддрд░рд╛рд▓ рд╣реЛрддрд╛ рд╣реИ), рдФрд░ рд╕рдВрдХрд▓рдХ рдЦреБрдж рдЗрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдкрд░ рдирдЬрд░ рд░рдЦрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣, рд╕рдВрдХрд▓рдХ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдвреЗрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд╢рд┐рд╢-рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреИрдЪ-рдмреНрд▓реЙрдХ рддрд╛рд▓рд┐рдХрд╛ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╕рднреА рдмреЗрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ type_info рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред
- рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрд▓ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд╕рдВрд╕рд╛рдзрди рдФрд░ рдкрд┐рдЫрд▓реЗ рддрддреНрд╡ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрдИ рд╢реНрд░реГрдВрдЦрд▓рд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬреЛ рд╡рд┐рдирд╛рд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреЗ рджрд╛рдпрд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВред рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рдордп, рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬреЛ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЖрдк рдЖрд╡рд╢реНрдпрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рд╕рдВрд╕реНрдХрд░рдг x64 рдХреЗ рд▓рд┐рдП, рд╕рд╣рд╛рдпрдХ рд╕реНрдЯреИрдХ рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, .pdata рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреА рдЧрдИ рдереАрдВ; рд╕рдВрднрд╡рддрдГ, рдПрдордПрд╕ рдкрд╣рд▓реА рд░рдгрдиреАрддрд┐ рдХреЛ рдмрд╣реБрдд рдЖрд╢рд╛рдЬрдирдХ рдорд╛рдирддрд╛ рд╣реИред
- рдЬрдм рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдирд┐рдпрдВрддреНрд░рдг SYSENTER рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрд╕рдЬреЗрдПрд▓рдЬреЗ рдХреЗ рд╕рдорд╛рди рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ - рд╡реНрдпрд╛рдкрдХ рд╕рд╣рд╛рдпрдХ рдХреЛрдб рдФрд░ рдХрдо рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреАред - рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдмрдврд╝рд╛рдиреЗ рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрдпреБрдХреНрдд рдХреИрдЪ рдмреНрд▓реЙрдХ рдЪреБрдирдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рджрд┐рдЦрддреА рд╣реИ:
- рдЬрдм рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рдХреЙрдкреА рд╣реЛрддреА рд╣реИ, рдЙрд╕рдХрд╛ type_info, рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░
- рдЯреНрд░рд╛рдИ рдмреНрд▓реЙрдХ рдХреЗ рдвреЗрд░ рдХреЗ рд╕рд╛рде рдЙрдардирд╛ рдФрд░ рд╕рднреА рдкрдВрдЬреАрдХреГрдд рд╕реНрдЯреИрдХреНрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ (рдЗрд╕ рд╕реНрдЯреИрдХ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╣рд░ рдЬрдЧрд╣ рдЕрд▓рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рд░ рдПрдХ рд╣реА рд╣реИ), рд╣рдо рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВред
- рдпрджрд┐ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдХреИрдЪ рдмреНрд▓реЙрдХ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдкрд╡рд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдмрди рдЬрд╛рддрд╛ рд╣реИ; рд╣рдо рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдВрджрд░реНрдн рдХреЗ рдмрдЬрд╛рдп рдХреИрдЪ рдмреНрд▓реЙрдХ рдорд╛рди рд╕реЗ рдЕрдкрд╡рд╛рдж рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред
- рдпрджрд┐ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдерд╛, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ - рдЕрдкрд╡рд╛рдж
- "рдиреЛрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рд▓рдХрд┐рди":
some_exception exc("oioi"); throw exc;
рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдкреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ / рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдмрдирд╛рддрд╛ рд╣реИ
throw *new some_exception("oioi");
рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рджреЗрддрд╛ рд╣реИ
catch(some_exception exc) ...
рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдорд╛рддрд╛ рдФрд░ рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓
catch(const some_exception *exc) ...
рдЬрдм рддрдХ рдЖрдк рдкреЙрдЗрдВрдЯрд░ рдирд╣реАрдВ рдЫреЛрдбрд╝рддреЗ рддрдм рддрдХ рдПрдХ рдЕрдкрд╡рд╛рдж рдЙрдбрд╝ рдЬрд╛рдПрдЧрд╛
throw some_exception("oioi"); ... catch (const some_exception &exc)....
рдиреНрдпреВрдирддрдо рд▓рд╛рдЧрдд
рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдБ ,
рдпрд╣рд╛рдБ рдФрд░
рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ ...рдФрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рд╣реИ - рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╡рд┐рдирд╛рд╢рдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирдХреЗ рд╢рд░реАрд░ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВред рдпрд╣ рдХреИрд╕реЗ рд╣реБрдЖ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрд┐рдкрдЪрд┐рдкрд╛, рднрд╛рд░реА рдФрд░, рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИрдВ? рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗред
рдЖрдЗрдП, рд╕рдорд╛рдзрд╛рди рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЗрд╕реЗ рд╕рд░рд▓ рдЫреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд░реВрдк рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ред
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд░рдгрдиреАрддрд┐ рдЪреБрдирддреЗ рд╣реИрдВ - рдпрд╣ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред
- рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ - setjmp / longjmp
- рд╣рдо рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд╕рднреА рд╡рдВрд╢рдЬ рд╕рдВрднрд╛рд╡рд┐рдд рдкрджреЛрдиреНрдирддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрддреЗ рд╣реИрдВред
struct unw_item_t { unw_item_t (); virtual ~unw_item_t (); void unreg(); unw_item_t *prev_; };
- рдФрд░ рдПрдХ рдФрд░, рдЬрд┐рд╕рдХрд╛ рджрд╛рдпрд░рд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕-рдЦрдВрдб рд╣реИ
struct jmp_buf_splice { jmp_buf_splice (); ~jmp_buf_splice (); jmp_buf buf_; jmp_buf_splice *prev_; unw_item_t objs_; };
- рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдХрд╛рд╕реНрдЯ рдЪрд╛рд░ * рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХ рджреЗрдВрдЧреЗ
extern int throw_slice (const char *str);
- рдПрдХ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдореИрдХреНрд░реЛрдЬрд╝
- рдЕрдм jmp_buf_splice рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╢рд╡ рджрд┐рдЦрд╛рдПрдВ:
static jmp_buf_splice *root_slice_ = NULL; jmp_buf_splice::jmp_buf_splice () { objs_ = NULL; prev_ = root_slice_; root_slice_ = this; } jmp_buf_splice::~jmp_buf_splice () { root_slice_ = prev_; }
рдпрд╣рд╛рдВ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдпрджрд┐ root_slice_ рдХреЗ рдмрдЬрд╛рдп рдХрдИ рдереНрд░реЗрдбреНрд╕ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GCC рдХреЗ рд╕рдорд╛рди, TLS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред - рдЕрдм рдЕрдирдЬрд╛рдиреЗ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ:
unw_item_t::unw_item_t () { if (NULL != root_slice_) { prev_ = root_slice_->objs_; root_slice_->objs_ = this; } } unw_item_t::~unw_item_t () { unreg(); } unw_item_t::unreg () { if (NULL != root_slice_ && (prev_ != reinterpret_cast<unw_item_t *>(~0))) { root_slice_->objs_ = prev_; prev_ = reinterpret_cast<unw_item_t *>(~0); } }
- рдЕрдм рдПрдХ рдЕрдкрд╡рд╛рдж рдмрдврд╝рд╛рдиреЗ рдФрд░ рдвреЗрд░ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
static int pop_slice () { jmp_buf_splice *sl = root_slice_; assert (NULL != sl); root_slice_ = sl->prev_; return 0; } int throw_slice (const char *str, bool popstate) { if (NULL == str) return -1; jmp_buf_splice *sl = root_slice_; unw_item_t *obj = root_slice_->objs_; while (NULL != obj) { unw_item_t *tmp = obj; obj = obj->prev_; tmp->~unw_item_t (); } if (popstate) pop_slice (); longjmp (sl->buf_, int(str)); return 0; }
рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ - std рдХрд╛ рдПрдирд╛рд▓реЙрдЧ :: auto_ptr: template<typename cl> class deleter_t : public unw_item_t { public: deleter_t (cl *obj){ptr_ = obj;}; virtual ~deleter_t () {delete ptr_;}; private: cl *ptr_; deleter_t (); deleter_t (const deleter_t &); deleter_t &operator= (const deleter_t &); };
рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ - рд╕рд░рдгреА: template<typename cl> class vec_deleter_t : public unw_item_t { public: vec_deleter_t (cl *obj){ptr_ = obj;}; virtual ~ vec_deleter_t () {delete [] ptr_;}; private: cl *ptr_; vec_deleter_t (); vec_deleter_t (const vec_deleter_t &); vec_deleter_t &operator= (const vec_deleter_t &); };
- рдЙрджрд╛рд╣рд░рдгред
рдЯреЗрд╕реНрдЯ рдХреНрд▓рд╛рд╕ class _A { public: _A():val_(++cnt_){printf ("A::A(%d)\n",val_);} _A(int i):val_(i){printf ("A::A(%d)\n",val_);} virtual ~_A(){printf ("A::~A(%d)\n",val_);} static int cnt_; }; int _A::cnt_ = 0; class A : public unw_item_t, _A {};
рдЙрджрд╛рд╣рд░рдг 1 A a(1); TRY_BLOCK { A b(2); THROW_IN_BLOCK("error\n"); std::cerr << "notreached\n"; } CATCH_BLOCK_FIN { std::cerr << __exc; } FIN_BLOCK;
рдП :: рдП (1)
A :: A (2)
рдП :: ~ рдП (2)
рддреНрд░реБрдЯрд┐
рдП :: ~ рдП (1)
рдЙрджрд╛рд╣рд░рдг 2 A a(1); TRY_BLOCK { A b(2); TRY_BLOCK { A c(3); THROW_IN_BLOCK("error\n"); std::cerr << "notreached\n"; } CATCH_BLOCK_FIN { std::cerr << "." << __exc; RETHROW_IN_BLOCK; } FIN_BLOCK; std::cerr << "notreached\n"; } CATCH_BLOCK_FIN { std::cerr << ".." << __exc; } FIN_BLOCK;
рдП :: рдП (1)
A :: A (2)
A :: A (3)
рдП :: ~ рдП (3)
.рддреНрд░реБрдЯрд┐
рдП :: ~ рдП (2)
..error
рдП :: ~ рдП (1)
рдЙрджрд╛рд╣рд░рдг 3 TRY_BLOCK { vec_deleter_t<_A> da(new _A[3]); TRY_BLOCK { THROW_IN_BLOCK("error\n"); std::cerr << "notreached\n"; } CATCH_BLOCK_FIN { std::cerr << "." << __exc; RETHROW_IN_BLOCK; } FIN_BLOCK; std::cerr << "notreached\n"; } CATCH_BLOCK_FIN { std::cerr << ".." << __exc; } FIN_BLOCK;
рдП :: рдП (1)
A :: A (2)
A :: A (3)
.рддреНрд░реБрдЯрд┐
рдП :: ~ рдП (3)
рдП :: ~ рдП (2)
рдП :: ~ рдП (1)
..error
рдкреНрд░рддрд┐рдмрдВрдзрдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:
рдФрд░ рдЕрднреА рддрдХредрд╡рд░реНрдгрд┐рдд рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рд╣рд┐рдд рд▓рд╛рдн рд╣реИрдВ:
- рд╕рд╛рджрдЧреАред рдХреЛрдб рдХреА рдХреБрдЫ рджрд░реНрдЬрди рд▓рд╛рдЗрдиреЗрдВ - рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
- рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ред
- рдЖрд╕рд╛рди рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреАред рдХреЛрдИ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВред
рдХреНрдпрд╛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬрдмрдХрд┐ рдЗрд╕рдХреЗ рдлрд╛рдпрджреЗ рдмрд░рдХрд░рд╛рд░ рд░рд╣рддреЗ рд╣реИрдВ? рд╣рд╛рдБ рдФрд░ рдирд╣реАрдВред рдХреЗрд╡рд▓ C ++ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдЦрдХ рдХрд┐рд╕ рд╕рдордп рдЧрд╛рдбрд╝реА рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ?рддрдХрдиреАрдХреА рдкреНрд░рд▓рд╛рдк рдХреЗ рдХреНрд░рдо рдореЗрдВ, рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдпреЛрдЬрдирд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВрдЧреЗ?
рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХреНрдпрд╛ рдЧрд╛рдпрдм рдерд╛? рд╡рд╕реНрддреБ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдИ рдЗрд╕рдХрд╛ рдЬреНрдЮрд╛рдиред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рд╡рд╕реНрддреБ рдЖрдо рдвреЗрд░ рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдореЗрдореЛрд░реА рдкрд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░ рд╕рдХрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреНрд░реАрдо-рдирд┐рд░реНрднрд░ рд╕реНрдЯреИрдХ рдкрд░ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдореЗрдВ рдХрд╣реАрдВ рднреА рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдФрд░ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдХ рдореЗрдореЛрд░реА рдкрд░, рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рдЗрд╕ рд╕реНрдЯреИрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рддреЛ:
рд╡реИрд╕реЗред- рдПрдХ рд╡рд╕реНрддреБ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдЯреИрдХ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХреЗ рд╕реНрдЯреИрдХ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рднреАрддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рддреЛ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣реБрдХ рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдореМрдЬреВрдж рд╣реИред
- рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЙрддрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрд▓реЛрдХрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░реЗрдВ, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВ, рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдкреНрд░рдореЛрд╢рди рддрдВрддреНрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
- рдЕрд▓рдЧ рдбреЗрдЯрд╛ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдвреЗрд░ рдХреЗ рд╕рд╛рде рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реВрдЪреА рдХреЗ рдмрдЬрд╛рдп рдирд┐рдпрдВрддреНрд░рдг рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреБрдирд╢реНрдЪ: рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдЕрд░реНрдЯреБрд╢рд┐рди рдХрд╛ рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рджред