PDA

View Full Version : چرا Frame-based Exception Handling؟



r00tkit
شنبه 29 آبان 1389, 20:13 عصر
Hi

چرا به Frame-based Exception Handling (http://msdn.microsoft.com/en-us/library/ms679353%28VS.85%29.aspx) می گیم Frame-based؟

regard

mehdi.mousavi
دوشنبه 01 آذر 1389, 17:11 عصر
سلام.
شاید بهتر بود اسمش رو "Compiler-Based SEH" میذاشتن (و البته بسیاری از افراد نیز اونو با این اسم میشناسن). در هر حال، کلمه Frame که مشخصه برای چی استفاده میشه. وقتی Exception ای رخ میده، سیستم با شروع از Stack Frame فعلی، اولین Exception Handler رو در Thread جاری پیدا میکنه. بخوام دقیق تر بگم، اولین EXCEPTION_REGISTRATION ای که handler اش برای handle کردن Exception رخ داده مناسب هستش رو پیدا میکنه. اگر بودش، که خوب اونو اجرا میکنه و سپس رویه Unwinding رو اجرا میکنه تا بطور مثال Destructor کلاسهایی که در Scope فلان تابع بودن نیز فراخوانی بشن. اگر پیدا نکرد، یه فریم عقب تر میره. Frame قبلی رو از کجا میاره؟ اونم تو همون Structure هستش، در واقع وقتی توابع رو دارید داخل همدیگه Call می کنید، دارید Stack Frame خودتون رو می سازید. همین Stack Frame هنگام رخ دادن Exception برای Traverse کردن Linked List فریمها، استفاده میشه. خلاصه کلمه Frame از اونجا اومده.

اما اگر منظورتون این هستش که چرا Frame-Based، مگه بقیه Frame-Based نیستن؟ خوب، راستش حدس من اینه که شاید بخاطر استفاده از Extended Frame باشه که این اسم رو روش گذاشتن تا تاکید بر سه فیلد اضافی در همون Structure داشته باشن:

struct scopetable_entry *scopetable;
int trylevel;
int _ebp;

موفق باشید.

پاورقی: شک ندارم مقاله Matt Pietrek رو خونده اید، بنظرم چند دفعه دیگه هم بخونید، بازم میشه مطالب جدیدی ازش یاد گرفت.

r00tkit
دوشنبه 01 آذر 1389, 21:46 عصر
با تشکر فراوان از استاد موسوی

برای ایندگان:
http://www.microsoft.com/msj/0197/exception/exception.aspx
http://www.codeproject.com/KB/cpp/exceptionhandler.aspx

----
حیف که این امتحان های میان ترم اذيت‌ می کنه وگرنه .....