שיעור 25: gdb — דיבוג קוד native ו-core dumps
תוכנית C++ שלכם קורסת ל-segfault — null pointer dereference, stack overflow, buffer overflow. איך מוצאים את השורה שגרמה לכך? gdb (GNU Debugger) הוא הכלי הסטנדרטי לדיבוג קוד native ב-Linux. הוא מאפשר לעצור ב-breakpoints, לעבור שורה אחרי שורה, לבדוק ערכי משתנים ולנתח core dumps. ב-NVIDIA, כשתוכנת CUDA
gdb הוא כמו מנהל חקירות שיכול להקפיא זמן. כשקורסת תוכנית הוא שואל: 'מה היה ערך של המשתנה הזה ברגע הקריסה? מי קרא לפונקציה הזו? איפה בדיוק היינו?' core dump הוא תמונת זיכרון שנשמרת ברגע הקריסה — כמו תמונה של סצנת פשע שאפשר לחקור שעות אחרי שהאירוע קרה.
- gdb (GNU Debugger)
- debugger סטנדרטי ל-C/C++ ב-Linux. מאפשר הרצה שלב-אחר-שלב, breakpoints, בדיקת משתנים וניתוח core dumps.
- נקודת עצירה (breakpoint)
- הוראה ל-gdb לעצור את הביצוע כשמגיעים לשורה ספציפית בקוד. מאפשר לבדוק את מצב התוכנית בנקודה מדויקת.
- backtrace (bt)
- פקודת gdb שמציגה את ה-call stack הנוכחי: רשימת כל הפונקציות שנקראו ולא חזרו עדיין, מהחדשה ביותר לישנה ביותר.
- core dump
- קובץ שנוצר כשתוכנית קורסת, המכיל תמונה של זיכרון התוכנית, registers ו-call stack ברגע הקריסה. gdb יכול לנתח אותו post-mortem.
- watchpoint
- כמו breakpoint אבל על משתנה: gdb עוצר כל פעם שהמשתנה משתנה. שימושי לאיתור where בקוד משתנה ערך שלא אמור להשתנות.