מערכת זיהוי שגיאות

‏ • 30 בספטמבר, 2002



כל מי שאי פעם כתב קוד ASP (או כל שפת תכנות למען האמת) נתקל בשגיאות הידור.
אבל בניגוד לשגיאות הידור (קומפילציה) קיימות גם שגיאות זמן ריצה (run-time errors), שהן יותר נדירות ויותר קשות למעקב/איתור/תיקון.

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

עוד דוגמא היא אתר עם הרבה עמודים דינאמיים, שכל אחד מהם מבצע עבודה מול השרת ומקבל נתונים מהמשתמש (גולש). כל העמודים עובדים טוב בבדיקה ראשונית, אבל מאוד ייתכן שקלט מסוים מהמשתמש יגרום לשגיאה. למשל, המשתמש צריך להקליד שם לחיפוש, ויוצגו לו נתונים עבור שם זה. אתם, בתור מתכנתים, הנחתם שתמיד יוזן שם שקיים. אבל אם הוזן שם שלא קיים, תהיה הודעת שגיאה כאשר הקוד ינסה לקרוא משהו שלא קיים. הפתרון מאוד פשוט במקרה זה – בדיקה פשוטה של If rs.EOF Then. אבל כל עוד לא בדקתם בעצמכם וקיבלתם את השגיאה, אתם – בתור מתכנתים – בכלל לא מודעים שיש שגיאה!

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

בניית המערכת פשוטה למדי. יש לכתוב דף ASP אחד המכיל פונקציה שבודקת את השגיאה האחרונה, ושולחת אותה אלינו אם היא קיימת.
דף זה יוכלל בכל עמוד במערכת, כלומר כל עמוד שאנו רוצים לתפוס את השגיאות שקורות בו. בכל עמוד כזה, יש לקרוא לפונקציה הנ”ל בקטעים מסוימים בקוד, שעלולים לגרום לשגיאת ריצה, והפונקציה כבר תעשה את שאר העבודה.

מצורפים בזאת כל הקבצים הדרושים, כולל דוגמאות.

הוראות שימוש במערכת

  1. העתיקו את הקובץ Error_Handling.asp אל התיקייה הראשית של האתר.
  2. שנו את כתובות האימייל בעמוד זה לכתובות שלכם. (כתובת האתר+שלכם)
  3. בכל עמוד שאת שגיאותיו רוצים לתפוס, הוסיפו את השורה הבאה בתחילתו:
    <!– #include file=”Error_Handling.asp” –>

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

    CheckError(1)

  6. לכל שורה כזו, שימו מספר אחר בסוגריים על מנת לדעת היכן התרחשה השגיאה – מספר זה יופיע בפרטי השגיאה שיישלחו אליכם.
  7. ניתן לשים את השורה הנ”ל בסוף העמוד בלבד, וכך נתפוס את השגיאה האחרונה – לרוב זה מספיק.
  8. אם יש שגיאה, הפרטים הבאים יישלחו אליכם:
    • תאריך ושעת התרחשות השגיאה.
    • כתובת IP של המשתמש שהפעיל את העמוד עם השגיאה.
    • העמוד בו אירעה השגיאה.
    • מספר השגיאה ופרטים, כפי שנמסרים ע”י השרת.
    • מקור השגיאה בעמוד – המספר שכתבתם בעת הקריאה לפונקציה.
    • כל נתוני ה-Querystring, כלומר כל הערכים שהועברו על שורת הכתובת.
    • כל נתוני ה-Request.Form, כלומר כל הערכים שהועברו על גבי טופס.
  9. על מנת להוסיף אופציות, כגון תיעוד השגיאות במסד נתונים, יש להוסיף או לשנות את הקוד בפונקציה CheckError בקובץ הראשי של המערכת. ניתן להתייעץ עם כותב מאמר זה: yahavbr@myrealbox.com
  10. כל הזכויות על סגנון המערכת שמורות, השימוש אישי בלבד. אין למכור את הקוד או למוסרו ללא אישור הכותב.

פרטים נוספים – למתקדמים

  1. ביטול מקומי של המערכת:
    • העתיקו את הקובץ ShowErrors.asp אל התיקייה הראשית של האתר.
    • כל פעם שאתם מעונינים לבטל זמנית את מערכת השגיאות ולראות את השגיאות המקוריות, הריצו את העמוד הנ”ל דרך דפדפן, לדוגמא: http://www.yoursite.com/ShowErrors.asp
    • למשך ה-Session שלכם, תבוטל המערכת ויוצגו השגיאות המקוריות.
  2. צפייה בפרטי השגיאה בעמוד עצמו: המערכת כותבת את פרטי השגיאה בקוד המקור של העמוד, בנוסף לשליחתהמידע באימייל. המידע בקוד המקור מוסתר, יש לעשות View Source Codeלעמוד, המידע יהיה מוצג בסוף הקוד.
  3. שליחת הודעת SMS: (לבעלי מכשיר פלאפון בלבד – עד 20 הודעות ביום)
    • העתיקו את הקובץ send_sms.asp אל התיקייה הראשית של האתר.
    • כתבו את מספר הפלאפון במקום המתאים בקוד – בפונקציה CheckError.
    • מחקו את תווי ההערה משתי השורות המתאימות – ההודעה תישלח אוטומטית.

להורדת הדוגמא

תגיות: , ,

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