نمایش نتایج 1 تا 9 از 9

نام تاپیک: Handling Errors and Exceptions in Delphi

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    Handling Errors and Exceptions in Delphi

    Error و Exception :

    هر Exception یی معمولاً یک وضعیت خطاست یا اتفاقی ست که جریان اجرای طبیعی برنامه را متوقف می‌کند . هر وقت که حاصل پردازش یک خط از کد ، خطایی باشد ، دلفی شیئی می‌سازد که از کلاس TObject مشتق شده و خطا را توسط آن به نمایش در می‌آورد.

    Guarded Block
    هر برنامه یا بوسیله بعضی کدهای خاتمه دهنده ی برنامه یا بوسیله کنترل خطاها ، گاهاً هر دو ، نسبت به خطاها واکنش نشان می‌دهد. راهی برای به دام انداختن error یا exception روی کدهای مشخص وجود دارد و این زمانیست که بتوانید حدس بزنید در بخشی از کد ، ممکن ست error یا exception یی رخ دهد. Try..Except ،دستورات را در بلوکی حفاظت شده اجرا می‌کند.

    شکل کلی :
    try
    {guarded block of code}
    except
    on <ESomeException> do begin
    {exception block-handles SomeException}
    end;
    end;


    اگر دستورات نوشته شده در بخش try بدون بروز هیچگونه exception یی اجرا شوند، از اجرای قسمت except صرف نظر می‌شود و کنترل برنامه به بعد از کلمه کلیدی end منتقل می‌شود. بنابراین ما دستوراتی که ممکن ست اجرای آنها باعث بوجود آمدن خطایی شود را در بخش try (یعنی بین کلمه try و except) و دستوراتی که بعد از بروز خطا میبایست اجرا شوند را در بخش except (یعنی بین کلمه except و end) می‌نویسیم، به این قسمت اصطلاحاً exception handling یا کنترل کننده خطا اطلاق می‌شود.

    مثال :

    ...
    Zero:=0;
    try
    dummy:= 10 / Zero;
    except
    on EZeroDivide do
    MessageDlg('Can not divide by zero!',
    mtError, [mbOK], 0) ;
    end;
    ...


    مثال بالا را می‌توان به شکل ساده زیر نیز نوشت ، که در این حالت هر نوع خطایی با پیغام error! نمایش داده می‌شود‌:

    ...
    Zero:=0;
    try
    dummy:= 10 / Zero;
    except
    MessageDlg('error !', mtError, [mbOK], 0) ;
    end;
    ...


    Protecting Resources – محافظت از منابع :
    وقتی که بخشی از کد ،resource یی را در اختیار می‌گیرد ، اغلب لازم ست که از آزاد شدن آن resource مطمئن شد ، بدون توجه به اینکه اون بخش از کد ، طبیعی خاتمه پیدا کند یا با خطا. در این حالت می‌توان از try..finally استفاده کرد. در واقع try..finally ،نوعی بلوک محافظ حافظه ست و می‌تواند از بوجود آمدن Memory Leak جلوگیری کند و از این نظر کد مطمئنی خواهید داشت.

    شکل کلی :

    {some code to allocate resources}
    try
    {guarded block of code}
    finally
    {termination block - code to free resources}
    end;


    نحوه ی اجرا به این صورت ست که دستورات مابین کلمات کلیدی try و finally اجرا می‌شوند و اگر خطایی اتفاق افتاد یا هیچ خطایی اتفاق نیفتاد ، دستورات مابین کلمات کلیدی finally و end اجرا می‌شوند، یعنی در هر صورت قسمت finally اجرا می‌شود.

    مثال :

    ...
    AboutBox:=TAboutBox.Create(nil) ;
    try
    AboutBox.ShowModal;
    finally
    AboutBox.Release;
    end;
    ...


    Application.OnException
    اگر شما خطاهایی که ممکن ست در یک برنامه اتفاق بیفتد را کنترل نکنید ، دلفی از کنترل کننده ی خطای پیش فرض خود استفاده خواهد کرد، که نتیجه آن نمایش دادن یک message box هست. همچنین می‌توانید از رویداد Application.Exception استفاده کنید و کنترل خطا را در سطح Application بنویسید ، به این معنی که نیازی نیست برای هر مجموعه از دستورات (که احتمال خطای آن وجود دارد) ، از try..except استفاده کنید و فقط و فقط کنترل کننده خطا را در این رویداد می‌نویسید و از این پس با بروز هر error یا exception یی این رویداد به صورت خودکار فراخوانی می‌شود.

    Break On Exceptions – وقفه روی exception ها
    وقتی برای قسمتهایی از برنامه ، کنترل کننده خطا (exception handling)می‌نویسید ، احتمالاً نمی‌خواهید هنگام بروز یک خطا (که کنترل کننده ی آن را هم نوشته اید) ، برنامه متوقف شود و دلفی، سورس برنامه را به همراه یک پیغام خطای زیبا! نمایش دهد، حداقل در زمان تست کنترل کننده خطا، چون قصد دارید نتیجه کنترل کننده‌ای را که نوشته‌اید ، ببینید. ویژگی بزرگی در دلفی وجود دارد که این کار را برایتان انجام می‌دهد ، یعنی می‌توانید نمایش پیغام خطا را توسط دلفی (که می‌تواند هنگام تست کنترل کننده خطایی که نوشتید آزار دهنده باشد) غیر فعال کنید.


    Tools -> Debugger Options -> Language Exceptions Tab -> Stop on Delphi Exceptions
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله m-khorsandi : یک شنبه 22 بهمن 1385 در 10:59 صبح

تاپیک های مشابه

  1. Error Handling
    نوشته شده توسط Success در بخش برنامه نویسی در 6 VB
    پاسخ: 4
    آخرین پست: دوشنبه 16 خرداد 1384, 09:38 صبح
  2. مشكل با ADO در هنگام خروج از برنامه
    نوشته شده توسط behrooz در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 5
    آخرین پست: پنج شنبه 14 اسفند 1382, 00:45 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •