با سلام
- می خواستم بدانم چگونه می توان شما خط و دستوری که باعث بروز خطا شده است را بدست آورد؟
- در دلفی جدولی است که خطاها در آن وجود دارد.این جدول در کجا قرار دارد؟
با سلام
- می خواستم بدانم چگونه می توان شما خط و دستوری که باعث بروز خطا شده است را بدست آورد؟
- در دلفی جدولی است که خطاها در آن وجود دارد.این جدول در کجا قرار دارد؟
یعنی چی؟می خواستم بدانم چگونه می توان شما خط و دستوری که باعث بروز خطا شده است را بدست آورد؟
خوب خطی که خطا می دهد روی اون متوق شده مکان نما را به اونجا ببرید و شماره خط را اون پایین در Status Bar می بینی!!
تو help کلمه ی errorرا جستجو کن.در دلفی جدولی است که خطاها در آن وجود دارد.این جدول در کجا قرار دارد؟
توی Exe دیگه شماره خط و دستور و این حرفها مطرح نیست. شما میتونید با استفاده از Try Except پیغامهائی رو بذارید که مشخص کنه کجا خطا داده یا اینکه با استفاده از Resource DLL Wizard پیغامهای خطا رو به اون شکلی که خودتون دوست دارید در بیارید. ولی اون هم صد درصد اون چیزی که شما میخواهید در نمیاد
You never know what you can do until you try
برنامه ی نمونه ی vb را بذارید.
خوب شما هم می تونید این کار رو بکنید. تو فایل exe که شماره خط معنا نداره.
اما اگر می خواهید جایی که خطا رخ داده را مشخص کنید چون دوستان شما مجبور بوده اند خطا رو جوری مدیریت کنند مثل Try Except دلفی پس می دونستند کجا خط ممکن است اتفاق بیفته و شماره خط رو نیز اونجا اعلام کرده اند.
assertion کمکت میکنه،
هر جایی که لازم داری شمارهی خط و یونیت رو بشناسی میتونی از Assert استفاده کنی،
اصولاً Assert رو در زمان دیباگ استفاده میکنند، ولی میتونی زمانی که فایل Exe به تنهایی در حال اجراست از Assert به همراه کامپایلر دیرکتیو زیر استفاده کنی:
{$ASSERTIONS ON}
که در ابتدای یونیتت و فقط یکبار مینویسی.
با سلام
شرمنده آقای خرسندی عزیز.
من تا حالا با Assert کار نکردم و نمی دانم باید چطور استفاده کنم.
اگر امکان دارد با یک کد کوچک مثال بزنید.
واقعاً ممنون شما می شوم.
این شکل کلی 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
با سلام
آقا محمد واقعاً دستت درد نکنه.
انشاا... یک روز بتونم از خجالت تون در بیام.(البته اگر قابل باشم)
یا حق ! ! !
با سلام
شرمنده یکی و دوتا دیگه سوال برام پیش اومد که ممنون می شم اگر جواب بدید.
1-دستور Assert خوبه ولی زمانی که من در Try . . Except . . . End استفاد ه می کنم در قسمت Except می گذارم که شماره خط خطا رو بده شمازه خطی را که خود Assert قرار دارد می دهد.
2-آیا می شود دستوری که باعث خطا شده است را در Message نمایش داد؟(در
Try . . Except ما چندین دستور وجود دارد.
3-در قسمت BDF که شما در سایت برای Try . . Except (مدیریت خطاها)نوشته اید در قسمتیش گفته اید:
می توانید از رویداد Apllication.Exception بنویسید و خطاها را در سطح برنامه کنترل کنید.
می توانید توضیحات بیشتر و نحوه نوشتن این رویداد را بیان کنید.
سوالات از یکی دوتا که بیشتر شد؟؟؟؟؟؟؟؟
با تقدیم احترام.
فرض میکنیم که کلاسی داریم برای کنترل خطاهای برنامه،
این کلاس یک procedure به نام ApplicationException داره که میتونیم اون رو به رویداد OnException شیی Application تخصیص بدیم. این بدنهی procedure کنترل کنندهی خطای برنامهست :
Procedure THandleException.ApplicationException(Sender: TObject; Prm_Except: Exception);
begin
//...
end;
این هم تخصیص procedure به رویداد OnException برنامه :
Application.OnException := ApplicationException
از این به بعد اگر خطایی اتفاق بیفتد، این procedure اجرا خواهد شد.
با سلام
همچنان منتظر راهنمایی و کمک شما هستم.
ببخشید وقت شما را می گیرم.
شرمنده
سلام
با اجازه از آقای خرسندی ...آقا محمد اینها را باید کجا برنامه بنویسم؟
اگه میشه یک برنامه کوچک بگذار.
این 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 باید از کلاس مورد نظر استفاده کنید ...
موفق باشید ...
آیا می شود در پروسیجری که برای Application.OnException نوشته ایم، نام یونیت و شماره خطی که خطا در آن اتفاق اقتاده است را ذخیره کرد؟