מנפה שגיאות

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

## היסטוריה
300px|ממוזער|באג המחשב הראשון בהיסטוריה
### מקור השם
לשגיאה בתוכנה נהוג לקרוא באג (חרק, באנגלית: Bug). יש עדויות לשימוש במונח זה עוד בשנת 1878, במכתב ששלח תומאס אדיסון לשותף שלו, בו הוא מתאר כי נותרו לו מעט בעיות (באגים) לפתור בפיתוח שלו, אך המונח נטבע רשמית על ידי גרייס הופר בשנת 1952, בזמן שעבדה על הרווארד סימן 2, והתגלה עש בתוך המכונה שגרם לבעיות בתפקוד שלה. לאחר שהוציאו את החרק מתוך המכונה, הוא הודבק ליומן מעקב של המכונה (כפי שניתן לראות בתמונה), והתפשטה השמועה כי המפתחים דיבגו (debugged) את המכונה, וכך נטבע המונח.

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

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

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

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

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

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

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

### תלות בשפת הפיתוח
לרוב דיבאגרים מתאימים ספציפית לשפת תכנות אחת, ולכן לכל שפת תכנות יש למצוא דיבאגר מתאים, אך קיימים מספר דיבאגרים (כגון GDB) המתאימים למספר שפות.

## מנפי שגיאות נפוצים
הנה מספר דוגמאות למנפי שגיאות נפוצים:

# דיבאגר ה-javascript של פיירפוקס או של גוגל כרום
# GDB
# LLDB
# הדיבאגר של Eclipse

## ראו גם
*סביבת פיתוח משולבת

## קישורים חיצוניים
# Moth in the machine: Debugging the origins of 'bug'

## הערות שוליים

קטגוריה:מדעי המחשב
קטגוריה:ניפוי שגיאות
קטגוריה:מחשוב