לכידת שגיאות זמן ריצה ב-VBS

‏ • 18 באוקטובר, 2003

בעת הרצת סקריפט ASP, עלולות להווצר שגיאות זמן ריצה, שלא ניתן לזהות אותן ע"י הרצה של הסקריפט ללא בדיקה יסודית. לדוגמא, אם יצרנו טופס הרשמה, ולא דאגנו לכך, שבשדות בטופס לא יהיה ניתן להכניס את התווים גרש וגרשיים, משתמש מסויום שמנסה להרשם, עלול להכניס לשדות אלו גרש ו/או גרשיים, ולגרום לשגיאת זמן ריצה. ניתן לטפל בשגיאות אלו ע"י אובייקט Error של ADO.

לשימוש באובייקט זה שתי יתרונות:


  1. בעת שגיאה, ניתן להציג הודעה על המסך לגולש, במקום שתוצג הודעת שגיאה לא מובנת, או שהמשתמש יקבל דף שגיאה של האקספלורר (שנראה כמו דף 404).
  2. ניתן לאתר תקלות ע"י האובייקט, ולשמור אותן בקובץ טקסט, או לשלוח אותן לאימייל ע"י אוביייקט דואר. כך תהיה מודע לשגיאה ותוכל לטפל בה.

בכדי להשתמש באובייקט, נכתוב את המשפט הבא בתחילת הקוד (או במקום בו אנו מעוניינים לטפל בשגיאות זמן ריצה):






1  



On Error Resume Next


המשפט הנ"ל אומר למעבד, שברגע שהוא נתקל בשגיאה, הוא יתעלם ממנה ויעבור לביצוע הפקודה הבאה,המעבד יתעלם מכל השגיאות שמתבצעות אחרי משפט זה, עד ליציאה מהפונקציה (Function) או משגרת המשנה (Sub) שהכילו את המשפט, או עד המשפט הבא:






1  



On Error GoTo 0


לדוגמא, נריץ את הקוד הבא:






1
2
3
4
5
6
7
8
9  




<%
On Error Resume Next
Dim X,Y,Z
X = 3
Y = 0
Z = X/Y
Response.Write "Hello!"
On Error GoTo 0
%>


הדף לא יחזיר שגיאה ויציג את הפלט:

Hello!

במקרה ולא נשתמש באובייקט Error, הדף יחזיר שגיאה:

Error Type:
Microsoft VBScript runtime (0x800A000B)
Division by zero


*כמובן שזו דוגמא פשוטה וניתן ליישם את זה על מערכות יותר מסובכות שעובדות מול מסדי נתונים וכד'.

טיפלנו בסקריפט, ומנענו מהמשתמש לראות את השגיאה. אבל זה עדיין לא אומר שהיא איננה ושהיא אינה פוגעת בפעילותו של האתר, לכן נצטרך לקבל מידע אודות השגיאה בכדי לטפל בה.

בשביל לקבל מידע אודות השגיאה נשתמש במאפיינים של האובייקט Error:


  • Number – המספר המזהה של השגיאה.
  • Description – תיאור של השגיאה.
  • Source – האובייקט או היישום שחולל את השגיאה.
  • HelpFile – נתיב לקובץ עזרה של Windows המסביר את השגיאה.
  • HelpContext – נושא בתוך קובץ העזרה.
כעת ניצור תנאי, שבודק האם התבצעה שגיאה:






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15  




<%
On Error Resume Next
Dim X,Y,Z
X = 3
Y = 0
Z = X/Y
Response.Write "Hello!"

If Err<>0 Then
  'כאן יבוא קוד שמתבצע אם התגלתה שגיאה
End If

On Error GoTo 0
%>



במקרה והתבצעה שגיאה, המשפט:






1
2  




If Err<>0 Then



יקבל את הערך True.

דוגמא לשימוש במאפיינים של האובייקט ובמשפט הנ"ל היא הצגת השגיאה.
ניתן להציג את השגיאה כך:






1
2
3
4
5
6
7  




<%
If Err<>0 Then
  Response.Write "Error Number:" & Err.Number
  Response.Write "Description:" & Err.Description
  Response.Write "Source:" & Err.Souce
End If
%>


הצגת השגיאה לא תמיד תפתור את הבעיה, מכיוון ששגיאות אלו עלולות להווצר בעת שגולש מסוים ביקר באתר (כגון השגיאה המפורטת בפתיחת המאמר), ואין באפשרותינו לדעת על שגיאה זו.במקום זאת, ניתן לכתוב מידע אודות השגיאה לתוך קובץ טקסט, או לשלוח את המידע לאימייל ע"י אובייקט דואר. חשוב לציין, כי מומלץ לציין פרטים נוספים אודות השגיאה, כגון הנתונים שנשלחו אל הדף, הדף בו התבצעה השגיאה וכד', מכיוון שהמידע שמספק האובייקט, לא מפורט מספיק בכדי לאתר את השגיאה.

תכנות נעים ונטול שגיאות!

תגיות: , , ,

תגובות בפייסבוק