kachwahed
21-04-2010, 09:07 AM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله
أثناء العمل البرمجي يحاول المبرمج توقع كافة الأخطاء الممكن حصولها، من أجل توجيه أفضل للمستخدم إلى طريقة التعامل مع الأخطاء وتقديم الحلول الممكنة
ومهما كانت المحاولة فإن هناك أخطاء قد يصعب على المبرمج التنبه إليها وبالتالي يواجه المستخدم رسالة خطأ لا يفهم محتواها...
يمكن تفادي مثل ذلك باقتناص حدث الاستثناء (Exception) الحاصل في البرنامج، ومنه إعداد تقرير يجمع كافة الأخطاء التي حدثت أثناء استخدام البرنامج مع تفاصيل قد تهم المبرمج، ويمكن حينها عرض رسالة للمستخدم تعلمه بذلك...
1- الإعلان عن إجراء: يمكن تسمية إجراء الاستثناء بأي اسم
procedure LogException(Sender: TObject; E: Exception);
جسم الإجراء، هذا المثال لحفظ رسالة الخطأ في ملف نصي:
procedure TfMain.LogException(Sender: TObject; E: Exception);
var
Log: TStringList;
begin
MessageDlg('عذرا! حصل خطأ غير متوقع في البرنامج'+#13+
'للمزيد من التفاصيل انظر ملف تقرير الأخطاء' ,mtError, [mbOK],0);
Log := TStringList.Create;
try
if FileExists(LOGFILE) then
Log.LoadFromFile(LOGFILE)
else begin
Log.Add(Application.Title+' - Error report');
Log.Add('=====================================');
Log.Add('Date |Hour | Error Message');
Log.Add('========== ======== =================');
end;
Log.Add(DateToStr(Date) +'|' + TimeToStr(Time)+'|' + E.Message);
Log.SaveToFile(LOGFILE);
finally
Log.Free;
end;
end;
2- وهنا النقطة الأهم حيث نقوم باستبدال حدث الإجراء للتطبيق بالحدث الذي كتبناه سابقا:
procedure TfMain.FormCreate(Sender: TObject);
begin
Application.OnException := LogException;
end;
تم ذلك عند إقلاع النموذج الرئيسي (OnCreate)
ملاحظات:
- لا تستخدم هذه الطريقة إلا إذا مع تسيير جيد لمعظم أخطاء البرنامج (بحماية الحيزTry/Except)، حيث تبقى بعض الأخطاء غير المتوقعة هي التي تدرج في ملف LOG
- في حالات كثيرة تكون رسائل الأخطاء مفهومة وواضحة، حيث يمكن للمستخدم التعامل معها، وهنا يستحسن عرض رسالة الخطأ كما هي.
- يمكن إضافة معلومات أخرى حول طبيعة رسالة الخطأ ومعلومات حول نظام التشغيل وغير ذلك، كما يمكن إرسال الملف النصي عبر البريد الالكتروني للمبرمج لتدارك الخطأ برمجيا في إصدارات لاحقة.
في هذه الطريقة نبذة حول الفكرة الأساسية لتسيير الأخطاء، وهو ما تعتمد عليه بعض المكونات المخصصة لهذا الغرض، نذكر منها المكونات الشهيرة EurekaLog
http://www.eurekalog.com/index_delphi.php
يمكن تطوير هذا المثال إلى مكون أو مكتبة لتسهيل الاستخدام.
مثال صغير للتوضيح في المرفقات، يقوم بإثارة بعض الأخطاء وحفظها في ملف تقرير.
وباب المناقشة مفتوح :)
السلام عليكم ورحمة الله
أثناء العمل البرمجي يحاول المبرمج توقع كافة الأخطاء الممكن حصولها، من أجل توجيه أفضل للمستخدم إلى طريقة التعامل مع الأخطاء وتقديم الحلول الممكنة
ومهما كانت المحاولة فإن هناك أخطاء قد يصعب على المبرمج التنبه إليها وبالتالي يواجه المستخدم رسالة خطأ لا يفهم محتواها...
يمكن تفادي مثل ذلك باقتناص حدث الاستثناء (Exception) الحاصل في البرنامج، ومنه إعداد تقرير يجمع كافة الأخطاء التي حدثت أثناء استخدام البرنامج مع تفاصيل قد تهم المبرمج، ويمكن حينها عرض رسالة للمستخدم تعلمه بذلك...
1- الإعلان عن إجراء: يمكن تسمية إجراء الاستثناء بأي اسم
procedure LogException(Sender: TObject; E: Exception);
جسم الإجراء، هذا المثال لحفظ رسالة الخطأ في ملف نصي:
procedure TfMain.LogException(Sender: TObject; E: Exception);
var
Log: TStringList;
begin
MessageDlg('عذرا! حصل خطأ غير متوقع في البرنامج'+#13+
'للمزيد من التفاصيل انظر ملف تقرير الأخطاء' ,mtError, [mbOK],0);
Log := TStringList.Create;
try
if FileExists(LOGFILE) then
Log.LoadFromFile(LOGFILE)
else begin
Log.Add(Application.Title+' - Error report');
Log.Add('=====================================');
Log.Add('Date |Hour | Error Message');
Log.Add('========== ======== =================');
end;
Log.Add(DateToStr(Date) +'|' + TimeToStr(Time)+'|' + E.Message);
Log.SaveToFile(LOGFILE);
finally
Log.Free;
end;
end;
2- وهنا النقطة الأهم حيث نقوم باستبدال حدث الإجراء للتطبيق بالحدث الذي كتبناه سابقا:
procedure TfMain.FormCreate(Sender: TObject);
begin
Application.OnException := LogException;
end;
تم ذلك عند إقلاع النموذج الرئيسي (OnCreate)
ملاحظات:
- لا تستخدم هذه الطريقة إلا إذا مع تسيير جيد لمعظم أخطاء البرنامج (بحماية الحيزTry/Except)، حيث تبقى بعض الأخطاء غير المتوقعة هي التي تدرج في ملف LOG
- في حالات كثيرة تكون رسائل الأخطاء مفهومة وواضحة، حيث يمكن للمستخدم التعامل معها، وهنا يستحسن عرض رسالة الخطأ كما هي.
- يمكن إضافة معلومات أخرى حول طبيعة رسالة الخطأ ومعلومات حول نظام التشغيل وغير ذلك، كما يمكن إرسال الملف النصي عبر البريد الالكتروني للمبرمج لتدارك الخطأ برمجيا في إصدارات لاحقة.
في هذه الطريقة نبذة حول الفكرة الأساسية لتسيير الأخطاء، وهو ما تعتمد عليه بعض المكونات المخصصة لهذا الغرض، نذكر منها المكونات الشهيرة EurekaLog
http://www.eurekalog.com/index_delphi.php
يمكن تطوير هذا المثال إلى مكون أو مكتبة لتسهيل الاستخدام.
مثال صغير للتوضيح في المرفقات، يقوم بإثارة بعض الأخطاء وحفظها في ملف تقرير.
وباب المناقشة مفتوح :)