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

نام تاپیک: شماره خط و دستوری که باعث خطا شده

  1. #1
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    شماره خط و دستوری که باعث خطا شده

    با سلام
    1. می خواستم بدانم چگونه می توان شما خط و دستوری که باعث بروز خطا شده است را بدست آورد؟
    2. در دلفی جدولی است که خطاها در آن وجود دارد.این جدول در کجا قرار دارد؟

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    می خواستم بدانم چگونه می توان شما خط و دستوری که باعث بروز خطا شده است را بدست آورد؟
    یعنی چی؟
    خوب خطی که خطا می دهد روی اون متوق شده مکان نما را به اونجا ببرید و شماره خط را اون پایین در Status Bar می بینی!!
    در دلفی جدولی است که خطاها در آن وجود دارد.این جدول در کجا قرار دارد؟
    تو help کلمه ی errorرا جستجو کن.

  3. #3
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط dkhatibi مشاهده تاپیک
    یعنی چی؟
    خوب خطی که خطا می دهد روی اون متوق شده مکان نما را به اونجا ببرید و شماره خط را اون پایین در Status Bar می بینی!!
    درست ولی می خواهم آن را در یک Message نمایش دهم.
    مثلا:
    من یک Exe کسی می دهم و شخص زمانی که خطا ظاهر می شود شماره خطا و دستوری را که باعث خطا شده را ببیند و برای من بخواند.

  4. #4
    توی Exe دیگه شماره خط و دستور و این حرفها مطرح نیست. شما میتونید با استفاده از Try Except پیغامهائی رو بذارید که مشخص کنه کجا خطا داده یا اینکه با استفاده از Resource DLL Wizard پیغامهای خطا رو به اون شکلی که خودتون دوست دارید در بیارید. ولی اون هم صد درصد اون چیزی که شما میخواهید در نمیاد
    You never know what you can do until you try

  5. #5
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط mzjahromi مشاهده تاپیک
    توی Exe دیگه شماره خط و دستور و این حرفها مطرح نیست. شما میتونید با استفاده از Try Except پیغامهائی رو بذارید که مشخص کنه کجا خطا داده یا اینکه با استفاده از Resource DLL Wizard پیغامهای خطا رو به اون شکلی که خودتون دوست دارید در بیارید. ولی اون هم صد درصد اون چیزی که شما میخواهید در نمیاد
    ولی این کاری را که من گفتم در VB دوستان انجام دادند.
    من هم از سر علاقه می خواهم تو دلفی یاد بگیرم.
    حال می شه اون روشهایی را که ممکن من را به این هدف نزدیک کنه توضیح بدید یا Linkهاش رو قرار بدید.(ممنون می شم)
    Resource DLL Wizard چطور باید استفاده کنم؟

  6. #6
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    نقل قول نوشته شده توسط SYNDROME مشاهده تاپیک
    ولی این کاری را که من گفتم در VB دوستان انجام دادند.
    برنامه ی نمونه ی vb را بذارید.
    خوب شما هم می تونید این کار رو بکنید. تو فایل exe که شماره خط معنا نداره.
    اما اگر می خواهید جایی که خطا رخ داده را مشخص کنید چون دوستان شما مجبور بوده اند خطا رو جوری مدیریت کنند مثل Try Except دلفی پس می دونستند کجا خط ممکن است اتفاق بیفته و شماره خط رو نیز اونجا اعلام کرده اند.

  7. #7
    assertion کمکت میکنه،
    هر جایی که لازم داری شماره‌ی خط و یونیت رو بشناسی می‌تونی از Assert استفاده کنی،
    اصولاً Assert رو در زمان دیباگ استفاده می‌کنند، ولی می‌تونی زمانی که فایل Exe به تنهایی در حال اجراست از Assert به همراه کامپایلر دیرکتیو زیر استفاده کنی:


    {$ASSERTIONS ON}


    که در ابتدای یونیتت و فقط یکبار می‌نویسی.

  8. #8
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    شرمنده آقای خرسندی عزیز.
    من تا حالا با Assert کار نکردم و نمی دانم باید چطور استفاده کنم.
    اگر امکان دارد با یک کد کوچک مثال بزنید.
    واقعاً ممنون شما می شوم.

  9. #9
    این شکل کلی Assert هست :

    Assert(Boolean Expression, Message)


    اگه عبارت منطقی False باشه، پیغام (یعنی پارامتر بعدی) به همراه نام یونیت و شماره خط نمایش داده می‌شود. بنابراین میتونی از اولین مثال زیر که دائماً اطلاعات مورد نظر رو نمایش میده استفاده کنی.
    مثال :

    Assert(False, 'Error Information');
    Assert(A > 5, 'Message');


    بد نیست لینک‌های زیر رو هم ببینی :
    Handling Errors and Exceptions in Delphi
    What access violations are and how to prevent AVs

  10. #10
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    آقا محمد واقعاً دستت درد نکنه.
    انشاا... یک روز بتونم از خجالت تون در بیام.(البته اگر قابل باشم)
    یا حق ! ! !

  11. #11
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    شرمنده یکی و دوتا دیگه سوال برام پیش اومد که ممنون می شم اگر جواب بدید.
    1-دستور Assert خوبه ولی زمانی که من در Try . . Except . . . End استفاد ه می کنم در قسمت Except می گذارم که شماره خط خطا رو بده شمازه خطی را که خود Assert قرار دارد می دهد.
    2-آیا می شود دستوری که باعث خطا شده است را در Message نمایش داد؟(در
    Try . . Except ما چندین دستور وجود دارد.
    3-در قسمت BDF که شما در سایت برای Try . . Except (مدیریت خطاها)نوشته اید در قسمتیش گفته اید:
    می توانید از رویداد Apllication.Exception بنویسید و خطاها را در سطح برنامه کنترل کنید.
    می توانید توضیحات بیشتر و نحوه نوشتن این رویداد را بیان کنید.
    سوالات از یکی دوتا که بیشتر شد؟؟؟؟؟؟؟؟
    با تقدیم احترام.

  12. #12
    فرض میکنیم که کلاسی داریم برای کنترل خطاهای برنامه،
    این کلاس یک procedure به نام ApplicationException داره که میتونیم اون رو به رویداد OnException شیی Application تخصیص بدیم. این بدنه‌ی procedure کنترل کننده‌ی خطای برنامه‌ست :

    Procedure THandleException.ApplicationException(Sender: TObject; Prm_Except: Exception);
    begin
    //...
    end;


    این هم تخصیص procedure به رویداد OnException برنامه :

    Application.OnException := ApplicationException


    از این به بعد اگر خطایی اتفاق بیفتد، این procedure اجرا خواهد شد.

  13. #13
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط m-khorsandi مشاهده تاپیک
    فرض میکنیم که کلاسی داریم برای کنترل خطاهای برنامه،
    این کلاس یک procedure به نام ApplicationException داره که میتونیم اون رو به رویداد OnException شیی Application تخصیص بدیم. این بدنه‌ی procedure کنترل کننده‌ی خطای برنامه‌ست :

    Procedure THandleException.ApplicationException(Sender: TObject; Prm_Except: Exception);
    begin
    //...
    end;


    این هم تخصیص procedure به رویداد OnException برنامه :

    Application.OnException := ApplicationException


    از این به بعد اگر خطایی اتفاق بیفتد، این procedure اجرا خواهد شد.
    آقا محمد اینها را باید کجا برنامه بنویسم؟
    اگه میشه یک برنامه کوچک بگذار.
    با تشکر

  14. #14
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    همچنان منتظر راهنمایی و کمک شما هستم.
    ببخشید وقت شما را می گیرم.
    شرمنده

  15. #15
    سلام
    آقا محمد اینها را باید کجا برنامه بنویسم؟
    اگه میشه یک برنامه کوچک بگذار.
    با اجازه از آقای خرسندی ...
    این Procedure رو باید در قسمت Public یا Private فرم ( بر حسب نیاز ) تعریف کنید و بعد بدنه Procedure رو بنویسید ، حالا هر جایی که خواستید ، مثلا زیر عبارت Implementation ، البته اگه بخواید کلاسی برای این کار تعریف کنید ، باید Procedure رو در قسمت Public یا Private همون کلاس تعریف کرده و ازش استفاده کنید ...
    Type
    Form1 = Class(TForm)
    ...
    Private
    ...
    Public
    Procedure MyExceptionProcedure (Sender : TObject; prm_Excep : Exception)
    end;


    بعد خود Procedure رو تعریف میکنی که در بالا گفتم کجا ...

    و بعد در یک رویداد ، مثلا در OnCreate فرم ، کد آخر یعنی : Application.OnException := MyExceptionProcedure رو می نویسی ...

    از این به بعد اگر خطایی اتفاق بیفتد، این procedure اجرا خواهد شد.
    -----------
    البته این برای وضعیتی بود که شما از کلاس استفاده نکردید ...
    اون موقع باید یک تغییراتی ایجاد بشه ، یعنی به جای TForm باید از کلاس مورد نظر استفاده کنید ...

    موفق باشید ...

  16. #16
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان - ایران
    پست
    290

    نقل قول: شماره خط و دستوری که باعث خطا شده

    آیا می شود در پروسیجری که برای Application.OnException نوشته ایم، نام یونیت و شماره خطی که خطا در آن اتفاق اقتاده است را ذخیره کرد؟

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

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