PracticU

Error Handling - טיפול בשגיאות

בלי כתוביותעם כתוביות
PracticU › קורס ASP.NET › Error Handling - טיפול בשגיאות
מילון מושגים:
תגית - סימון בקוד, למשל ב-HTML, שתוחם רכיב ומגדיר את תפקידו או תכונותיו. גם תווית לסימון וקיטלוג פריטים.
דיבאג - תהליך של איתור, הבנה ותיקון תקלות בקוד, לעיתים בעזרת כלי שמאפשר לעצור ולעקוב אחר ריצת התוכנית.
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.
אירוע - התרחשות שהמערכת מזהה ויכולה להגיב לה, כמו לחיצת עכבר, הקשה או סיום פעולה.
תגובה - המידע שהשרת מחזיר ללקוח בתשובה לבקשה, הכולל בדרך כלל נתונים וקוד סטטוס.
נתיב - מחרוזת שמתארת את מיקומו של קובץ או תיקייה במערכת הקבצים, או כתובת של משאב בתוך אתר.
URL - הכתובת שמזהה משאב באינטרנט, למשל דף אתר, וכוללת פרוטוקול, שם מארח ונתיב.
HTML - שפת הסימון שבה בונים את מבנה ותוכן דפי האינטרנט, באמצעות תגיות שמגדירות כותרות, פסקאות, קישורים ועוד.

Error Handling - טיפול בשגיאות
השיעור עוסק במה עושים כשקוד צד השרת נופל, ואיך מטפלים בשגיאה כך שהלקוח מקבל הודעה מסודרת במקום קריסה. הדוגמה היא דף שמחשב ריבוע של מספר שהמשתמש מכניס. כשמכניסים ABC, האתר קורס.
זיהוי השגיאה בזמן פיתוח
בתגית Page מגדירים debug="true", ואז השגיאה מוצגת עם השורה האדומה בקוד. בהרצה עם F5 (ולא Ctrl+F5) הדפדפן עובר למצב דיבאג ישירות על השורה שגרמה לקריסה. את ההגדרה ברמת כל האתר עושים ב-web.config, בתגית compilation עם debug="true". בשרת שעולה לאוויר חשוב להחזיר ל-false, כדי שלקוחות לא יראו את הקוד או את פרטי השגיאה.
טיפול בסוגי השגיאות
הקוד int.Parse על טקסט לא מספרי זורק FormatException, ומספר גדול מדי זורק OverflowException. לכן ב-try-catch עושים בלוק catch נפרד לכל סוג, ובסוף בלוק כללי שתופס את Exception. בתוך הבלוקים מציגים הודעה ללקוח בתווית שצבעה אדום.
טיפול ברמת הדף: Page_Error
אם שגיאה לא טופלה ב-try-catch, האירוע Page_Error מתרחש לפני הקריסה. בתוכו קוראים ל-Server.GetLastError() כדי לקבל את האובייקט של השגיאה, בודקים את הטיפוס עם is, וקוראים ל-Server.ClearError() כדי לומר שטופלה. בגלל שהדף מתרוקן בזמן טיפול כזה, את ההודעה כותבים עם Response.Write, ומוסיפים קישור חזרה לדף. הקישור בונה את הנתיב המלא של הדף הנוכחי ב-Request.Url.
טיפול ברמת האתר: Application_Error
ב-Global.asax נמצא האירוע Application_Error, שתופס כל שגיאה שלא טופלה במקום אחר באתר. השגיאה שנתפסת היא בדרך כלל עטופה באובייקט פנימי, ולכן לוקחים את InnerException אחרי בדיקה שהוא אינו null.
טיפול באתר כולו: customErrors
ב-web.config, בתגית customErrors עם mode, מגדירים מה קורה בשגיאה שלא טופלה. ניתן להגדיר דף ברירת מחדל, וגם הפניה לדף נפרד לפי קוד שגיאה: 404 לדף שלא נמצא, ו-403 לגישה שנדחתה. בשיעור מוצגים דפי HTML שונים לכל קוד.
שימו לב
המרצה מציין שאין לשלוט על כל שגיאה אפשרית, ולכן עדיף תמיד להשאיר תפיסה כללית בסוף הרשימה.
בקצרה: ארבע רמות טיפול, מהמקומי אל הכללי: try-catch, Page_Error, Application_Error ו-customErrors.
השיעור הבא בקורס: Validation - ולידציה

פרקי ההרצאה: Error Handling - טיפול בשגיאות

  1. 00:00

    הקדמה לטיפול בשגיאות

  2. 01:24

    חישוב ריבוע של מספר

  3. 03:00

    שגיאה בקלט לא תקין

  4. 04:34

    הגדרת Debug בתגית Page

  5. 06:40

    הרצה עם F5 מול Ctrl+F5

  6. 07:45

    Debug ב-web.config

  7. 08:22

    החזרת Debug ל-false באוויר

תמלול ההרצאה: Error Handling - טיפול בשגיאות

הטקסט המלא של הדקות הראשונות בהרצאה «Error Handling - טיפול בשגיאות» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

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

  2. 00:16

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

  3. 01:27

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

  4. 01:46

    מה הייתי עושה? הייתי לוקח איזשהו אינטג'ר num. הייתי מכניס לתוכו את מה שנכנס בתיבת טקסט לאחר המראה. הייתי לוקח עוד משתנה עבור החזקה זה אמור להיות num כפול num ולבסוף מציג את זה בלייבל.

  5. 02:35

    בואו נבדוק כרגע את האתר נגדיר את ההומפייג' כset as start page ונריץ. מכניס מספר, ציג show power ונראה ש-12 בריבוע זה 144, הכל טוב ויפה.

  6. 03:08

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

  7. 03:27

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

  8. 03:49

    אם אני קורא מה קרה כאן, אני רואה שהשרת אומר לי server arrow in arrow handling, זה השם של האתר שלי, application input string was not in a correct format, איזושהי הודעת שגיאה שקרתה.

  9. 04:06

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

  10. 04:30

    לי מה אני צריך לעשות בשביל לתת לי מידע קצת יותר מפורט. בהנחה שאני בתור מתכנת לא יודע מה הייתה הבעיה. ראשית, הוא אומר לי, לך לתגית page ותגדיר debug=true.

  11. 04:47

    בואו נסתכל מה יקרה אם אני אגדיר את זה בתגית page. נחזור לדף שלנו, נלך לסורס, תגית page, ונגדיר דיבאג שווה true.

  12. 05:02

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

  13. 05:39

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

  14. 06:04

    אני רואה שהמידע שקיים בתיבת הטקסט לא יכול להיות מומר לאינטג'ר בצורה ישירה במידה והמידע הזה לא מכיל מספר טהור אז א' אני רואה שקרתה כאן שגיאה אני יודע בדיוק באיזה שורה היא קרתה ואני יכול עכשיו לגשת ולטפל בה בשביל לראות את האתר הזה בצורה כזאת את האינפוט את האוטפוט הזה בצורה כזאת הרצתי את האתר שלי עם ctrl f5 ctrl f5 מדמה הרצה על ידי הלקוח אם הייתי מריץ

  15. 06:39

    את האתר הזה על ידי f5 זה אומר לחיצה על הפליי שמופיע כאן הייתי רואה משהו קצת אחר. ראשית, יש לי פה איזושהי הודעה, אנחנו תכף נראה מה ההודעה הזאת, אני עושה אוקיי, אתר רץ, אני מכניס ABC,

  16. 07:10

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

  17. 07:28

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

  18. 07:40

    אוקיי, בואו נעצור ונסתכל על דבר נוסף. דיבאג שווה true אפשר לי לבדוק את השגיאה הזאת רק בדף הנוכחי. אם אני רוצה לבדוק את השגיאה, או יותר נכון לקבל פירוט נרחב לגבי השגיאה בכל דפי האתר בבת אחת בזמן הפיתוח, אני צריך ללכת ל-WebConfig ולהגדיר כאן דיבאג שווה true בתגית Compilation, שנמצאת בתגית system.web שנמצאת בתגית

  19. 08:18

    configuration ברגע שעשיתי את הדבר הזה ואומר שכל האתר שלי בכל הדפי האתר במידה ותתבצע בהם קריסה אנחנו נקבל את המידע המפורט הזה אבל יש לשים לב אם אני מעלה את האתר הזה לאוויר חשוב מאוד להפוך את הדבר הזה ל-false בכדי שלקוח במידה והוא יקבל איזושהי קריסה לא יראה את המידע שקיים בצד השרת ולא יראה בדיוק איפה הייתה הקריסה בצד השרת

  20. 08:51

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

  21. 09:02

    אוקיי, אז אם אני שם את זה כדיבאג שווה false ושוב פעם מריץ את האתר ב-F5 אני רואה את ההודעה הזאת וכל מה שההודעה הזאת אומרת זה שאם אני לוחץ אוקיי היא תשנה לי את הדיבאג הזה לטרו בכדי שאני אוכל לראות מידע מפורט בקשר לשגיאה.

  22. 09:25

    ובגדול מה שההודעה הזאתי ציינה לי. בואו נסתכל רגע, נסגור את האתר, נחזור ל-WebConfig ונראה דיבאג שווה טרו זה מה שההודעה עשתה. אם כרגע אני אריץ את זה עם F5 בגלל שדיבאג שווה טרו האתר יכול להמשיך לרוץ בצורה רגילה וכמובן אם תתבצע קריסה והרצתי את זה עם F5 אני אקבל את השורה המדויקת במצב דיבאגר אם אני אריץ את האתר הזה עם קונטרול F5 ותתבצע

לקורס המלא: קורס ASP.NET אונליין

ההרצאה הקודמת: User Controls

ההרצאה הבאה: Validation - ולידציה

הרצאות קשורות מקורסים אחרים

  • טיפול בשגיאות - Exception Handling
  • Improper Error Handling
  • טיפול בחריגות - Exception Handling
  • טיפול בשגיאות בצד שרת - Exceptions

קורסים נוספים במסלול

  • קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט
  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio